xref: /haiku/src/add-ons/kernel/drivers/bus/usb/usb_raw.h (revision b24d095e90f8206809ba8fae04a4057443e4567a)
1 /*
2  * Copyright 2006-2008, Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _USB_RAW_H_
7 #define _USB_RAW_H_
8 
9 #include <USB3.h>
10 
11 #define B_USB_RAW_PROTOCOL_VERSION	0x0015
12 #define B_USB_RAW_ACTIVE_ALTERNATE	0xffffffff
13 
14 typedef enum {
15 	B_USB_RAW_COMMAND_GET_VERSION = 0x1000,
16 
17 	B_USB_RAW_COMMAND_GET_DEVICE_DESCRIPTOR = 0x2000,
18 	B_USB_RAW_COMMAND_GET_CONFIGURATION_DESCRIPTOR,
19 	B_USB_RAW_COMMAND_GET_INTERFACE_DESCRIPTOR,
20 	B_USB_RAW_COMMAND_GET_ENDPOINT_DESCRIPTOR,
21 	B_USB_RAW_COMMAND_GET_STRING_DESCRIPTOR,
22 	B_USB_RAW_COMMAND_GET_GENERIC_DESCRIPTOR,
23 	B_USB_RAW_COMMAND_GET_ALT_INTERFACE_COUNT,
24 	B_USB_RAW_COMMAND_GET_ACTIVE_ALT_INTERFACE_INDEX,
25 	B_USB_RAW_COMMAND_GET_INTERFACE_DESCRIPTOR_ETC,
26 	B_USB_RAW_COMMAND_GET_ENDPOINT_DESCRIPTOR_ETC,
27 	B_USB_RAW_COMMAND_GET_GENERIC_DESCRIPTOR_ETC,
28 	B_USB_RAW_COMMAND_GET_CONFIGURATION_DESCRIPTOR_ETC,
29 
30 	B_USB_RAW_COMMAND_SET_CONFIGURATION = 0x3000,
31 	B_USB_RAW_COMMAND_SET_FEATURE,
32 	B_USB_RAW_COMMAND_CLEAR_FEATURE,
33 	B_USB_RAW_COMMAND_GET_STATUS,
34 	B_USB_RAW_COMMAND_GET_DESCRIPTOR,
35 	B_USB_RAW_COMMAND_SET_ALT_INTERFACE,
36 
37 	B_USB_RAW_COMMAND_CONTROL_TRANSFER = 0x4000,
38 	B_USB_RAW_COMMAND_INTERRUPT_TRANSFER,
39 	B_USB_RAW_COMMAND_BULK_TRANSFER,
40 	B_USB_RAW_COMMAND_ISOCHRONOUS_TRANSFER
41 } usb_raw_command_id;
42 
43 
44 typedef enum {
45 	B_USB_RAW_STATUS_SUCCESS = 0,
46 
47 	B_USB_RAW_STATUS_FAILED,
48 	B_USB_RAW_STATUS_ABORTED,
49 	B_USB_RAW_STATUS_STALLED,
50 	B_USB_RAW_STATUS_CRC_ERROR,
51 	B_USB_RAW_STATUS_TIMEOUT,
52 
53 	B_USB_RAW_STATUS_INVALID_CONFIGURATION,
54 	B_USB_RAW_STATUS_INVALID_INTERFACE,
55 	B_USB_RAW_STATUS_INVALID_ENDPOINT,
56 	B_USB_RAW_STATUS_INVALID_STRING,
57 
58 	B_USB_RAW_STATUS_NO_MEMORY
59 } usb_raw_command_status;
60 
61 
62 typedef union {
63 	struct {
64 		status_t						status;
65 	} version;
66 
67 	struct {
68 		status_t						status;
69 		usb_device_descriptor			*descriptor;
70 	} device;
71 
72 	struct {
73 		status_t						status;
74 		usb_configuration_descriptor	*descriptor;
75 		uint32							config_index;
76 	} config;
77 
78 	struct {
79 		status_t						status;
80 		usb_configuration_descriptor	*descriptor;
81 		uint32							config_index;
82 		size_t                          length;
83 	} config_etc;
84 
85 	struct {
86 		status_t						status;
87 		uint32							alternate_info;
88 		uint32							config_index;
89 		uint32							interface_index;
90 	} alternate;
91 
92 	struct {
93 		status_t						status;
94 		usb_interface_descriptor		*descriptor;
95 		uint32							config_index;
96 		uint32							interface_index;
97 	} interface;
98 
99 	struct {
100 		status_t						status;
101 		usb_interface_descriptor		*descriptor;
102 		uint32							config_index;
103 		uint32							interface_index;
104 		uint32							alternate_index;
105 	} interface_etc;
106 
107 	struct {
108 		status_t						status;
109 		usb_endpoint_descriptor			*descriptor;
110 		uint32							config_index;
111 		uint32							interface_index;
112 		uint32							endpoint_index;
113 	} endpoint;
114 
115 	struct {
116 		status_t						status;
117 		usb_endpoint_descriptor			*descriptor;
118 		uint32							config_index;
119 		uint32							interface_index;
120 		uint32							alternate_index;
121 		uint32							endpoint_index;
122 	} endpoint_etc;
123 
124 	struct {
125 		status_t						status;
126 		usb_descriptor					*descriptor;
127 		uint32							config_index;
128 		uint32							interface_index;
129 		uint32							generic_index;
130 		size_t							length;
131 	} generic;
132 
133 	struct {
134 		status_t						status;
135 		usb_descriptor					*descriptor;
136 		uint32							config_index;
137 		uint32							interface_index;
138 		uint32							alternate_index;
139 		uint32							generic_index;
140 		size_t							length;
141 	} generic_etc;
142 
143 	struct {
144 		status_t						status;
145 		usb_string_descriptor			*descriptor;
146 		uint32							string_index;
147 		size_t							length;
148 	} string;
149 
150 	struct {
151 		status_t						status;
152 		uint8							type;
153 		uint8							index;
154 		uint16							language_id;
155 		void							*data;
156 		size_t							length;
157 	} descriptor;
158 
159 	struct {
160 		status_t						status;
161 		uint8							request_type;
162 		uint8							request;
163 		uint16							value;
164 		uint16							index;
165 		uint16							length;
166 		void							*data;
167 	} control;
168 
169 	struct {
170 		status_t						status;
171 		uint32							interface;
172 		uint32							endpoint;
173 		void							*data;
174 		size_t							length;
175 	} transfer;
176 
177 	struct {
178 		status_t						status;
179 		uint32							interface;
180 		uint32							endpoint;
181 		void							*data;
182 		size_t							length;
183 		usb_iso_packet_descriptor		*packet_descriptors;
184 		uint32							packet_count;
185 	} isochronous;
186 } usb_raw_command;
187 
188 #endif // _USB_RAW_H_
189