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