xref: /qemu/include/hw/pci-host/sabre.h (revision ec150c7e09071bcf51bfaa8071fe23efb6df69f7)
158ea30f5SMarkus Armbruster #ifndef HW_PCI_HOST_SABRE_H
258ea30f5SMarkus Armbruster #define HW_PCI_HOST_SABRE_H
318e08a55SMichael S. Tsirkin 
4*ec150c7eSMarkus Armbruster #include "hw/pci/pci.h"
5*ec150c7eSMarkus Armbruster #include "hw/pci/pci_host.h"
60ea833c2SMark Cave-Ayland #include "hw/sparc/sun4u_iommu.h"
7aea5b071SMark Cave-Ayland 
82a4d6af5SMark Cave-Ayland #define MAX_IVEC 0x40
92a4d6af5SMark Cave-Ayland 
104b10c8d7SMark Cave-Ayland /* OBIO IVEC IRQs */
11a5546222SMark Cave-Ayland #define OBIO_HDD_IRQ         0x20
12a5546222SMark Cave-Ayland #define OBIO_NIC_IRQ         0x21
134b10c8d7SMark Cave-Ayland #define OBIO_LPT_IRQ         0x22
144b10c8d7SMark Cave-Ayland #define OBIO_FDD_IRQ         0x27
154b10c8d7SMark Cave-Ayland #define OBIO_KBD_IRQ         0x29
164b10c8d7SMark Cave-Ayland #define OBIO_MSE_IRQ         0x2a
174b10c8d7SMark Cave-Ayland #define OBIO_SER_IRQ         0x2b
184b10c8d7SMark Cave-Ayland 
198fb28035SMark Cave-Ayland typedef struct SabrePCIState {
208fb28035SMark Cave-Ayland     PCIDevice parent_obj;
218fb28035SMark Cave-Ayland } SabrePCIState;
228fb28035SMark Cave-Ayland 
238fb28035SMark Cave-Ayland #define TYPE_SABRE_PCI_DEVICE "sabre-pci"
248fb28035SMark Cave-Ayland #define SABRE_PCI_DEVICE(obj) \
258fb28035SMark Cave-Ayland     OBJECT_CHECK(SabrePCIState, (obj), TYPE_SABRE_PCI_DEVICE)
2628edc7c9SMark Cave-Ayland 
27b14dcaf4SMark Cave-Ayland typedef struct SabreState {
2828edc7c9SMark Cave-Ayland     PCIHostState parent_obj;
2928edc7c9SMark Cave-Ayland 
30cacd0580SMark Cave-Ayland     hwaddr special_base;
31cacd0580SMark Cave-Ayland     hwaddr mem_base;
329b301794SMark Cave-Ayland     MemoryRegion sabre_config;
3328edc7c9SMark Cave-Ayland     MemoryRegion pci_config;
3428edc7c9SMark Cave-Ayland     MemoryRegion pci_mmio;
3528edc7c9SMark Cave-Ayland     MemoryRegion pci_ioport;
3628edc7c9SMark Cave-Ayland     uint64_t pci_irq_in;
37aea5b071SMark Cave-Ayland     IOMMUState *iommu;
384272ad40SMark Cave-Ayland     PCIBridge *bridgeA;
394272ad40SMark Cave-Ayland     PCIBridge *bridgeB;
4028edc7c9SMark Cave-Ayland     uint32_t pci_control[16];
4128edc7c9SMark Cave-Ayland     uint32_t pci_irq_map[8];
4228edc7c9SMark Cave-Ayland     uint32_t pci_err_irq_map[4];
4328edc7c9SMark Cave-Ayland     uint32_t obio_irq_map[32];
442a4d6af5SMark Cave-Ayland     qemu_irq ivec_irqs[MAX_IVEC];
4528edc7c9SMark Cave-Ayland     unsigned int irq_request;
4628edc7c9SMark Cave-Ayland     uint32_t reset_control;
4728edc7c9SMark Cave-Ayland     unsigned int nr_resets;
48b14dcaf4SMark Cave-Ayland } SabreState;
4928edc7c9SMark Cave-Ayland 
50b14dcaf4SMark Cave-Ayland #define TYPE_SABRE "sabre"
51b14dcaf4SMark Cave-Ayland #define SABRE_DEVICE(obj) \
52b14dcaf4SMark Cave-Ayland     OBJECT_CHECK(SabreState, (obj), TYPE_SABRE)
538fb28035SMark Cave-Ayland 
5418e08a55SMichael S. Tsirkin #endif
55