1 /*-
2 * SPDX-License-Identifier: BSD-4-Clause
3 *
4 * Copyright (c) 2003
5 * Bill Paul <wpaul@windriver.com>. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Bill Paul.
18 * 4. Neither the name of the author nor the names of any co-contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 * $FreeBSD: releng/12.0/sys/compat/ndis/usbd_var.h 325966 2017-11-18 14:26:50Z pfg $
35 */
36
37 #ifndef _USBD_VAR_H_
38 #define _USBD_VAR_H_
39
40 #define IOCTL_INTERNAL_USB_SUBMIT_URB 0x00220003
41
42 #define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
43 #define URB_FUNCTION_ABORT_PIPE 0x0002
44 #define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
45 #define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
46 #define URB_FUNCTION_VENDOR_DEVICE 0x0017
47 #define URB_FUNCTION_VENDOR_INTERFACE 0x0018
48 #define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
49 #define URB_FUNCTION_CLASS_DEVICE 0x001A
50 #define URB_FUNCTION_CLASS_INTERFACE 0x001B
51 #define URB_FUNCTION_CLASS_ENDPOINT 0x001C
52 #define URB_FUNCTION_CLASS_OTHER 0x001F
53 #define URB_FUNCTION_VENDOR_OTHER 0x0020
54
55 #define USBD_STATUS_SUCCESS 0x00000000
56 #define USBD_STATUS_CANCELED 0x00010000
57 #define USBD_STATUS_PENDING 0x40000000
58 #define USBD_STATUS_NO_MEMORY 0x80000100
59 #define USBD_STATUS_REQUEST_FAILED 0x80000500
60 #define USBD_STATUS_INVALID_PIPE_HANDLE 0x80000600
61 #define USBD_STATUS_ERROR_SHORT_TRANSFER 0x80000900
62 #define USBD_STATUS_CRC 0xC0000001
63 #define USBD_STATUS_BTSTUFF 0xC0000002
64 #define USBD_STATUS_DATA_TOGGLE_MISMATCH 0xC0000003
65 #define USBD_STATUS_STALL_PID 0xC0000004
66 #define USBD_STATUS_DEV_NOT_RESPONDING 0xC0000005
67 #define USBD_STATUS_PID_CHECK_FAILURE 0xC0000006
68 #define USBD_STATUS_UNEXPECTED_PID 0xC0000007
69 #define USBD_STATUS_DATA_OVERRUN 0xC0000008
70 #define USBD_STATUS_DATA_UNDERRUN 0xC0000009
71 #define USBD_STATUS_RESERVED1 0xC000000A
72 #define USBD_STATUS_RESERVED2 0xC000000B
73 #define USBD_STATUS_BUFFER_OVERRUN 0xC000000C
74 #define USBD_STATUS_BUFFER_UNDERRUN 0xC000000D
75 #define USBD_STATUS_NOT_ACCESSED 0xC000000F
76 #define USBD_STATUS_FIFO 0xC0000010
77 #define USBD_STATUS_XACT_ERROR 0xC0000011
78 #define USBD_STATUS_BABBLE_DETECTED 0xC0000012
79 #define USBD_STATUS_DATA_BUFFER_ERROR 0xC0000013
80 #define USBD_STATUS_NOT_SUPPORTED 0xC0000E00
81 #define USBD_STATUS_TIMEOUT 0xC0006000
82 #define USBD_STATUS_DEVICE_GONE 0xC0007000
83
84 struct usbd_urb_header {
85 uint16_t uuh_len;
86 uint16_t uuh_func;
87 int32_t uuh_status;
88 void *uuh_handle;
89 uint32_t uuh_flags;
90 };
91
92 enum usbd_pipe_type {
93 UsbdPipeTypeControl = UE_CONTROL,
94 UsbdPipeTypeIsochronous = UE_ISOCHRONOUS,
95 UsbdPipeTypeBulk = UE_BULK,
96 UsbdPipeTypeInterrupt = UE_INTERRUPT
97 };
98
99 struct usbd_pipe_information {
100 uint16_t upi_maxpktsize;
101 uint8_t upi_epaddr;
102 uint8_t upi_interval;
103 enum usbd_pipe_type upi_type;
104 usb_endpoint_descriptor_t *upi_handle;
105 uint32_t upi_maxtxsize;
106 #define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE PAGE_SIZE
107 uint32_t upi_flags;
108 };
109
110 struct usbd_interface_information {
111 uint16_t uii_len;
112 uint8_t uii_intfnum;
113 uint8_t uii_altset;
114 uint8_t uii_intfclass;
115 uint8_t uii_intfsubclass;
116 uint8_t uii_intfproto;
117 uint8_t uii_reserved;
118 void *uii_handle;
119 uint32_t uii_numeps;
120 struct usbd_pipe_information uii_pipes[1];
121 };
122
123 struct usbd_urb_select_interface {
124 struct usbd_urb_header usi_hdr;
125 void *usi_handle;
126 struct usbd_interface_information uusi_intf;
127 };
128
129 struct usbd_urb_select_configuration {
130 struct usbd_urb_header usc_hdr;
131 usb_config_descriptor_t *usc_conf;
132 void *usc_handle;
133 struct usbd_interface_information usc_intf;
134 };
135
136 struct usbd_urb_pipe_request {
137 struct usbd_urb_header upr_hdr;
138 usb_endpoint_descriptor_t *upr_handle;
139 };
140
141 struct usbd_hcd_area {
142 void *reserved8[8];
143 };
144
145 struct usbd_urb_bulk_or_intr_transfer {
146 struct usbd_urb_header ubi_hdr;
147 usb_endpoint_descriptor_t *ubi_epdesc;
148 uint32_t ubi_trans_flags;
149 #define USBD_SHORT_TRANSFER_OK 0x00000002
150 uint32_t ubi_trans_buflen;
151 void *ubi_trans_buf;
152 struct mdl *ubi_mdl;
153 union usbd_urb *ubi_urblink;
154 struct usbd_hcd_area ubi_hca;
155 };
156
157 struct usbd_urb_control_descriptor_request {
158 struct usbd_urb_header ucd_hdr;
159 void *ucd_reserved0;
160 uint32_t ucd_reserved1;
161 uint32_t ucd_trans_buflen;
162 void *ucd_trans_buf;
163 struct mdl *ucd_mdl;
164 union nt_urb *ucd_urblink;
165 struct usbd_hcd_area ucd_hca;
166 uint16_t ucd_reserved2;
167 uint8_t ucd_idx;
168 uint8_t ucd_desctype;
169 uint16_t ucd_langid;
170 uint16_t ucd_reserved3;
171 };
172
173 struct usbd_urb_vendor_or_class_request {
174 struct usbd_urb_header uvc_hdr;
175 void *uvc_reserved0;
176 uint32_t uvc_trans_flags;
177 #define USBD_TRANSFER_DIRECTION_IN 1
178 uint32_t uvc_trans_buflen;
179 void *uvc_trans_buf;
180 struct mdl *uvc_mdl;
181 union nt_urb *uvc_urblink;
182 struct usbd_hcd_area uvc_hca;
183 uint8_t uvc_reserved1;
184 uint8_t uvc_req;
185 uint16_t uvc_value;
186 uint16_t uvc_idx;
187 uint16_t uvc_reserved2;
188 };
189
190 struct usbd_interface_list_entry {
191 usb_interface_descriptor_t *uil_intfdesc;
192 struct usbd_interface_information *uil_intf;
193 };
194
195 union usbd_urb {
196 struct usbd_urb_header uu_hdr;
197 struct usbd_urb_select_configuration uu_selconf;
198 struct usbd_urb_bulk_or_intr_transfer uu_bulkintr;
199 struct usbd_urb_control_descriptor_request uu_ctldesc;
200 struct usbd_urb_vendor_or_class_request uu_vcreq;
201 struct usbd_urb_pipe_request uu_pipe;
202 };
203
204 #define USBD_URB_STATUS(urb) ((urb)->uu_hdr.uuh_status)
205
206 #define USBDI_VERSION 0x00000500
207 #define USB_VER_1_1 0x00000110
208 #define USB_VER_2_0 0x00000200
209
210 struct usbd_version_info {
211 uint32_t uvi_usbdi_vers;
212 uint32_t uvi_supported_vers;
213 };
214
215 typedef struct usbd_version_info usbd_version_info;
216
217 extern image_patch_table usbd_functbl[];
218
219 __BEGIN_DECLS
220 extern int usbd_libinit(void);
221 extern int usbd_libfini(void);
222 __END_DECLS
223
224 #endif /* _USBD_VAR_H_ */
Cache object: e3a57409f14835c49ac4275fc53fdcbc
|