qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

usb-hcd-ohci-test.c (1700B)


      1 /*
      2  * QTest testcase for USB OHCI controller
      3  *
      4  * Copyright (c) 2014 HUAWEI TECHNOLOGIES CO., LTD.
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7  * See the COPYING file in the top-level directory.
      8  */
      9 
     10 #include "qemu/osdep.h"
     11 #include "libqtest-single.h"
     12 #include "qemu/module.h"
     13 #include "libqos/usb.h"
     14 #include "libqos/qgraph.h"
     15 #include "libqos/pci.h"
     16 
     17 typedef struct QOHCI_PCI QOHCI_PCI;
     18 
     19 struct QOHCI_PCI {
     20     QOSGraphObject obj;
     21     QPCIDevice dev;
     22 };
     23 
     24 static void test_ohci_hotplug(void *obj, void *data, QGuestAllocator *alloc)
     25 {
     26     usb_test_hotplug(global_qtest, "ohci", "1", NULL);
     27 }
     28 
     29 static void *ohci_pci_get_driver(void *obj, const char *interface)
     30 {
     31     QOHCI_PCI *ohci_pci = obj;
     32 
     33     if (!g_strcmp0(interface, "pci-device")) {
     34         return &ohci_pci->dev;
     35     }
     36 
     37     fprintf(stderr, "%s not present in pci-ohci\n", interface);
     38     g_assert_not_reached();
     39 }
     40 
     41 static void *ohci_pci_create(void *pci_bus, QGuestAllocator *alloc, void *addr)
     42 {
     43     QOHCI_PCI *ohci_pci = g_new0(QOHCI_PCI, 1);
     44     ohci_pci->obj.get_driver = ohci_pci_get_driver;
     45 
     46     return &ohci_pci->obj;
     47 }
     48 
     49 static void ohci_pci_register_nodes(void)
     50 {
     51     QOSGraphEdgeOptions opts = {
     52         .extra_device_opts = "addr=04.0,id=ohci",
     53     };
     54     add_qpci_address(&opts, &(QPCIAddress) { .devfn = QPCI_DEVFN(4, 0) });
     55 
     56     qos_node_create_driver("pci-ohci", ohci_pci_create);
     57     qos_node_consumes("pci-ohci", "pci-bus", &opts);
     58     qos_node_produces("pci-ohci", "pci-device");
     59 }
     60 
     61 libqos_init(ohci_pci_register_nodes);
     62 
     63 static void register_ohci_pci_test(void)
     64 {
     65     qos_add_test("ohci_pci-test-hotplug", "pci-ohci", test_ohci_hotplug, NULL);
     66 }
     67 
     68 libqos_init(register_ohci_pci_test);