03f048090e
Convert PPCE500Params to PCCE500MachineClass which it essentially is, and introduce PCCE500MachineState to keep track of E500 specific state instead of adding global variables or extra parameters to functions when we need to keep data beyond machine init (i.e. make it look like typical fully defined machine). It's pretty shallow conversion instead of currently used trivial DEFINE_MACHINE() macro. It adds extra 60LOC of boilerplate code of full machine definition. The patch on top[1] will use PCCE500MachineState to keep track of platform_bus device and add E500Plate specific machine class to use HOTPLUG_HANDLER for explicitly initializing dynamic sysbus devices at the time they are added instead of delaying it to machine done time by platform_bus_init_notify() which is being removed. 1) <1523551221-11612-3-git-send-email-imammedo@redhat.com> Signed-off-by: Igor Mammedov <imammedo@redhat.com> Suggested-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
#ifndef PPCE500_H
|
|
#define PPCE500_H
|
|
|
|
#include "hw/boards.h"
|
|
|
|
typedef struct PPCE500MachineState {
|
|
/*< private >*/
|
|
MachineState parent_obj;
|
|
|
|
} PPCE500MachineState;
|
|
|
|
typedef struct PPCE500MachineClass {
|
|
/*< private >*/
|
|
MachineClass parent_class;
|
|
|
|
/* required -- must at least add toplevel board compatible */
|
|
void (*fixup_devtree)(void *fdt);
|
|
|
|
int pci_first_slot;
|
|
int pci_nr_slots;
|
|
|
|
int mpic_version;
|
|
bool has_mpc8xxx_gpio;
|
|
bool has_platform_bus;
|
|
hwaddr platform_bus_base;
|
|
hwaddr platform_bus_size;
|
|
int platform_bus_first_irq;
|
|
int platform_bus_num_irqs;
|
|
hwaddr ccsrbar_base;
|
|
hwaddr pci_pio_base;
|
|
hwaddr pci_mmio_base;
|
|
hwaddr pci_mmio_bus_base;
|
|
hwaddr spin_base;
|
|
} PPCE500MachineClass;
|
|
|
|
void ppce500_init(MachineState *machine);
|
|
|
|
hwaddr booke206_page_size_to_tlb(uint64_t size);
|
|
|
|
#define TYPE_PPCE500_MACHINE "ppce500-base-machine"
|
|
#define PPCE500_MACHINE(obj) \
|
|
OBJECT_CHECK(PPCE500MachineState, (obj), TYPE_PPCE500_MACHINE)
|
|
#define PPCE500_MACHINE_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(PPCE500MachineClass, obj, TYPE_PPCE500_MACHINE)
|
|
#define PPCE500_MACHINE_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(PPCE500MachineClass, klass, TYPE_PPCE500_MACHINE)
|
|
|
|
#endif
|