qemu/tests/usb-hcd-ohci-test.c
<<
>>
Prefs
   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.h"
  12#include "qemu/module.h"
  13#include "libqos/usb.h"
  14#include "libqos/qgraph.h"
  15#include "libqos/pci.h"
  16
  17typedef struct QOHCI_PCI QOHCI_PCI;
  18
  19struct QOHCI_PCI {
  20    QOSGraphObject obj;
  21    QPCIDevice dev;
  22};
  23
  24static void test_ohci_hotplug(void *obj, void *data, QGuestAllocator *alloc)
  25{
  26    usb_test_hotplug("ohci", "1", NULL);
  27}
  28
  29static 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
  41static 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
  49static 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
  61libqos_init(ohci_pci_register_nodes);
  62
  63static void register_ohci_pci_test(void)
  64{
  65    qos_add_test("ohci_pci-test-hotplug", "pci-ohci", test_ohci_hotplug, NULL);
  66}
  67
  68libqos_init(register_ohci_pci_test);
  69