xref: /qemu/include/hw/pci-host/astro.h (revision 04d3d0e9f54d4c42759f3810aa135ce314d98dc4)
1e029bb00SHelge Deller /*
2e029bb00SHelge Deller  * HP-PARISC Astro Bus connector with Elroy PCI host bridges
3e029bb00SHelge Deller  */
4e029bb00SHelge Deller 
5e029bb00SHelge Deller #ifndef ASTRO_H
6e029bb00SHelge Deller #define ASTRO_H
7e029bb00SHelge Deller 
8e029bb00SHelge Deller #include "hw/pci/pci_host.h"
9e029bb00SHelge Deller 
10e029bb00SHelge Deller #define ASTRO_HPA               0xfed00000
11e029bb00SHelge Deller 
12e029bb00SHelge Deller #define ROPES_PER_IOC           8       /* per Ike half or Pluto/Astro */
13e029bb00SHelge Deller 
14e029bb00SHelge Deller #define TYPE_ASTRO_CHIP "astro-chip"
15e029bb00SHelge Deller OBJECT_DECLARE_SIMPLE_TYPE(AstroState, ASTRO_CHIP)
16e029bb00SHelge Deller 
17e029bb00SHelge Deller #define TYPE_ELROY_PCI_HOST_BRIDGE "elroy-pcihost"
18e029bb00SHelge Deller OBJECT_DECLARE_SIMPLE_TYPE(ElroyState, ELROY_PCI_HOST_BRIDGE)
19e029bb00SHelge Deller 
20e029bb00SHelge Deller #define ELROY_NUM               4 /* # of Elroys */
21e029bb00SHelge Deller #define ELROY_IRQS              8 /* IOSAPIC IRQs */
22e029bb00SHelge Deller 
23e029bb00SHelge Deller /* ASTRO Memory and I/O regions */
24e029bb00SHelge Deller #define LMMIO_DIST_BASE_ADDR      0xf4000000ULL
25e029bb00SHelge Deller #define LMMIO_DIST_BASE_SIZE       0x4000000ULL
26e029bb00SHelge Deller 
27*5bef8010SHelge Deller #define LMMIO_DIRECT_RANGES     4
28*5bef8010SHelge Deller 
29e029bb00SHelge Deller #define IOS_DIST_BASE_ADDR      0xfffee00000ULL
30e029bb00SHelge Deller #define IOS_DIST_BASE_SIZE           0x10000ULL
31e029bb00SHelge Deller 
32f410b688SHelge Deller #define HF_ENABLE       0x40    /* enable HF mode (default is -1 mode) */
33f410b688SHelge Deller 
34e029bb00SHelge Deller struct AstroState;
35e029bb00SHelge Deller 
36e029bb00SHelge Deller struct ElroyState {
37e029bb00SHelge Deller     PCIHostState parent_obj;
38e029bb00SHelge Deller 
39e029bb00SHelge Deller     /* parent Astro device */
40e029bb00SHelge Deller     struct AstroState *astro;
41e029bb00SHelge Deller 
42e029bb00SHelge Deller     /* HPA of this Elroy */
43e029bb00SHelge Deller     hwaddr hpa;
44e029bb00SHelge Deller 
45e029bb00SHelge Deller     /* PCI bus number (Elroy number) */
46e029bb00SHelge Deller     unsigned int pci_bus_num;
47e029bb00SHelge Deller 
48e029bb00SHelge Deller     uint64_t config_address;
49e029bb00SHelge Deller     uint64_t config_reg_elroy;
50e029bb00SHelge Deller 
51e029bb00SHelge Deller     uint64_t status_control;
52e029bb00SHelge Deller     uint64_t arb_mask;
53e029bb00SHelge Deller     uint64_t mmio_base[(0x0250 - 0x200) / 8];
54e029bb00SHelge Deller     uint64_t error_config;
55e029bb00SHelge Deller 
56e029bb00SHelge Deller     uint32_t iosapic_reg_select;
57e029bb00SHelge Deller     uint64_t iosapic_reg[0x20];
58e029bb00SHelge Deller 
59e029bb00SHelge Deller     uint32_t ilr;
60e029bb00SHelge Deller 
61e029bb00SHelge Deller     MemoryRegion this_mem;
62e029bb00SHelge Deller 
63e029bb00SHelge Deller     MemoryRegion pci_mmio;
64e029bb00SHelge Deller     MemoryRegion pci_mmio_alias;
65e029bb00SHelge Deller     MemoryRegion pci_hole;
66e029bb00SHelge Deller     MemoryRegion pci_io;
67e029bb00SHelge Deller };
68e029bb00SHelge Deller 
69e029bb00SHelge Deller struct AstroState {
70e029bb00SHelge Deller     PCIHostState parent_obj;
71e029bb00SHelge Deller 
72e029bb00SHelge Deller     uint64_t ioc_ctrl;
73e029bb00SHelge Deller     uint64_t ioc_status_ctrl;
74e029bb00SHelge Deller     uint64_t ioc_ranges[(0x03d8 - 0x300) / 8];
75e029bb00SHelge Deller     uint64_t ioc_rope_config;
76e029bb00SHelge Deller     uint64_t ioc_status_control;
77e029bb00SHelge Deller     uint64_t ioc_flush_control;
78e029bb00SHelge Deller     uint64_t ioc_rope_control[8];
79e029bb00SHelge Deller     uint64_t tlb_ibase;
80e029bb00SHelge Deller     uint64_t tlb_imask;
81e029bb00SHelge Deller     uint64_t tlb_pcom;
82e029bb00SHelge Deller     uint64_t tlb_tcnfg;
83e029bb00SHelge Deller     uint64_t tlb_pdir_base;
84e029bb00SHelge Deller 
85e029bb00SHelge Deller     struct ElroyState *elroy[ELROY_NUM];
86e029bb00SHelge Deller 
87e029bb00SHelge Deller     MemoryRegion this_mem;
88*5bef8010SHelge Deller     MemoryRegion lmmio_direct[LMMIO_DIRECT_RANGES];
89e029bb00SHelge Deller 
90e029bb00SHelge Deller     IOMMUMemoryRegion iommu;
91e029bb00SHelge Deller     AddressSpace iommu_as;
92e029bb00SHelge Deller };
93e029bb00SHelge Deller 
94e029bb00SHelge Deller #endif
95