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