uhci: keep uhci state pointer in async packet struct.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
ddf6583f88
commit
7b5a44c546
@ -106,6 +106,8 @@ static void dump_data(const uint8_t *data, int len)
|
|||||||
static void dump_data(const uint8_t *data, int len) {}
|
static void dump_data(const uint8_t *data, int len) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct UHCIState UHCIState;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pending async transaction.
|
* Pending async transaction.
|
||||||
* 'packet' must be the first field because completion
|
* 'packet' must be the first field because completion
|
||||||
@ -113,6 +115,7 @@ static void dump_data(const uint8_t *data, int len) {}
|
|||||||
*/
|
*/
|
||||||
typedef struct UHCIAsync {
|
typedef struct UHCIAsync {
|
||||||
USBPacket packet;
|
USBPacket packet;
|
||||||
|
UHCIState *uhci;
|
||||||
QTAILQ_ENTRY(UHCIAsync) next;
|
QTAILQ_ENTRY(UHCIAsync) next;
|
||||||
uint32_t td;
|
uint32_t td;
|
||||||
uint32_t token;
|
uint32_t token;
|
||||||
@ -127,7 +130,7 @@ typedef struct UHCIPort {
|
|||||||
uint16_t ctrl;
|
uint16_t ctrl;
|
||||||
} UHCIPort;
|
} UHCIPort;
|
||||||
|
|
||||||
typedef struct UHCIState {
|
struct UHCIState {
|
||||||
PCIDevice dev;
|
PCIDevice dev;
|
||||||
USBBus bus;
|
USBBus bus;
|
||||||
uint16_t cmd; /* cmd register */
|
uint16_t cmd; /* cmd register */
|
||||||
@ -147,7 +150,7 @@ typedef struct UHCIState {
|
|||||||
/* Active packets */
|
/* Active packets */
|
||||||
QTAILQ_HEAD(,UHCIAsync) async_pending;
|
QTAILQ_HEAD(,UHCIAsync) async_pending;
|
||||||
uint8_t num_ports_vmstate;
|
uint8_t num_ports_vmstate;
|
||||||
} UHCIState;
|
};
|
||||||
|
|
||||||
typedef struct UHCI_TD {
|
typedef struct UHCI_TD {
|
||||||
uint32_t link;
|
uint32_t link;
|
||||||
@ -166,6 +169,7 @@ static UHCIAsync *uhci_async_alloc(UHCIState *s)
|
|||||||
UHCIAsync *async = qemu_malloc(sizeof(UHCIAsync));
|
UHCIAsync *async = qemu_malloc(sizeof(UHCIAsync));
|
||||||
|
|
||||||
memset(&async->packet, 0, sizeof(async->packet));
|
memset(&async->packet, 0, sizeof(async->packet));
|
||||||
|
async->uhci = s;
|
||||||
async->valid = 0;
|
async->valid = 0;
|
||||||
async->td = 0;
|
async->td = 0;
|
||||||
async->token = 0;
|
async->token = 0;
|
||||||
@ -830,8 +834,8 @@ done:
|
|||||||
|
|
||||||
static void uhci_async_complete(USBPacket *packet, void *opaque)
|
static void uhci_async_complete(USBPacket *packet, void *opaque)
|
||||||
{
|
{
|
||||||
UHCIState *s = opaque;
|
UHCIAsync *async = container_of(packet, UHCIAsync, packet);
|
||||||
UHCIAsync *async = (UHCIAsync *) packet;
|
UHCIState *s = async->uhci;
|
||||||
|
|
||||||
DPRINTF("uhci: async complete. td 0x%x token 0x%x\n", async->td, async->token);
|
DPRINTF("uhci: async complete. td 0x%x token 0x%x\n", async->td, async->token);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user