mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
Merge remote-tracking branch 'kraxel/usb.37' into staging
* kraxel/usb.37: usb-redir: Improve some debugging messages usb-redir: Try to keep our buffer size near the target size usb-redir: Pre-fill our isoc input buffer before sending pkts to the host usb-redir: Dynamically adjust iso buffering size based on ep interval usb-redir: Clear iso / irq error when stopping the stream usb: link packets to endpoints not devices usb: add max_packet_size to USBEndpoint usb/debug: add usb_ep_dump usb-desc: USBEndpoint support usb: add ifnum to USBEndpoint usb: add USBEndpoint xhci: Initial xHCI implementation usb: add audio device model usb-desc: audio endpoint support usb: track altsetting in USBDevice usb: track configuration and interface count in USBDevice. usb-host: rip out legacy procfs support
This commit is contained in:
commit
9ca2140ab1
25 changed files with 3973 additions and 471 deletions
44
hw/usb.h
44
hw/usb.h
|
|
@ -79,6 +79,11 @@
|
|||
#define USB_CLASS_APP_SPEC 0xfe
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
#define USB_SUBCLASS_UNDEFINED 0
|
||||
#define USB_SUBCLASS_AUDIO_CONTROL 1
|
||||
#define USB_SUBCLASS_AUDIO_STREAMING 2
|
||||
#define USB_SUBCLASS_AUDIO_MIDISTREAMING 3
|
||||
|
||||
#define USB_DIR_OUT 0
|
||||
#define USB_DIR_IN 0x80
|
||||
|
||||
|
|
@ -132,11 +137,14 @@
|
|||
#define USB_DT_OTHER_SPEED_CONFIG 0x07
|
||||
#define USB_DT_DEBUG 0x0A
|
||||
#define USB_DT_INTERFACE_ASSOC 0x0B
|
||||
#define USB_DT_CS_INTERFACE 0x24
|
||||
#define USB_DT_CS_ENDPOINT 0x25
|
||||
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
#define USB_ENDPOINT_XFER_INVALID 255
|
||||
|
||||
typedef struct USBBus USBBus;
|
||||
typedef struct USBBusOps USBBusOps;
|
||||
|
|
@ -144,6 +152,7 @@ typedef struct USBPort USBPort;
|
|||
typedef struct USBDevice USBDevice;
|
||||
typedef struct USBDeviceInfo USBDeviceInfo;
|
||||
typedef struct USBPacket USBPacket;
|
||||
typedef struct USBEndpoint USBEndpoint;
|
||||
|
||||
typedef struct USBDesc USBDesc;
|
||||
typedef struct USBDescID USBDescID;
|
||||
|
|
@ -161,6 +170,16 @@ struct USBDescString {
|
|||
QLIST_ENTRY(USBDescString) next;
|
||||
};
|
||||
|
||||
#define USB_MAX_ENDPOINTS 15
|
||||
#define USB_MAX_INTERFACES 16
|
||||
|
||||
struct USBEndpoint {
|
||||
uint8_t type;
|
||||
uint8_t ifnum;
|
||||
int max_packet_size;
|
||||
USBDevice *dev;
|
||||
};
|
||||
|
||||
/* definition of a USB device */
|
||||
struct USBDevice {
|
||||
DeviceState qdev;
|
||||
|
|
@ -186,9 +205,18 @@ struct USBDevice {
|
|||
int32_t setup_len;
|
||||
int32_t setup_index;
|
||||
|
||||
USBEndpoint ep_ctl;
|
||||
USBEndpoint ep_in[USB_MAX_ENDPOINTS];
|
||||
USBEndpoint ep_out[USB_MAX_ENDPOINTS];
|
||||
|
||||
QLIST_HEAD(, USBDescString) strings;
|
||||
const USBDescDevice *device;
|
||||
|
||||
int configuration;
|
||||
int ninterfaces;
|
||||
int altsetting[USB_MAX_INTERFACES];
|
||||
const USBDescConfig *config;
|
||||
const USBDescIface *ifaces[USB_MAX_INTERFACES];
|
||||
};
|
||||
|
||||
struct USBDeviceInfo {
|
||||
|
|
@ -241,6 +269,9 @@ struct USBDeviceInfo {
|
|||
*/
|
||||
int (*handle_data)(USBDevice *dev, USBPacket *p);
|
||||
|
||||
void (*set_interface)(USBDevice *dev, int interface,
|
||||
int alt_old, int alt_new);
|
||||
|
||||
const char *product_desc;
|
||||
const USBDesc *usb_desc;
|
||||
|
||||
|
|
@ -288,7 +319,7 @@ struct USBPacket {
|
|||
QEMUIOVector iov;
|
||||
int result; /* transfer length or USB_RET_* status code */
|
||||
/* Internal use by the USB layer. */
|
||||
USBDevice *owner;
|
||||
USBEndpoint *owner;
|
||||
};
|
||||
|
||||
void usb_packet_init(USBPacket *p);
|
||||
|
|
@ -304,6 +335,17 @@ int usb_handle_packet(USBDevice *dev, USBPacket *p);
|
|||
void usb_packet_complete(USBDevice *dev, USBPacket *p);
|
||||
void usb_cancel_packet(USBPacket * p);
|
||||
|
||||
void usb_ep_init(USBDevice *dev);
|
||||
void usb_ep_dump(USBDevice *dev);
|
||||
struct USBEndpoint *usb_ep_get(USBDevice *dev, int pid, int ep);
|
||||
uint8_t usb_ep_get_type(USBDevice *dev, int pid, int ep);
|
||||
uint8_t usb_ep_get_ifnum(USBDevice *dev, int pid, int ep);
|
||||
void usb_ep_set_type(USBDevice *dev, int pid, int ep, uint8_t type);
|
||||
void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum);
|
||||
void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
|
||||
uint16_t raw);
|
||||
int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep);
|
||||
|
||||
void usb_attach(USBPort *port);
|
||||
void usb_detach(USBPort *port);
|
||||
void usb_reset(USBPort *port);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue