memory: change dirty getting API to take a size
[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
6e625fc7
BH
33 /* grouped interfaces */
34 uint8_t nif_groups;
35 const USBDescIfaceAssoc *if_groups;
36
37 /* "normal" interfaces */
38 uint8_t nif;
39 const USBDescIface *ifs;
40};
41
42/* conceptually an Interface Association Descriptor, and releated interfaces */
43struct USBDescIfaceAssoc {
44 uint8_t bFirstInterface;
45 uint8_t bInterfaceCount;
46 uint8_t bFunctionClass;
47 uint8_t bFunctionSubClass;
48 uint8_t bFunctionProtocol;
49 uint8_t iFunction;
50
37fb59d3
GH
51 uint8_t nif;
52 const USBDescIface *ifs;
53};
54
55struct USBDescIface {
56 uint8_t bInterfaceNumber;
57 uint8_t bAlternateSetting;
58 uint8_t bNumEndpoints;
59 uint8_t bInterfaceClass;
60 uint8_t bInterfaceSubClass;
61 uint8_t bInterfaceProtocol;
62 uint8_t iInterface;
63
64 uint8_t ndesc;
65 USBDescOther *descs;
66 USBDescEndpoint *eps;
67};
68
69struct USBDescEndpoint {
70 uint8_t bEndpointAddress;
71 uint8_t bmAttributes;
72 uint16_t wMaxPacketSize;
73 uint8_t bInterval;
cc5f1395
GH
74 uint8_t bRefresh;
75 uint8_t bSynchAddress;
76
77 uint8_t is_audio; /* has bRefresh + bSynchAddress */
78 uint8_t *extra;
37fb59d3
GH
79};
80
81struct USBDescOther {
82 uint8_t length;
97237e0a 83 const uint8_t *data;
37fb59d3
GH
84};
85
86typedef const char *USBDescStrings[256];
87
88struct USBDesc {
89 USBDescID id;
90 const USBDescDevice *full;
91 const USBDescDevice *high;
92 const char* const *str;
93};
94
95/* generate usb packages from structs */
96int usb_desc_device(const USBDescID *id, const USBDescDevice *dev,
97 uint8_t *dest, size_t len);
25620cba
GH
98int usb_desc_device_qualifier(const USBDescDevice *dev,
99 uint8_t *dest, size_t len);
37fb59d3 100int usb_desc_config(const USBDescConfig *conf, uint8_t *dest, size_t len);
6e625fc7
BH
101int usb_desc_iface_group(const USBDescIfaceAssoc *iad, uint8_t *dest,
102 size_t len);
37fb59d3
GH
103int usb_desc_iface(const USBDescIface *iface, uint8_t *dest, size_t len);
104int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len);
105int usb_desc_other(const USBDescOther *desc, uint8_t *dest, size_t len);
37fb59d3
GH
106
107/* control message emulation helpers */
a980a065 108void usb_desc_init(USBDevice *dev);
32d41919 109void usb_desc_attach(USBDevice *dev);
132a3f55
GH
110void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str);
111const char *usb_desc_get_string(USBDevice *dev, uint8_t index);
112int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len);
37fb59d3 113int usb_desc_get_descriptor(USBDevice *dev, int value, uint8_t *dest, size_t len);
007fd62f
HG
114int usb_desc_handle_control(USBDevice *dev, USBPacket *p,
115 int request, int value, int index, int length, uint8_t *data);
37fb59d3
GH
116
117#endif /* QEMU_HW_USB_DESC_H */
This page took 0.222449 seconds and 4 git commands to generate.