tests: usb: Move uhci port test code to libqos/usb.c
Move code necessary for testing uhci port into library so it could be used by other USB tests. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
aaf3607051
commit
b0354ec596
|
@ -301,6 +301,7 @@ libqos-pc-obj-y = $(libqos-obj-y) tests/libqos/pci-pc.o
|
|||
libqos-pc-obj-y += tests/libqos/malloc-pc.o
|
||||
libqos-omap-obj-y = $(libqos-obj-y) tests/libqos/i2c-omap.o
|
||||
libqos-virtio-obj-y = $(libqos-obj-y) $(libqos-pc-obj-y) tests/libqos/virtio.o tests/libqos/virtio-pci.o
|
||||
libqos-usb-obj-y = $(libqos-pc-obj-y) tests/libqos/usb.o
|
||||
|
||||
tests/rtc-test$(EXESUF): tests/rtc-test.o
|
||||
tests/m48t59-test$(EXESUF): tests/m48t59-test.o
|
||||
|
@ -345,7 +346,7 @@ tests/intel-hda-test$(EXESUF): tests/intel-hda-test.o
|
|||
tests/ioh3420-test$(EXESUF): tests/ioh3420-test.o
|
||||
tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-test.o
|
||||
tests/usb-hcd-uhci-test$(EXESUF): tests/usb-hcd-uhci-test.o
|
||||
tests/usb-hcd-ehci-test$(EXESUF): tests/usb-hcd-ehci-test.o $(libqos-pc-obj-y)
|
||||
tests/usb-hcd-ehci-test$(EXESUF): tests/usb-hcd-ehci-test.o $(libqos-usb-obj-y)
|
||||
tests/usb-hcd-xhci-test$(EXESUF): tests/usb-hcd-xhci-test.o
|
||||
tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o qemu-char.o qemu-timer.o $(qtest-obj-y)
|
||||
tests/qemu-iotests/socket_scm_helper$(EXESUF): tests/qemu-iotests/socket_scm_helper.o
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* common code shared by usb tests
|
||||
*
|
||||
* Copyright (c) 2014 Red Hat, Inc
|
||||
*
|
||||
* Authors:
|
||||
* Gerd Hoffmann <kraxel@redhat.com>
|
||||
* John Snow <jsnow@redhat.com>
|
||||
* Igor Mammedov <imammedo@redhat.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
#include "libqtest.h"
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/usb/uhci-regs.h"
|
||||
#include "libqos/usb.h"
|
||||
|
||||
void qusb_pci_init_one(QPCIBus *pcibus, struct qhc *hc, uint32_t devfn, int bar)
|
||||
{
|
||||
hc->dev = qpci_device_find(pcibus, devfn);
|
||||
g_assert(hc->dev != NULL);
|
||||
qpci_device_enable(hc->dev);
|
||||
hc->base = qpci_iomap(hc->dev, bar, NULL);
|
||||
g_assert(hc->base != NULL);
|
||||
}
|
||||
|
||||
void uhci_port_test(struct qhc *hc, int port, uint16_t expect)
|
||||
{
|
||||
void *addr = hc->base + 0x10 + 2 * port;
|
||||
uint16_t value = qpci_io_readw(hc->dev, addr);
|
||||
uint16_t mask = ~(UHCI_PORT_WRITE_CLEAR | UHCI_PORT_RSVD1);
|
||||
|
||||
g_assert((value & mask) == (expect & mask));
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef LIBQOS_USB_H
|
||||
#define LIBQOS_USB_H
|
||||
|
||||
#include "libqos/pci-pc.h"
|
||||
|
||||
struct qhc {
|
||||
QPCIDevice *dev;
|
||||
void *base;
|
||||
};
|
||||
|
||||
void qusb_pci_init_one(QPCIBus *pcibus, struct qhc *hc,
|
||||
uint32_t devfn, int bar);
|
||||
void uhci_port_test(struct qhc *hc, int port, uint16_t expect);
|
||||
#endif
|
|
@ -15,11 +15,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "hw/usb/uhci-regs.h"
|
||||
#include "hw/usb/ehci-regs.h"
|
||||
|
||||
struct qhc {
|
||||
QPCIDevice *dev;
|
||||
void *base;
|
||||
};
|
||||
#include "libqos/usb.h"
|
||||
|
||||
static QPCIBus *pcibus;
|
||||
static struct qhc uhci1;
|
||||
|
@ -29,15 +25,6 @@ static struct qhc ehci1;
|
|||
|
||||
/* helpers */
|
||||
|
||||
static void pci_init_one(struct qhc *hc, uint32_t devfn, int bar)
|
||||
{
|
||||
hc->dev = qpci_device_find(pcibus, devfn);
|
||||
g_assert(hc->dev != NULL);
|
||||
qpci_device_enable(hc->dev);
|
||||
hc->base = qpci_iomap(hc->dev, bar, NULL);
|
||||
g_assert(hc->base != NULL);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void uhci_port_update(struct qhc *hc, int port,
|
||||
uint16_t set, uint16_t clear)
|
||||
|
@ -52,19 +39,6 @@ static void uhci_port_update(struct qhc *hc, int port,
|
|||
}
|
||||
#endif
|
||||
|
||||
static void uhci_port_test(struct qhc *hc, int port, uint16_t expect)
|
||||
{
|
||||
void *addr = hc->base + 0x10 + 2 * port;
|
||||
uint16_t value = qpci_io_readw(hc->dev, addr);
|
||||
uint16_t mask = ~(UHCI_PORT_WRITE_CLEAR | UHCI_PORT_RSVD1);
|
||||
|
||||
#if 0
|
||||
fprintf(stderr, "%s: %d, have 0x%04x, want 0x%04x\n",
|
||||
__func__, port, value & mask, expect & mask);
|
||||
#endif
|
||||
g_assert((value & mask) == (expect & mask));
|
||||
}
|
||||
|
||||
static void ehci_port_test(struct qhc *hc, int port, uint32_t expect)
|
||||
{
|
||||
void *addr = hc->base + 0x64 + 4 * port;
|
||||
|
@ -88,10 +62,10 @@ static void pci_init(void)
|
|||
pcibus = qpci_init_pc();
|
||||
g_assert(pcibus != NULL);
|
||||
|
||||
pci_init_one(&uhci1, QPCI_DEVFN(0x1d, 0), 4);
|
||||
pci_init_one(&uhci2, QPCI_DEVFN(0x1d, 1), 4);
|
||||
pci_init_one(&uhci3, QPCI_DEVFN(0x1d, 2), 4);
|
||||
pci_init_one(&ehci1, QPCI_DEVFN(0x1d, 7), 0);
|
||||
qusb_pci_init_one(pcibus, &uhci1, QPCI_DEVFN(0x1d, 0), 4);
|
||||
qusb_pci_init_one(pcibus, &uhci2, QPCI_DEVFN(0x1d, 1), 4);
|
||||
qusb_pci_init_one(pcibus, &uhci3, QPCI_DEVFN(0x1d, 2), 4);
|
||||
qusb_pci_init_one(pcibus, &ehci1, QPCI_DEVFN(0x1d, 7), 0);
|
||||
}
|
||||
|
||||
static void pci_uhci_port_1(void)
|
||||
|
|
Loading…
Reference in New Issue