1*70be1d93SEric Auger /* 2*70be1d93SEric Auger * libqos Generic PCI bindings and generic pci host bridge 3*70be1d93SEric Auger * 4*70be1d93SEric Auger * Copyright Red Hat Inc., 2022 5*70be1d93SEric Auger * 6*70be1d93SEric Auger * Authors: 7*70be1d93SEric Auger * Eric Auger <eric.auger@redhat.com> 8*70be1d93SEric Auger * 9*70be1d93SEric Auger * This work is licensed under the terms of the GNU GPL, version 2 or later. 10*70be1d93SEric Auger * See the COPYING file in the top-level directory. 11*70be1d93SEric Auger */ 12*70be1d93SEric Auger 13*70be1d93SEric Auger #ifndef LIBQOS_GENERIC_PCIHOST_H 14*70be1d93SEric Auger #define LIBQOS_GENERIC_PCIHOST_H 15*70be1d93SEric Auger 16*70be1d93SEric Auger #include "pci.h" 17*70be1d93SEric Auger #include "malloc.h" 18*70be1d93SEric Auger #include "qgraph.h" 19*70be1d93SEric Auger 20*70be1d93SEric Auger typedef struct QGenericPCIBus { 21*70be1d93SEric Auger QOSGraphObject obj; 22*70be1d93SEric Auger QPCIBus bus; 23*70be1d93SEric Auger uint64_t gpex_pio_base; 24*70be1d93SEric Auger uint64_t ecam_alloc_ptr; 25*70be1d93SEric Auger } QGenericPCIBus; 26*70be1d93SEric Auger 27*70be1d93SEric Auger /* 28*70be1d93SEric Auger * qpci_init_generic(): 29*70be1d93SEric Auger * @ret: A valid QGenericPCIBus * pointer 30*70be1d93SEric Auger * @qts: The %QTestState 31*70be1d93SEric Auger * @alloc: A previously initialized @alloc providing memory for @qts 32*70be1d93SEric Auger * @bool: devices can be hotplugged on this bus 33*70be1d93SEric Auger * 34*70be1d93SEric Auger * This function initializes an already allocated 35*70be1d93SEric Auger * QGenericPCIBus object. 36*70be1d93SEric Auger */ 37*70be1d93SEric Auger void qpci_init_generic(QGenericPCIBus *ret, QTestState *qts, 38*70be1d93SEric Auger QGuestAllocator *alloc, bool hotpluggable); 39*70be1d93SEric Auger 40*70be1d93SEric Auger /* QGenericPCIHost */ 41*70be1d93SEric Auger 42*70be1d93SEric Auger typedef struct QGenericPCIHost QGenericPCIHost; 43*70be1d93SEric Auger 44*70be1d93SEric Auger struct QGenericPCIHost { 45*70be1d93SEric Auger QOSGraphObject obj; 46*70be1d93SEric Auger QGenericPCIBus pci; 47*70be1d93SEric Auger }; 48*70be1d93SEric Auger 49*70be1d93SEric Auger QOSGraphObject *generic_pcihost_get_device(void *obj, const char *device); 50*70be1d93SEric Auger void qos_create_generic_pcihost(QGenericPCIHost *host, 51*70be1d93SEric Auger QTestState *qts, 52*70be1d93SEric Auger QGuestAllocator *alloc); 53*70be1d93SEric Auger 54*70be1d93SEric Auger #endif 55