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