mirror of https://github.com/xemu-project/xemu.git
ppc: Define SETFIELD for the ppc target
It keeps repeating, move it to the header. This uses __builtin_ffsll() to allow using the macros in #define. This is not using the QEMU's FIELD macros as this would require changing all such macros found in skiboot (the PPC PowerNV firmware). Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20220628080544.1509428-1-aik@ozlabs.ru> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
b7d30fae5b
commit
95444afcab
|
@ -66,26 +66,6 @@ static const XiveVstInfo vst_infos[] = {
|
|||
qemu_log_mask(LOG_GUEST_ERROR, "XIVE[%x] - " fmt "\n", \
|
||||
(xive)->chip->chip_id, ## __VA_ARGS__);
|
||||
|
||||
/*
|
||||
* QEMU version of the GETFIELD/SETFIELD macros
|
||||
*
|
||||
* TODO: It might be better to use the existing extract64() and
|
||||
* deposit64() but this means that all the register definitions will
|
||||
* change and become incompatible with the ones found in skiboot.
|
||||
*
|
||||
* Keep it as it is for now until we find a common ground.
|
||||
*/
|
||||
static inline uint64_t GETFIELD(uint64_t mask, uint64_t word)
|
||||
{
|
||||
return (word & mask) >> ctz64(mask);
|
||||
}
|
||||
|
||||
static inline uint64_t SETFIELD(uint64_t mask, uint64_t word,
|
||||
uint64_t value)
|
||||
{
|
||||
return (word & ~mask) | ((value << ctz64(mask)) & mask);
|
||||
}
|
||||
|
||||
/*
|
||||
* When PC_TCTXT_CHIPID_OVERRIDE is configured, the PC_TCTXT_CHIPID
|
||||
* field overrides the hardwired chip ID in the Powerbus operations
|
||||
|
|
|
@ -75,26 +75,6 @@ static const XiveVstInfo vst_infos[] = {
|
|||
qemu_log_mask(LOG_GUEST_ERROR, "XIVE[%x] - " fmt "\n", \
|
||||
(xive)->chip->chip_id, ## __VA_ARGS__);
|
||||
|
||||
/*
|
||||
* QEMU version of the GETFIELD/SETFIELD macros
|
||||
*
|
||||
* TODO: It might be better to use the existing extract64() and
|
||||
* deposit64() but this means that all the register definitions will
|
||||
* change and become incompatible with the ones found in skiboot.
|
||||
*
|
||||
* Keep it as it is for now until we find a common ground.
|
||||
*/
|
||||
static inline uint64_t GETFIELD(uint64_t mask, uint64_t word)
|
||||
{
|
||||
return (word & mask) >> ctz64(mask);
|
||||
}
|
||||
|
||||
static inline uint64_t SETFIELD(uint64_t mask, uint64_t word,
|
||||
uint64_t value)
|
||||
{
|
||||
return (word & ~mask) | ((value << ctz64(mask)) & mask);
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: Document block id override
|
||||
*/
|
||||
|
|
|
@ -31,22 +31,6 @@
|
|||
qemu_log_mask(LOG_GUEST_ERROR, "phb4_pec[%d:%d]: " fmt "\n", \
|
||||
(pec)->chip_id, (pec)->index, ## __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* QEMU version of the GETFIELD/SETFIELD macros
|
||||
*
|
||||
* These are common with the PnvXive model.
|
||||
*/
|
||||
static inline uint64_t GETFIELD(uint64_t mask, uint64_t word)
|
||||
{
|
||||
return (word & mask) >> ctz64(mask);
|
||||
}
|
||||
|
||||
static inline uint64_t SETFIELD(uint64_t mask, uint64_t word,
|
||||
uint64_t value)
|
||||
{
|
||||
return (word & ~mask) | ((value << ctz64(mask)) & mask);
|
||||
}
|
||||
|
||||
static PCIDevice *pnv_phb4_find_cfg_dev(PnvPHB4 *phb)
|
||||
{
|
||||
PCIHostState *pci = PCI_HOST_BRIDGE(phb);
|
||||
|
|
|
@ -12,22 +12,6 @@
|
|||
|
||||
#include "qemu/host-utils.h"
|
||||
|
||||
/*
|
||||
* QEMU version of the GETFIELD/SETFIELD macros
|
||||
*
|
||||
* These are common with the PnvXive model.
|
||||
*/
|
||||
static inline uint64_t GETFIELD(uint64_t mask, uint64_t word)
|
||||
{
|
||||
return (word & mask) >> ctz64(mask);
|
||||
}
|
||||
|
||||
static inline uint64_t SETFIELD(uint64_t mask, uint64_t word,
|
||||
uint64_t value)
|
||||
{
|
||||
return (word & ~mask) | ((value << ctz64(mask)) & mask);
|
||||
}
|
||||
|
||||
/*
|
||||
* PBCQ XSCOM registers
|
||||
*/
|
||||
|
|
|
@ -47,6 +47,18 @@
|
|||
PPC_BIT32(bs))
|
||||
#define PPC_BITMASK8(bs, be) ((PPC_BIT8(bs) - PPC_BIT8(be)) | PPC_BIT8(bs))
|
||||
|
||||
/*
|
||||
* QEMU version of the GETFIELD/SETFIELD macros from skiboot
|
||||
*
|
||||
* It might be better to use the existing extract64() and
|
||||
* deposit64() but this means that all the register definitions will
|
||||
* change and become incompatible with the ones found in skiboot.
|
||||
*/
|
||||
#define MASK_TO_LSH(m) (__builtin_ffsll(m) - 1)
|
||||
#define GETFIELD(m, v) (((v) & (m)) >> MASK_TO_LSH(m))
|
||||
#define SETFIELD(m, v, val) \
|
||||
(((v) & ~(m)) | ((((typeof(v))(val)) << MASK_TO_LSH(m)) & (m)))
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Exception vectors definitions */
|
||||
enum {
|
||||
|
|
Loading…
Reference in New Issue