|  | /* | 
|  | * HP-PARISC Astro Bus connector with Elroy PCI host bridges | 
|  | */ | 
|  |  | 
|  | #ifndef ASTRO_H | 
|  | #define ASTRO_H | 
|  |  | 
|  | #include "hw/pci/pci_host.h" | 
|  |  | 
|  | #define ASTRO_HPA               0xfed00000 | 
|  |  | 
|  | #define ROPES_PER_IOC           8       /* per Ike half or Pluto/Astro */ | 
|  |  | 
|  | #define TYPE_ASTRO_CHIP "astro-chip" | 
|  | OBJECT_DECLARE_SIMPLE_TYPE(AstroState, ASTRO_CHIP) | 
|  |  | 
|  | #define TYPE_ELROY_PCI_HOST_BRIDGE "elroy-pcihost" | 
|  | OBJECT_DECLARE_SIMPLE_TYPE(ElroyState, ELROY_PCI_HOST_BRIDGE) | 
|  |  | 
|  | #define ELROY_NUM               4 /* # of Elroys */ | 
|  | #define ELROY_IRQS              8 /* IOSAPIC IRQs */ | 
|  |  | 
|  | /* ASTRO Memory and I/O regions */ | 
|  | #define LMMIO_DIST_BASE_ADDR      0xf4000000ULL | 
|  | #define LMMIO_DIST_BASE_SIZE       0x4000000ULL | 
|  |  | 
|  | #define IOS_DIST_BASE_ADDR      0xfffee00000ULL | 
|  | #define IOS_DIST_BASE_SIZE           0x10000ULL | 
|  |  | 
|  | #define HF_ENABLE       0x40    /* enable HF mode (default is -1 mode) */ | 
|  |  | 
|  | struct AstroState; | 
|  |  | 
|  | struct ElroyState { | 
|  | PCIHostState parent_obj; | 
|  |  | 
|  | /* parent Astro device */ | 
|  | struct AstroState *astro; | 
|  |  | 
|  | /* HPA of this Elroy */ | 
|  | hwaddr hpa; | 
|  |  | 
|  | /* PCI bus number (Elroy number) */ | 
|  | unsigned int pci_bus_num; | 
|  |  | 
|  | uint64_t config_address; | 
|  | uint64_t config_reg_elroy; | 
|  |  | 
|  | uint64_t status_control; | 
|  | uint64_t arb_mask; | 
|  | uint64_t mmio_base[(0x0250 - 0x200) / 8]; | 
|  | uint64_t error_config; | 
|  |  | 
|  | uint32_t iosapic_reg_select; | 
|  | uint64_t iosapic_reg[0x20]; | 
|  |  | 
|  | uint32_t ilr; | 
|  |  | 
|  | MemoryRegion this_mem; | 
|  |  | 
|  | MemoryRegion pci_mmio; | 
|  | MemoryRegion pci_mmio_alias; | 
|  | MemoryRegion pci_hole; | 
|  | MemoryRegion pci_io; | 
|  | }; | 
|  |  | 
|  | struct AstroState { | 
|  | PCIHostState parent_obj; | 
|  |  | 
|  | uint64_t ioc_ctrl; | 
|  | uint64_t ioc_status_ctrl; | 
|  | uint64_t ioc_ranges[(0x03d8 - 0x300) / 8]; | 
|  | uint64_t ioc_rope_config; | 
|  | uint64_t ioc_status_control; | 
|  | uint64_t ioc_flush_control; | 
|  | uint64_t ioc_rope_control[8]; | 
|  | uint64_t tlb_ibase; | 
|  | uint64_t tlb_imask; | 
|  | uint64_t tlb_pcom; | 
|  | uint64_t tlb_tcnfg; | 
|  | uint64_t tlb_pdir_base; | 
|  |  | 
|  | struct ElroyState *elroy[ELROY_NUM]; | 
|  |  | 
|  | MemoryRegion this_mem; | 
|  |  | 
|  | MemoryRegion pci_mmio; | 
|  | MemoryRegion pci_io; | 
|  |  | 
|  | IOMMUMemoryRegion iommu; | 
|  | AddressSpace iommu_as; | 
|  | }; | 
|  |  | 
|  | #endif |