mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
spapr_pci: Eliminate class callbacks
The EEH operations in the spapr-vfio-pci-host-bridge no longer rely on the special groupid field in sPAPRPHBVFIOState. So we can simplify, removing the class specific callbacks with direct calls based on a simple spapr_phb_eeh_enabled() helper. For now we implement that in terms of a boolean in the class, but we'll continue to clean that up later. On its own this is a rather strange way of doing things, but it's a useful intermediate step to further cleanups. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
This commit is contained in:
parent
76a9e9f680
commit
fbb4e98341
3 changed files with 62 additions and 37 deletions
|
@ -49,10 +49,7 @@ struct sPAPRPHBClass {
|
|||
PCIHostBridgeClass parent_class;
|
||||
|
||||
void (*finish_realize)(sPAPRPHBState *sphb, Error **errp);
|
||||
int (*eeh_set_option)(sPAPRPHBState *sphb, unsigned int addr, int option);
|
||||
int (*eeh_get_state)(sPAPRPHBState *sphb, int *state);
|
||||
int (*eeh_reset)(sPAPRPHBState *sphb, int option);
|
||||
int (*eeh_configure)(sPAPRPHBState *sphb);
|
||||
bool eeh_available;
|
||||
};
|
||||
|
||||
typedef struct spapr_pci_msi {
|
||||
|
@ -137,4 +134,36 @@ sPAPRPHBState *spapr_pci_find_phb(sPAPRMachineState *spapr, uint64_t buid);
|
|||
PCIDevice *spapr_pci_find_dev(sPAPRMachineState *spapr, uint64_t buid,
|
||||
uint32_t config_addr);
|
||||
|
||||
/* VFIO EEH hooks */
|
||||
#ifdef CONFIG_LINUX
|
||||
int spapr_phb_vfio_eeh_set_option(sPAPRPHBState *sphb,
|
||||
unsigned int addr, int option);
|
||||
int spapr_phb_vfio_eeh_get_state(sPAPRPHBState *sphb, int *state);
|
||||
int spapr_phb_vfio_eeh_reset(sPAPRPHBState *sphb, int option);
|
||||
int spapr_phb_vfio_eeh_configure(sPAPRPHBState *sphb);
|
||||
void spapr_phb_vfio_reset(DeviceState *qdev);
|
||||
#else
|
||||
static inline int spapr_phb_vfio_eeh_set_option(sPAPRPHBState *sphb,
|
||||
unsigned int addr, int option)
|
||||
{
|
||||
return RTAS_OUT_HW_ERROR;
|
||||
}
|
||||
static inline int spapr_phb_vfio_eeh_get_state(sPAPRPHBState *sphb,
|
||||
int *state)
|
||||
{
|
||||
return RTAS_OUT_HW_ERROR;
|
||||
}
|
||||
static inline int spapr_phb_vfio_eeh_reset(sPAPRPHBState *sphb, int option)
|
||||
{
|
||||
return RTAS_OUT_HW_ERROR;
|
||||
}
|
||||
static inline int spapr_phb_vfio_eeh_configure(sPAPRPHBState *sphb)
|
||||
{
|
||||
return RTAS_OUT_HW_ERROR;
|
||||
}
|
||||
static inline void spapr_phb_vfio_reset(DeviceState *qdev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __HW_SPAPR_PCI_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue