xref: /qemu/tests/qtest/libqos/generic-pcihost.h (revision 70be1d93f9c2dbf6793830d482e91bb33f921348)
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