[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 09/14] usb: make usb_packet_copy operate on combined
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 09/14] usb: make usb_packet_copy operate on combined packets |
Date: |
Thu, 21 Feb 2013 10:59:08 +0100 |
Likewise usb_packet_skip.
Also usb_packet_size.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb.h | 1 +
hw/usb/core.c | 19 ++++++++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/hw/usb.h b/hw/usb.h
index af86fbd..0d09e02 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -390,6 +390,7 @@ int usb_packet_map(USBPacket *p, QEMUSGList *sgl);
void usb_packet_unmap(USBPacket *p, QEMUSGList *sgl);
void usb_packet_copy(USBPacket *p, void *ptr, size_t bytes);
void usb_packet_skip(USBPacket *p, size_t bytes);
+size_t usb_packet_size(USBPacket *p);
void usb_packet_cleanup(USBPacket *p);
static inline bool usb_packet_is_inflight(USBPacket *p)
diff --git a/hw/usb/core.c b/hw/usb/core.c
index 5517797..674fef8 100644
--- a/hw/usb/core.c
+++ b/hw/usb/core.c
@@ -570,15 +570,17 @@ void usb_packet_addbuf(USBPacket *p, void *ptr, size_t
len)
void usb_packet_copy(USBPacket *p, void *ptr, size_t bytes)
{
+ QEMUIOVector *iov = p->combined ? &p->combined->iov : &p->iov;
+
assert(p->actual_length >= 0);
- assert(p->actual_length + bytes <= p->iov.size);
+ assert(p->actual_length + bytes <= iov->size);
switch (p->pid) {
case USB_TOKEN_SETUP:
case USB_TOKEN_OUT:
- iov_to_buf(p->iov.iov, p->iov.niov, p->actual_length, ptr, bytes);
+ iov_to_buf(iov->iov, iov->niov, p->actual_length, ptr, bytes);
break;
case USB_TOKEN_IN:
- iov_from_buf(p->iov.iov, p->iov.niov, p->actual_length, ptr, bytes);
+ iov_from_buf(iov->iov, iov->niov, p->actual_length, ptr, bytes);
break;
default:
fprintf(stderr, "%s: invalid pid: %x\n", __func__, p->pid);
@@ -589,14 +591,21 @@ void usb_packet_copy(USBPacket *p, void *ptr, size_t
bytes)
void usb_packet_skip(USBPacket *p, size_t bytes)
{
+ QEMUIOVector *iov = p->combined ? &p->combined->iov : &p->iov;
+
assert(p->actual_length >= 0);
- assert(p->actual_length + bytes <= p->iov.size);
+ assert(p->actual_length + bytes <= iov->size);
if (p->pid == USB_TOKEN_IN) {
- iov_memset(p->iov.iov, p->iov.niov, p->actual_length, 0, bytes);
+ iov_memset(iov->iov, iov->niov, p->actual_length, 0, bytes);
}
p->actual_length += bytes;
}
+size_t usb_packet_size(USBPacket *p)
+{
+ return p->combined ? p->combined->iov.size : p->iov.size;
+}
+
void usb_packet_cleanup(USBPacket *p)
{
assert(!usb_packet_is_inflight(p));
--
1.7.9.7
- [Qemu-devel] [PULL 00/14] usb patch queue, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 03/14] make usb devices configurable, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 02/14] fix scripts/make_device_config.sh, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 10/14] usb-redir: simplify packet copy, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 07/14] usb-host: remove usb_host_device_close, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 08/14] usb: add usb_ep_set_halted, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 05/14] usb-storage: use scsi_req_enqueue return value, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 11/14] usb: fix endpoint descriptor ordering, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 09/14] usb: make usb_packet_copy operate on combined packets,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 04/14] allow disabling usb smartcard support, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 01/14] usb: Makefile cleanup, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 12/14] usb-core: usb3 streams, Gerd Hoffmann, 2013/02/21
- Re: [Qemu-devel] [PATCH 12/14] usb-core: usb3 streams, Eduardo Habkost, 2013/02/21
- [Qemu-devel] [PATCH 13/14] usb-xhci: usb3 streams, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 06/14] usb-host: move legacy cmd line bits, Gerd Hoffmann, 2013/02/21
- [Qemu-devel] [PATCH 14/14] uas-uas: usb3 streams, Gerd Hoffmann, 2013/02/21