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-pc-obj-y += tests/libqos/malloc-pc.o
|
||||||
libqos-omap-obj-y = $(libqos-obj-y) tests/libqos/i2c-omap.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-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/rtc-test$(EXESUF): tests/rtc-test.o
|
||||||
tests/m48t59-test$(EXESUF): tests/m48t59-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/ioh3420-test$(EXESUF): tests/ioh3420-test.o
|
||||||
tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-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-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/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/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
|
tests/qemu-iotests/socket_scm_helper$(EXESUF): tests/qemu-iotests/socket_scm_helper.o
|
||||||
|
37
tests/libqos/usb.c
Normal file
37
tests/libqos/usb.c
Normal file
@ -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));
|
||||||
|
}
|
14
tests/libqos/usb.h
Normal file
14
tests/libqos/usb.h
Normal file
@ -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 "qemu/osdep.h"
|
||||||
#include "hw/usb/uhci-regs.h"
|
#include "hw/usb/uhci-regs.h"
|
||||||
#include "hw/usb/ehci-regs.h"
|
#include "hw/usb/ehci-regs.h"
|
||||||
|
#include "libqos/usb.h"
|
||||||
struct qhc {
|
|
||||||
QPCIDevice *dev;
|
|
||||||
void *base;
|
|
||||||
};
|
|
||||||
|
|
||||||
static QPCIBus *pcibus;
|
static QPCIBus *pcibus;
|
||||||
static struct qhc uhci1;
|
static struct qhc uhci1;
|
||||||
@ -29,15 +25,6 @@ static struct qhc ehci1;
|
|||||||
|
|
||||||
/* helpers */
|
/* 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
|
#if 0
|
||||||
static void uhci_port_update(struct qhc *hc, int port,
|
static void uhci_port_update(struct qhc *hc, int port,
|
||||||
uint16_t set, uint16_t clear)
|
uint16_t set, uint16_t clear)
|
||||||
@ -52,19 +39,6 @@ static void uhci_port_update(struct qhc *hc, int port,
|
|||||||
}
|
}
|
||||||
#endif
|
#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)
|
static void ehci_port_test(struct qhc *hc, int port, uint32_t expect)
|
||||||
{
|
{
|
||||||
void *addr = hc->base + 0x64 + 4 * port;
|
void *addr = hc->base + 0x64 + 4 * port;
|
||||||
@ -88,10 +62,10 @@ static void pci_init(void)
|
|||||||
pcibus = qpci_init_pc();
|
pcibus = qpci_init_pc();
|
||||||
g_assert(pcibus != NULL);
|
g_assert(pcibus != NULL);
|
||||||
|
|
||||||
pci_init_one(&uhci1, QPCI_DEVFN(0x1d, 0), 4);
|
qusb_pci_init_one(pcibus, &uhci1, QPCI_DEVFN(0x1d, 0), 4);
|
||||||
pci_init_one(&uhci2, QPCI_DEVFN(0x1d, 1), 4);
|
qusb_pci_init_one(pcibus, &uhci2, QPCI_DEVFN(0x1d, 1), 4);
|
||||||
pci_init_one(&uhci3, QPCI_DEVFN(0x1d, 2), 4);
|
qusb_pci_init_one(pcibus, &uhci3, QPCI_DEVFN(0x1d, 2), 4);
|
||||||
pci_init_one(&ehci1, QPCI_DEVFN(0x1d, 7), 0);
|
qusb_pci_init_one(pcibus, &ehci1, QPCI_DEVFN(0x1d, 7), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_uhci_port_1(void)
|
static void pci_uhci_port_1(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user