Statistics
| Branch: | Revision:

root / hw / usb-desc.h @ 7aff0f21

History | View | Annotate | Download (3.1 kB)

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