1/* TODO: spec citations per structure */
2
3#include <drivers/usb/usb.h>
4#include <drivers/verifier.h>
5
6/* USB specification, page 276 */
7#define DV_STRUCT usb_setup_packet
8dv_size(0x08);
9dv_align(1);
10dv_field(uint8_t, bitmap_request_type, 0x00);
11dv_field(enum usb_rq_code, request, 0x01);
12dv_field(uint16_t, value, 0x02);
13dv_field(uint16_t, length, 0x06);
14#undef DV_STRUCT
15
16/* USB specification, page 290 */
17#define DV_STRUCT usb_device_descriptor
18dv_size(0x12);
19dv_align(1);
20dv_field(uint8_t, length, 0x00);
21dv_field(uint8_t, type, 0x01);
22dv_field(uint16_t, usb_num_bcd, 0x02);
23dv_field(uint8_t, class, 0x04);
24dv_field(uint8_t, subclass, 0x05);
25dv_field(uint8_t, protocol, 0x06);
26dv_field(uint8_t, max_packet_size, 0x07);
27dv_field(uint16_t, vendor_id, 0x08);
28dv_field(uint16_t, product_id, 0x0A);
29dv_field(uint16_t, device_num_bcd, 0x0C);
30dv_field(uint8_t, manufacturer, 0x0E);
31dv_field(uint8_t, product, 0x0F);
32dv_field(uint8_t, serial_num, 0x10);
33dv_field(uint8_t, num_configs, 0x11);
34#undef DV_STRUCT
35
36/* TODO: spec citation */
37#define DV_STRUCT usb_interface_descriptor
38dv_size(0x09);
39dv_align(1);
40dv_field(uint8_t, length, 0x00);
41dv_field(uint8_t, type, 0x01);
42dv_field(uint8_t, interface_number, 0x02);
43dv_field(uint8_t, alternate_setting, 0x03);
44dv_field(uint8_t, num_endpoints, 0x04);
45dv_field(uint8_t, class, 0x05);
46dv_field(uint8_t, subclass, 0x06);
47dv_field(uint8_t, protocol, 0x07);
48dv_field(uint8_t, interface, 0x08);
49#undef DV_STRUCT
50
51/* TODO: spec citation */
52#define DV_STRUCT usb_config_descriptor
53dv_size(0x09);
54dv_align(1);
55dv_field(uint8_t, length, 0x00);
56dv_field(uint8_t, descriptor_type, 0x01);
57dv_field(uint16_t, total_length, 0x02);
58dv_field(uint8_t, num_interfaces, 0x04);
59dv_field(uint8_t, configuration_value, 0x05);
60dv_field(uint8_t, configuration, 0x06);
61dv_field(uint8_t, bitmap_attributes, 0x07);
62dv_field(uint8_t, max_power, 0x08);
63#undef DV_STRUCT
64
65/* TODO: spec citation */
66#define DV_STRUCT usb_endpoint_descriptor
67dv_size(0x07);
68dv_align(1);
69dv_field(uint8_t, length, 0x00);
70dv_field(uint8_t, type, 0x01);
71dv_field(uint8_t, address, 0x02);
72dv_field(uint8_t, attributes, 0x03);
73dv_field(uint16_t, max_packet_size, 0x04);
74dv_field(uint8_t, interval, 0x06);
75#undef DV_STRUCT
76