]> git.proxmox.com Git - qemu.git/blame - hw/usb-desc.h
target-arm/neon_helper.c: Use make_float32/float32_val macros
[qemu.git] / hw / usb-desc.h
CommitLineData
37fb59d3
GH
1#ifndef QEMU_HW_USB_DESC_H
2#define QEMU_HW_USB_DESC_H
3
4#include <inttypes.h>
5
6struct USBDescID {
7 uint16_t idVendor;
8 uint16_t idProduct;
9 uint16_t bcdDevice;
10 uint8_t iManufacturer;
11 uint8_t iProduct;
12 uint8_t iSerialNumber;
13};
14
15struct USBDescDevice {
16 uint16_t bcdUSB;
17 uint8_t bDeviceClass;
18 uint8_t bDeviceSubClass;
19 uint8_t bDeviceProtocol;
20 uint8_t bMaxPacketSize0;
21 uint8_t bNumConfigurations;
22
23 const USBDescConfig *confs;
24};
25
26struct USBDescConfig {
27 uint8_t bNumInterfaces;
28 uint8_t bConfigurationValue;
29 uint8_t iConfiguration;
30 uint8_t bmAttributes;
31 uint8_t bMaxPower;
32
33 uint8_t nif;
34 const USBDescIface *ifs;
35};
36
37struct USBDescIface {
38 uint8_t bInterfaceNumber;
39 uint8_t bAlternateSetting;
40 uint8_t bNumEndpoints;
41 uint8_t bInterfaceClass;
42 uint8_t bInterfaceSubClass;
43 uint8_t bInterfaceProtocol;
44 uint8_t iInterface;
45
46 uint8_t ndesc;
47 USBDescOther *descs;
48 USBDescEndpoint *eps;
49};
50
51struct USBDescEndpoint {
52 uint8_t bEndpointAddress;
53 uint8_t bmAttributes;
54 uint16_t wMaxPacketSize;
55 uint8_t bInterval;
56};
57
58struct USBDescOther {
59 uint8_t length;
60 uint8_t *data;
61};
62
63typedef const char *USBDescStrings[256];
64
65struct USBDesc {
66 USBDescID id;
67 const USBDescDevice *full;
68 const USBDescDevice *high;
69 const char* const *str;
70};
71
72/* generate usb packages from structs */
73int usb_desc_device(const USBDescID *id, const USBDescDevice *dev,
74 uint8_t *dest, size_t len);
25620cba
GH
75int usb_desc_device_qualifier(const USBDescDevice *dev,
76 uint8_t *dest, size_t len);
37fb59d3
GH
77int usb_desc_config(const USBDescConfig *conf, uint8_t *dest, size_t len);
78int usb_desc_iface(const USBDescIface *iface, uint8_t *dest, size_t len);
79int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len);
80int usb_desc_other(const USBDescOther *desc, uint8_t *dest, size_t len);
37fb59d3
GH
81
82/* control message emulation helpers */
a980a065 83void usb_desc_init(USBDevice *dev);
32d41919 84void usb_desc_attach(USBDevice *dev);
132a3f55
GH
85void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str);
86const char *usb_desc_get_string(USBDevice *dev, uint8_t index);
87int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len);
37fb59d3
GH
88int usb_desc_get_descriptor(USBDevice *dev, int value, uint8_t *dest, size_t len);
89int usb_desc_handle_control(USBDevice *dev, int request, int value,
90 int index, int length, uint8_t *data);
91
92#endif /* QEMU_HW_USB_DESC_H */