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: stable/12/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_ */ 225