xref: /qemu/include/hw/pci-host/gpex.h (revision 8b70d7f2071e2db51b1910502bfb7f84ebf926be)
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