xref: /qemu/include/hw/pci-host/gpex.h (revision a6091108aa44e9017af4ca13c43f55a629e3744c)
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"
254d8fde11SAlexander Graf #include "hw/pci/pci.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 
43db1015e9SEduardo Habkost struct GPEXHost {
444d8fde11SAlexander Graf     /*< private >*/
454d8fde11SAlexander Graf     PCIExpressHost parent_obj;
464d8fde11SAlexander Graf     /*< public >*/
474d8fde11SAlexander Graf 
484d8fde11SAlexander Graf     GPEXRootState gpex_root;
494d8fde11SAlexander Graf 
504d8fde11SAlexander Graf     MemoryRegion io_ioport;
514d8fde11SAlexander Graf     MemoryRegion io_mmio;
52*a6091108SPeter Maydell     MemoryRegion io_ioport_window;
53*a6091108SPeter Maydell     MemoryRegion io_mmio_window;
544d8fde11SAlexander Graf     qemu_irq irq[GPEX_NUM_IRQS];
5570bfdce6SPranavkumar Sawargaonkar     int irq_num[GPEX_NUM_IRQS];
56*a6091108SPeter Maydell 
57*a6091108SPeter Maydell     bool allow_unmapped_accesses;
58db1015e9SEduardo Habkost };
594d8fde11SAlexander Graf 
605b85eabeSGerd Hoffmann struct GPEXConfig {
615b85eabeSGerd Hoffmann     MemMapEntry ecam;
625b85eabeSGerd Hoffmann     MemMapEntry mmio32;
635b85eabeSGerd Hoffmann     MemMapEntry mmio64;
645b85eabeSGerd Hoffmann     MemMapEntry pio;
655b85eabeSGerd Hoffmann     int         irq;
666f9765fbSYubo Miao     PCIBus      *bus;
675b85eabeSGerd Hoffmann };
685b85eabeSGerd Hoffmann 
6970bfdce6SPranavkumar Sawargaonkar int gpex_set_irq_num(GPEXHost *s, int index, int gsi);
7070bfdce6SPranavkumar Sawargaonkar 
715b85eabeSGerd Hoffmann void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig *cfg);
725b85eabeSGerd Hoffmann 
734d8fde11SAlexander Graf #endif /* HW_GPEX_H */
74