14d8fde11SAlexander Graf /* 24d8fde11SAlexander Graf * QEMU Generic PCI Express Bridge Emulation 34d8fde11SAlexander Graf * 44d8fde11SAlexander Graf * Copyright (C) 2015 Alexander Graf <agraf@suse.de> 54d8fde11SAlexander Graf * 64d8fde11SAlexander Graf * This program is free software; you can redistribute it and/or modify 74d8fde11SAlexander Graf * it under the terms of the GNU General Public License as published by 84d8fde11SAlexander Graf * the Free Software Foundation; either version 2 of the License, or 94d8fde11SAlexander Graf * (at your option) any later version. 104d8fde11SAlexander Graf * 114d8fde11SAlexander Graf * This program is distributed in the hope that it will be useful, 124d8fde11SAlexander Graf * but WITHOUT ANY WARRANTY; without even the implied warranty of 134d8fde11SAlexander Graf * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 144d8fde11SAlexander Graf * GNU General Public License for more details. 154d8fde11SAlexander Graf * 16e361a772SThomas Huth * You should have received a copy of the GNU General Public License 17e361a772SThomas Huth * along with this program; if not, see <http://www.gnu.org/licenses/> 184d8fde11SAlexander Graf */ 194d8fde11SAlexander Graf 204d8fde11SAlexander Graf #ifndef HW_GPEX_H 214d8fde11SAlexander Graf #define HW_GPEX_H 224d8fde11SAlexander Graf 235b85eabeSGerd Hoffmann #include "exec/hwaddr.h" 244d8fde11SAlexander Graf #include "hw/sysbus.h" 25edf5ca5dSMarkus Armbruster #include "hw/pci/pci_device.h" 264d8fde11SAlexander Graf #include "hw/pci/pcie_host.h" 27db1015e9SEduardo Habkost #include "qom/object.h" 284d8fde11SAlexander Graf 294d8fde11SAlexander Graf #define TYPE_GPEX_HOST "gpex-pcihost" 308063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(GPEXHost, GPEX_HOST) 314d8fde11SAlexander Graf 324d8fde11SAlexander Graf #define TYPE_GPEX_ROOT_DEVICE "gpex-root" 338063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(GPEXRootState, GPEX_ROOT_DEVICE) 344d8fde11SAlexander Graf 35db1015e9SEduardo Habkost struct GPEXRootState { 364d8fde11SAlexander Graf /*< private >*/ 374d8fde11SAlexander Graf PCIDevice parent_obj; 384d8fde11SAlexander Graf /*< public >*/ 39db1015e9SEduardo Habkost }; 404d8fde11SAlexander Graf 418f6a4874SSunil V L struct GPEXConfig { 428f6a4874SSunil V L MemMapEntry ecam; 438f6a4874SSunil V L MemMapEntry mmio32; 448f6a4874SSunil V L MemMapEntry mmio64; 458f6a4874SSunil V L MemMapEntry pio; 468f6a4874SSunil V L int irq; 478f6a4874SSunil V L PCIBus *bus; 488f6a4874SSunil V L }; 498f6a4874SSunil V L 50*ff871d04SAlexander Graf typedef struct GPEXIrq GPEXIrq; 51db1015e9SEduardo Habkost struct GPEXHost { 524d8fde11SAlexander Graf /*< private >*/ 534d8fde11SAlexander Graf PCIExpressHost parent_obj; 544d8fde11SAlexander Graf /*< public >*/ 554d8fde11SAlexander Graf 564d8fde11SAlexander Graf GPEXRootState gpex_root; 574d8fde11SAlexander Graf 584d8fde11SAlexander Graf MemoryRegion io_ioport; 594d8fde11SAlexander Graf MemoryRegion io_mmio; 60a6091108SPeter Maydell MemoryRegion io_ioport_window; 61a6091108SPeter Maydell MemoryRegion io_mmio_window; 62*ff871d04SAlexander Graf GPEXIrq *irq; 63*ff871d04SAlexander Graf uint8_t num_irqs; 64a6091108SPeter Maydell 65a6091108SPeter Maydell bool allow_unmapped_accesses; 664d8fde11SAlexander Graf 678f6a4874SSunil V L struct GPEXConfig gpex_cfg; 685b85eabeSGerd Hoffmann }; 695b85eabeSGerd Hoffmann 7070bfdce6SPranavkumar Sawargaonkar int gpex_set_irq_num(GPEXHost *s, int index, int gsi); 7170bfdce6SPranavkumar Sawargaonkar 725b85eabeSGerd Hoffmann void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg); 738f6a4874SSunil V L void acpi_dsdt_add_gpex_host(Aml *scope, uint32_t irq); 748f6a4874SSunil V L 758f6a4874SSunil V L #define PCI_HOST_PIO_BASE "x-pio-base" 768f6a4874SSunil V L #define PCI_HOST_PIO_SIZE "x-pio-size" 778f6a4874SSunil V L #define PCI_HOST_ECAM_BASE "x-ecam-base" 788f6a4874SSunil V L #define PCI_HOST_ECAM_SIZE "x-ecam-size" 798f6a4874SSunil V L #define PCI_HOST_BELOW_4G_MMIO_BASE "x-below-4g-mmio-base" 808f6a4874SSunil V L #define PCI_HOST_BELOW_4G_MMIO_SIZE "x-below-4g-mmio-size" 818f6a4874SSunil V L #define PCI_HOST_ABOVE_4G_MMIO_BASE "x-above-4g-mmio-base" 828f6a4874SSunil V L #define PCI_HOST_ABOVE_4G_MMIO_SIZE "x-above-4g-mmio-size" 835b85eabeSGerd Hoffmann 844d8fde11SAlexander Graf #endif /* HW_GPEX_H */ 85