summaryrefslogtreecommitdiffstats
path: root/include/grub/usbdesc.h
blob: aac5ab05a042f0c44df5aef6ec7da690e2f23f2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 2008  Free Software Foundation, Inc.
 *
 *  GRUB is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  GRUB is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef	GRUB_USBDESC_H
#define	GRUB_USBDESC_H	1

#include <grub/types.h>
#include <grub/symbol.h>

typedef enum {
  GRUB_USB_DESCRIPTOR_DEVICE = 1,
  GRUB_USB_DESCRIPTOR_CONFIG,
  GRUB_USB_DESCRIPTOR_STRING,
  GRUB_USB_DESCRIPTOR_INTERFACE,
  GRUB_USB_DESCRIPTOR_ENDPOINT,
  GRUB_USB_DESCRIPTOR_DEBUG = 10,
  GRUB_USB_DESCRIPTOR_HUB = 0x29
} grub_usb_descriptor_t;

struct grub_usb_desc
{
  grub_uint8_t length;
  grub_uint8_t type;
} GRUB_PACKED;

struct grub_usb_desc_device
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint16_t usbrel;
  grub_uint8_t class;
  grub_uint8_t subclass;
  grub_uint8_t protocol;
  grub_uint8_t maxsize0;
  grub_uint16_t vendorid;
  grub_uint16_t prodid;
  grub_uint16_t devrel;
  grub_uint8_t strvendor;
  grub_uint8_t strprod;
  grub_uint8_t strserial;
  grub_uint8_t configcnt;
} GRUB_PACKED;

struct grub_usb_desc_config
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint16_t totallen;
  grub_uint8_t numif;
  grub_uint8_t config;
  grub_uint8_t strconfig;
  grub_uint8_t attrib;
  grub_uint8_t maxpower;
} GRUB_PACKED;

#if 0
struct grub_usb_desc_if_association
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint8_t firstif;
  grub_uint8_t ifcnt;
  grub_uint8_t class;
  grub_uint8_t subclass;
  grub_uint8_t protocol;
  grub_uint8_t function;
} GRUB_PACKED;
#endif

struct grub_usb_desc_if
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint8_t ifnum;
  grub_uint8_t altsetting;
  grub_uint8_t endpointcnt;
  grub_uint8_t class;
  grub_uint8_t subclass;
  grub_uint8_t protocol;
  grub_uint8_t strif;
} GRUB_PACKED;

struct grub_usb_desc_endp
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint8_t endp_addr;
  grub_uint8_t attrib;
  grub_uint16_t maxpacket;
  grub_uint8_t interval;
} GRUB_PACKED;

struct grub_usb_desc_str
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint16_t str[0];
} GRUB_PACKED;

struct grub_usb_desc_debug
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint8_t in_endp;
  grub_uint8_t out_endp;
} GRUB_PACKED;

struct grub_usb_usb_hubdesc
{
  grub_uint8_t length;
  grub_uint8_t type;
  grub_uint8_t portcnt;
  grub_uint16_t characteristics;
  grub_uint8_t pwdgood;
  grub_uint8_t current;
  /* Removable and power control bits follow.  */
} GRUB_PACKED;

#endif /* GRUB_USBDESC_H */