xref: /qemu/tests/qtest/libqos/tpci200.c (revision 907b5105f1b9e1af1abbdbb4f2039c7ab105c001)
10793a889SEmanuele Giuseppe Esposito /*
20793a889SEmanuele Giuseppe Esposito  * QTest testcase for tpci200 PCI-IndustryPack bridge
30793a889SEmanuele Giuseppe Esposito  *
40793a889SEmanuele Giuseppe Esposito  * Copyright (c) 2014 SUSE LINUX Products GmbH
50793a889SEmanuele Giuseppe Esposito  *
60793a889SEmanuele Giuseppe Esposito  * This work is licensed under the terms of the GNU GPL, version 2 or later.
70793a889SEmanuele Giuseppe Esposito  * See the COPYING file in the top-level directory.
80793a889SEmanuele Giuseppe Esposito  */
90793a889SEmanuele Giuseppe Esposito 
100793a889SEmanuele Giuseppe Esposito #include "qemu/osdep.h"
11*907b5105SMarc-André Lureau #include "../libqtest.h"
120b8fa32fSMarkus Armbruster #include "qemu/module.h"
13a2ce7dbdSPaolo Bonzini #include "qgraph.h"
14a2ce7dbdSPaolo Bonzini #include "pci.h"
150793a889SEmanuele Giuseppe Esposito 
160793a889SEmanuele Giuseppe Esposito typedef struct QTpci200 QTpci200;
170793a889SEmanuele Giuseppe Esposito typedef struct QIpack QIpack;
180793a889SEmanuele Giuseppe Esposito 
190793a889SEmanuele Giuseppe Esposito struct QIpack {
200793a889SEmanuele Giuseppe Esposito 
210793a889SEmanuele Giuseppe Esposito };
220793a889SEmanuele Giuseppe Esposito struct QTpci200 {
230793a889SEmanuele Giuseppe Esposito     QOSGraphObject obj;
240793a889SEmanuele Giuseppe Esposito     QPCIDevice dev;
250793a889SEmanuele Giuseppe Esposito     QIpack ipack;
260793a889SEmanuele Giuseppe Esposito };
270793a889SEmanuele Giuseppe Esposito 
280793a889SEmanuele Giuseppe Esposito /* tpci200 */
tpci200_get_driver(void * obj,const char * interface)290793a889SEmanuele Giuseppe Esposito static void *tpci200_get_driver(void *obj, const char *interface)
300793a889SEmanuele Giuseppe Esposito {
310793a889SEmanuele Giuseppe Esposito     QTpci200 *tpci200 = obj;
320793a889SEmanuele Giuseppe Esposito     if (!g_strcmp0(interface, "ipack")) {
330793a889SEmanuele Giuseppe Esposito         return &tpci200->ipack;
340793a889SEmanuele Giuseppe Esposito     }
350793a889SEmanuele Giuseppe Esposito     if (!g_strcmp0(interface, "pci-device")) {
360793a889SEmanuele Giuseppe Esposito         return &tpci200->dev;
370793a889SEmanuele Giuseppe Esposito     }
380793a889SEmanuele Giuseppe Esposito 
390793a889SEmanuele Giuseppe Esposito     fprintf(stderr, "%s not present in tpci200\n", interface);
400793a889SEmanuele Giuseppe Esposito     g_assert_not_reached();
410793a889SEmanuele Giuseppe Esposito }
420793a889SEmanuele Giuseppe Esposito 
tpci200_create(void * pci_bus,QGuestAllocator * alloc,void * addr)430793a889SEmanuele Giuseppe Esposito static void *tpci200_create(void *pci_bus, QGuestAllocator *alloc, void *addr)
440793a889SEmanuele Giuseppe Esposito {
450793a889SEmanuele Giuseppe Esposito     QTpci200 *tpci200 = g_new0(QTpci200, 1);
460793a889SEmanuele Giuseppe Esposito     QPCIBus *bus = pci_bus;
470793a889SEmanuele Giuseppe Esposito 
480793a889SEmanuele Giuseppe Esposito     qpci_device_init(&tpci200->dev, bus, addr);
490793a889SEmanuele Giuseppe Esposito     tpci200->obj.get_driver = tpci200_get_driver;
500793a889SEmanuele Giuseppe Esposito     return &tpci200->obj;
510793a889SEmanuele Giuseppe Esposito }
520793a889SEmanuele Giuseppe Esposito 
tpci200_register_nodes(void)530793a889SEmanuele Giuseppe Esposito static void tpci200_register_nodes(void)
540793a889SEmanuele Giuseppe Esposito {
550793a889SEmanuele Giuseppe Esposito     QOSGraphEdgeOptions opts = {
560793a889SEmanuele Giuseppe Esposito         .extra_device_opts = "addr=04.0,id=ipack0",
570793a889SEmanuele Giuseppe Esposito     };
580793a889SEmanuele Giuseppe Esposito     add_qpci_address(&opts, &(QPCIAddress) { .devfn = QPCI_DEVFN(4, 0) });
590793a889SEmanuele Giuseppe Esposito 
600793a889SEmanuele Giuseppe Esposito     qos_node_create_driver("tpci200", tpci200_create);
610793a889SEmanuele Giuseppe Esposito     qos_node_consumes("tpci200", "pci-bus", &opts);
620793a889SEmanuele Giuseppe Esposito     qos_node_produces("tpci200", "ipack");
630793a889SEmanuele Giuseppe Esposito     qos_node_produces("tpci200", "pci-device");
640793a889SEmanuele Giuseppe Esposito }
650793a889SEmanuele Giuseppe Esposito 
660793a889SEmanuele Giuseppe Esposito libqos_init(tpci200_register_nodes);
67