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 354d8fde11SAlexander Graf #define GPEX_NUM_IRQS 4 364d8fde11SAlexander Graf 37db1015e9SEduardo Habkost struct GPEXRootState { 384d8fde11SAlexander Graf /*< private >*/ 394d8fde11SAlexander Graf PCIDevice parent_obj; 404d8fde11SAlexander Graf /*< public >*/ 41db1015e9SEduardo Habkost }; 424d8fde11SAlexander Graf 43*8f6a4874SSunil V L struct GPEXConfig { 44*8f6a4874SSunil V L MemMapEntry ecam; 45*8f6a4874SSunil V L MemMapEntry mmio32; 46*8f6a4874SSunil V L MemMapEntry mmio64; 47*8f6a4874SSunil V L MemMapEntry pio; 48*8f6a4874SSunil V L int irq; 49*8f6a4874SSunil V L PCIBus *bus; 50*8f6a4874SSunil V L }; 51*8f6a4874SSunil V L 52db1015e9SEduardo Habkost struct GPEXHost { 534d8fde11SAlexander Graf /*< private >*/ 544d8fde11SAlexander Graf PCIExpressHost parent_obj; 554d8fde11SAlexander Graf /*< public >*/ 564d8fde11SAlexander Graf 574d8fde11SAlexander Graf GPEXRootState gpex_root; 584d8fde11SAlexander Graf 594d8fde11SAlexander Graf MemoryRegion io_ioport; 604d8fde11SAlexander Graf MemoryRegion io_mmio; 61a6091108SPeter Maydell MemoryRegion io_ioport_window; 62a6091108SPeter Maydell MemoryRegion io_mmio_window; 634d8fde11SAlexander Graf qemu_irq irq[GPEX_NUM_IRQS]; 6470bfdce6SPranavkumar Sawargaonkar int irq_num[GPEX_NUM_IRQS]; 65a6091108SPeter Maydell 66a6091108SPeter Maydell bool allow_unmapped_accesses; 674d8fde11SAlexander Graf 68*8f6a4874SSunil V L struct GPEXConfig gpex_cfg; 695b85eabeSGerd Hoffmann }; 705b85eabeSGerd Hoffmann 7170bfdce6SPranavkumar Sawargaonkar int gpex_set_irq_num(GPEXHost *s, int index, int gsi); 7270bfdce6SPranavkumar Sawargaonkar 735b85eabeSGerd Hoffmann void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg); 74*8f6a4874SSunil V L void acpi_dsdt_add_gpex_host(Aml *scope, uint32_t irq); 75*8f6a4874SSunil V L 76*8f6a4874SSunil V L #define PCI_HOST_PIO_BASE "x-pio-base" 77*8f6a4874SSunil V L #define PCI_HOST_PIO_SIZE "x-pio-size" 78*8f6a4874SSunil V L #define PCI_HOST_ECAM_BASE "x-ecam-base" 79*8f6a4874SSunil V L #define PCI_HOST_ECAM_SIZE "x-ecam-size" 80*8f6a4874SSunil V L #define PCI_HOST_BELOW_4G_MMIO_BASE "x-below-4g-mmio-base" 81*8f6a4874SSunil V L #define PCI_HOST_BELOW_4G_MMIO_SIZE "x-below-4g-mmio-size" 82*8f6a4874SSunil V L #define PCI_HOST_ABOVE_4G_MMIO_BASE "x-above-4g-mmio-base" 83*8f6a4874SSunil V L #define PCI_HOST_ABOVE_4G_MMIO_SIZE "x-above-4g-mmio-size" 845b85eabeSGerd Hoffmann 854d8fde11SAlexander Graf #endif /* HW_GPEX_H */ 86