usb-hcd-uhci-test.c 2.2 KB
Newer Older
G
Gonglei 已提交
1 2 3
/*
 * QTest testcase for USB UHCI controller
 *
4
 * Copyright (c) 2014 HUAWEI TECHNOLOGIES CO., LTD.
G
Gonglei 已提交
5 6 7 8 9
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */

P
Peter Maydell 已提交
10
#include "qemu/osdep.h"
G
Gonglei 已提交
11
#include "libqtest.h"
12 13
#include "libqos/usb.h"
#include "hw/usb/uhci-regs.h"
G
Gonglei 已提交
14 15 16 17


static void test_uhci_init(void)
{
18
}
G
Gonglei 已提交
19

20
static void test_port(int port)
21 22 23 24
{
    QPCIBus *pcibus;
    struct qhc uhci;

25
    g_assert(port > 0);
26 27 28
    pcibus = qpci_init_pc();
    g_assert(pcibus != NULL);
    qusb_pci_init_one(pcibus, &uhci, QPCI_DEVFN(0x1d, 0), 4);
29 30 31 32 33 34
    uhci_port_test(&uhci, port - 1, UHCI_PORT_CCS);
}

static void test_port_1(void)
{
    test_port(1);
G
Gonglei 已提交
35 36
}

37 38 39 40 41 42 43 44 45
static void test_port_2(void)
{
    test_port(2);
}

static void test_uhci_hotplug(void)
{
    usb_test_hotplug("uhci", 2, test_port_2);
}
G
Gonglei 已提交
46

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
static void test_usb_storage_hotplug(void)
{
    QDict *response;

    response = qmp("{'execute': 'device_add',"
                   " 'arguments': {"
                   "   'driver': 'usb-storage',"
                   "   'drive': 'drive0',"
                   "   'id': 'usbdev0'"
                   "}}");
    g_assert(response);
    g_assert(!qdict_haskey(response, "error"));
    QDECREF(response);

    response = qmp("{'execute': 'device_del',"
                           " 'arguments': {"
                           "   'id': 'usbdev0'"
                           "}}");
    g_assert(response);
    g_assert(!qdict_haskey(response, "error"));
    QDECREF(response);

    response = qmp("");
    g_assert(response);
    g_assert(qdict_haskey(response, "event"));
    g_assert(!strcmp(qdict_get_str(response, "event"), "DEVICE_DELETED"));
    QDECREF(response);
}

G
Gonglei 已提交
76 77 78 79 80 81 82
int main(int argc, char **argv)
{
    int ret;

    g_test_init(&argc, &argv, NULL);

    qtest_add_func("/uhci/pci/init", test_uhci_init);
83
    qtest_add_func("/uhci/pci/port1", test_port_1);
84
    qtest_add_func("/uhci/pci/hotplug", test_uhci_hotplug);
85
    qtest_add_func("/uhci/pci/hotplug/usb-storage", test_usb_storage_hotplug);
G
Gonglei 已提交
86

87
    qtest_start("-device piix3-usb-uhci,id=uhci,addr=1d.0"
88
                " -drive id=drive0,if=none,file=/dev/null,format=raw"
89
                " -device usb-tablet,bus=uhci.0,port=1");
G
Gonglei 已提交
90
    ret = g_test_run();
91
    qtest_end();
G
Gonglei 已提交
92 93 94

    return ret;
}