XenevaOS
Loading...
Searching...
No Matches
usb.h
Go to the documentation of this file.
1
30#ifndef __USB_H__
31#define __USB_H__
32
33#include <stdint.h>
34#include "xhci.h"
35
36/* Standard USB Requests */
37#define USB_BM_REQUEST_OUTPUT 0
38#define USB_BM_REQUEST_INPUT 0x80
39#define USB_BM_REQUEST_STANDARD 0
40#define USB_BM_REQUEST_CLASS 0x20
41#define USB_BM_REQUEST_VENDOR 0x40
42#define USB_BM_REQUEST_DEVICE 0
43#define USB_BM_REQUEST_INTERFACE 1
44#define USB_BM_REQUEST_ENDPOINT 2
45#define USB_BM_REQUEST_OTHER 3
46#define USB_BM_REQUEST_VENDORSPEC 0x1F
47
48#define USB_BREQUEST_GET_STATUS 0
49#define USB_BREQUEST_CLEAR_FEATURE 1
50#define USB_BREQUEST_SET_FEATURE 3
51#define USB_BREQUEST_SET_ADDRESS 5
52#define USB_BREQUEST_GET_DESCRIPTOR 6
53#define USB_BREQUEST_SET_DESCRIPTOR 7
54#define USB_BREQUEST_GET_CONFIGURATION 8
55#define USB_BREQUEST_SET_CONFIGURATION 9
56#define USB_BREQUEST_GET_INTERFACE 10
57#define USB_BREQUEST_SET_INTERFACE 11
58
59#define USB_DESCRIPTOR_DEVICE 1
60#define USB_DESCRIPTOR_CONFIGURATION 2
61#define USB_DESCRIPTOR_STRING 3
62#define USB_DESCRIPTOR_INTERFACE 4
63#define USB_DESCRIPTOR_ENDPOINT 5
64#define USB_DESCRIPTOR_SUPERSPEED_ENDP_CMP 48
65
66#define USB_DESCRIPTOR_WVALUE(type,index) ((type << 8) | index)
67
68#define USB_AUDIO_DEV_CLASS 0x01
69#define USB_COMMUNICATION_CDC_CTRL_CLASS 0x02
70#define USB_HID_DEV_CLASS 0x03
71#define USB_PHYSICAL_DEV_CLASS 0x05
72#define USB_IMAGE_DEV_CLASS 0x06
73#define USB_PRINTER_DEV_CLASS 0x07
74#define USB_MASS_STORAGE_DEV_CLASS 0x08
75#define USB_HUB_DEV_CLASS 0x09
76#define USB_CDC_DATA_DEV_CLASS 0x0A
77#define USB_SMART_CARD_DEV_CLASS 0x0B
78#define USB_CONTENT_SECURITY_DEV_CLASS 0x0D
79#define USB_VIDEO_DEV_CLASS 0x0E
80#define USB_PERSONAL_HEALTHCARE_DEV_CLASS 0x0F
81#define USB_AUDIO_VIDEO_DEV_CLASS 0x10
82#define USB_BILLBOARD_DEV_CLASS 0x11
83#define USB_TYPE_C_BRIDGE_CLASS 0x12
84#define USB_I3C_DEV_CLASS 0x3C
85#define USB_DIAGNOSTIC_DEV_CLASS 0xDC
86#define USB_WIRELESS_CONTROLLER_DEV_CLASS 0xE0
87#define USB_MISCELLANEOUS_DEV_CLASS 0xEF
88
89/* transfer type defined in endpoint descriptor*/
90#define ENDPOINT_TRANSFER_TYPE_CONTROL 0
91#define ENDPOINT_TRANSFER_TYPE_ISOCH 1
92#define ENDPOINT_TRANSFER_TYPE_BULK 2
93#define ENDPOINT_TRANSFER_TYPE_INT 3
94
95
96
97#pragma pack(push,1)
98typedef struct _dev_desc_ {
114#pragma pack(pop)
115
116#pragma pack(push,1)
117typedef struct _interface_desc_ {
128#pragma pack(pop)
129
130#pragma pack(push,1)
131typedef struct _qualifier_desc_ {
142#pragma pack(pop)
143
144#pragma pack(push,1)
145typedef struct _config_desc_ {
155#pragma pack(pop)
156
157#pragma pack(push,1)
158typedef struct _string_desc_ {
161 //..string value
163#pragma pack(pop)
164
165#pragma pack(push,1)
166typedef struct _endpoint_desc_ {
174#pragma pack(pop)
175
176#pragma pack(push,1)
177typedef struct _usb_desc_ {
181#pragma pack(pop)
182
183struct _usb_dev_;
184
185typedef int(*usb_drv_entry)(_usb_dev_* dev);
186typedef int(*usb_drv_unload)(_usb_dev_* dev);
187
188
189
190#pragma pack(push,1)
191typedef struct _usb_dev_ {
192 void* data;
205 void (*schedule_interrupt)(_usb_dev_* dev, void* ep, uint64_t buffer, void (*callback)(void* dev, void* slot, void* Endp));
206 void (*control_transfer)(_usb_dev_* usbdev, const USB_REQUEST_PACKET* request, uint64_t buffer_addr, const size_t len);
207 void (*bulk_transfer)(_usb_dev_* usbdev, uint64_t buffer, uint16_t data_len, void* ep);
208 void (*get_device_desc)(_usb_dev_* dev, uint64_t buffer, uint16_t len);
209 void (*get_string_desc)(_usb_dev_* dev, uint64_t buffer, uint16_t id);
210 void (*get_config_desc)(_usb_dev_* dev, uint64_t buffer, uint16_t len, uint8_t id);
211 usb_descriptor_t* (*get_descriptor)(_usb_dev_* dev, uint8_t type);
212 void* (*get_endpoint)(_usb_dev_* dev, uint8_t ep_type);
213 void* (*get_bulk_ep)(_usb_dev_* dev, uint8_t dir);
214 int (*get_max_pack_sz)(_usb_dev_* dev, void* ep);
217 void (*set_config_val)(_usb_dev_* dev, uint8_t config_val);
218 int (*poll_wait)(_usb_dev_* dev, int wait_type);
222#pragma pack(pop)
223
224
225/*
226 * USBCreateDevice -- create aurora usb device
227 */
229/*
230* USBGetDeviceDesc -- sends USB_GET_DESCRIPTOR request to specific device
231* @param dev -- Pointer to usb device structure
232* @param slot -- Pointer to usb slot data structure
233* @param slot_id -- Slot id of the device
234* @param buffer -- address of the buffer where device descriptor will be written
235* @param len -- number of bytes needs to be requested
236*/
237extern void USBGetDeviceDesc(AuUSBDevice* usbdev, uint64_t buffer, uint16_t len);
238
239/*
240* USBGetStringDesc -- request a string descriptor to specific device
241* @param dev -- Pointer to usb device structure
242* @param slot -- Pointer to usb slot data structure
243* @param slot_id -- Slot id of the device
244* @param buffer -- address of the buffer where device descriptor will be written
245* @param id-- type of the string needs to be requested
246*/
247extern void USBGetStringDesc(AuUSBDevice* usbdev,uint64_t buffer, uint16_t id);
248
249/*
250 * USBGetConfigDesc -- get configuration descriptor
251 * @param dev -- Pointer to usb device structure
252 * @param slot -- Pointer to usb slot data structure
253 * @param slot_id -- Slot id of the device
254 * @param buffer -- address of the buffer where device descriptor will be written
255 */
256extern void USBGetConfigDesc(AuUSBDevice* usbdev,uint64_t buffer, uint16_t len, uint8_t id);
257
258/*
259* USBGetConfigDesc -- get configuration descriptor
260* @param dev -- Pointer to usb device structure
261* @param slot -- Pointer to usb slot data structure
262* @param slot_id -- Slot id of the device
263* @param configval -- config value returned in configuration descriptor
264*/
265extern void USBSetConfigDesc(AuUSBDevice* usbdev, uint8_t configval);
266
267/*
268 * USBScheduleInterrupt -- schedules an interrupt for a device
269 * @param dev -- Pointer to USB Device
270 * @param slot -- Controller slot
271 * @param ep -- Endpoint data
272 * @param physdata -- Physical memory area
273 */
274extern void USBScheduleInterrupt(AuUSBDevice* usbdev, void * ep, uint64_t physdata);
275
276//extern void USBControlTransfer(XHCIDevice* dev, XHCISlot* slot, uint8_t slot_id, const USB_REQUEST_PACKET* request, uint64_t buffer_addr, const size_t len,
277// uint8_t trt);
278
279
280/*
281 * USBDeviceSetFunctions -- setup the device data structure with
282 * all the function pointers
283 * @param dev -- Pointer to USB Device
284 */
285extern void USBDeviceSetFunctions(AuUSBDevice* dev);
286#endif
void USBGetConfigDesc(AuUSBDevice *usbdev, uint64_t buffer, uint16_t len, uint8_t id)
Definition usb.cpp:105
struct _string_desc_ usb_string_desc_t
struct _endpoint_desc_ usb_endpoint_desc_t
int(* usb_drv_unload)(_usb_dev_ *dev)
Definition usb.h:186
void USBSetConfigDesc(AuUSBDevice *usbdev, uint8_t configval)
Definition usb.cpp:130
void USBScheduleInterrupt(AuUSBDevice *usbdev, void *ep, uint64_t physdata)
struct _config_desc_ usb_config_desc_t
void USBGetStringDesc(AuUSBDevice *usbdev, uint64_t buffer, uint16_t id)
Definition usb.cpp:80
void USBGetDeviceDesc(AuUSBDevice *usbdev, uint64_t buffer, uint16_t len)
Definition usb.cpp:54
struct _interface_desc_ usb_if_desc_t
struct _usb_desc_ usb_descriptor_t
struct _usb_dev_ AuUSBDevice
AuUSBDevice * USBCreateDevice()
Definition usb.cpp:41
void USBDeviceSetFunctions(AuUSBDevice *dev)
Definition usb.cpp:314
struct _dev_desc_ usb_dev_desc_t
struct _qualifier_desc_ usb_qualifier_desc_t
int(* usb_drv_entry)(_usb_dev_ *dev)
Definition usb.h:185
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
Definition usb3.h:150
Definition usb3.h:207
uint8_t bMaxPower
Definition usb3.h:215
uint8_t iConfiguration
Definition usb3.h:213
uint8_t bNumInterfaces
Definition usb3.h:211
uint8_t bLength
Definition usb3.h:208
uint16_t wTotalLength
Definition usb3.h:210
uint8_t bDescriptorType
Definition usb3.h:209
uint8_t bmAttributes
Definition usb3.h:214
uint8_t bConfigurationValue
Definition usb3.h:212
Definition usb3.h:160
uint16_t idVendor
Definition usb3.h:168
uint8_t bDescriptorType
Definition usb3.h:162
uint16_t idProduct
Definition usb3.h:169
uint8_t bDeviceSubClass
Definition usb3.h:165
uint8_t bLength
Definition usb3.h:161
uint8_t iManufacturer
Definition usb3.h:171
uint8_t bMaxPacketSize0
Definition usb3.h:167
uint8_t iSerialNumber
Definition usb3.h:173
uint16_t bcdDevice
Definition usb3.h:170
uint8_t bDeviceClass
Definition usb3.h:164
uint8_t iProduct
Definition usb3.h:172
uint8_t bDeviceProtocol
Definition usb3.h:166
uint8_t bNumConfigurations
Definition usb3.h:174
uint16_t bcdUSB
Definition usb3.h:163
Definition usb3.h:228
uint8_t bEndpointAddress
Definition usb3.h:231
uint8_t bmAttributes
Definition usb3.h:232
uint8_t bLength
Definition usb3.h:229
uint16_t wMaxPacketSize
Definition usb3.h:233
uint8_t bInterval
Definition usb3.h:234
uint8_t bDescriptorType
Definition usb3.h:230
Definition usb3.h:179
uint8_t bInterfaceSubClass
Definition usb3.h:186
uint8_t bAlternateSetting
Definition usb3.h:183
uint8_t iInterface
Definition usb3.h:188
uint8_t bLength
Definition usb3.h:180
uint8_t bDescriptorType
Definition usb3.h:181
uint8_t bNumEndpoints
Definition usb3.h:184
uint8_t bInterfaceClass
Definition usb3.h:185
uint8_t bInterfaceProtocol
Definition usb3.h:187
uint8_t bInterfaceNumber
Definition usb3.h:182
Definition usb3.h:193
uint8_t bMaxPacketSize0
Definition usb3.h:200
uint16_t bcdUSB
Definition usb3.h:196
uint8_t bNumConfigurations
Definition usb3.h:201
uint8_t bDeviceProtocol
Definition usb3.h:199
uint8_t bDeviceSubClass
Definition usb3.h:198
uint8_t bLength
Definition usb3.h:194
uint8_t bDeviceClass
Definition usb3.h:197
uint8_t bDescriptorType
Definition usb3.h:195
uint8_t bReserved
Definition usb3.h:202
Definition usb3.h:220
uint8_t bDescriptorType
Definition usb3.h:222
uint8_t bLength
Definition usb3.h:221
Definition usb3.h:239
uint8_t bDescriptorType
Definition usb3.h:241
uint8_t bLength
Definition usb3.h:240
Definition usb3.h:40
int numInterfaces
Definition usb.h:202
usb_drv_unload ClassUnload
Definition usb.h:220
void(* get_device_desc)(_usb_dev_ *dev, uint64_t buffer, uint16_t len)
Definition usb.h:208
void(* get_string_desc)(_usb_dev_ *dev, uint64_t buffer, uint16_t id)
Definition usb.h:209
void(* bulk_transfer)(_usb_dev_ *usbdev, uint64_t buffer, uint16_t data_len, void *ep)
Definition usb.h:207
uint32_t subClassCode
Definition usb.h:194
void * descriptor
Definition usb.h:201
int numEndpoint
Definition usb.h:203
void(* control_transfer)(_usb_dev_ *usbdev, const USB_REQUEST_PACKET *request, uint64_t buffer_addr, const size_t len)
Definition usb.h:206
uint32_t classCode
Definition usb.h:193
uint16_t vendorID
Definition usb.h:195
int configValue
Definition usb.h:197
usb_drv_entry ClassEntry
Definition usb.h:219
void * data
Definition usb.h:192
uint8_t(* get_endpoint_attrib)(_usb_dev_ *dev, void *ep)
Definition usb.h:216
int(* poll_wait)(_usb_dev_ *dev, int wait_type)
Definition usb.h:218
void(* get_config_desc)(_usb_dev_ *dev, uint64_t buffer, uint16_t len, uint8_t id)
Definition usb.h:210
void(* schedule_interrupt)(_usb_dev_ *dev, void *ep, uint64_t buffer, void(*callback)(void *dev, void *slot, void *Endp))
Definition usb.h:205
uint16_t deviceID
Definition usb.h:196
void(* set_config_val)(_usb_dev_ *dev, uint8_t config_val)
Definition usb.h:217
uint8_t(* get_endpoint_address)(_usb_dev_ *dev, void *ep)
Definition usb.h:215
uint8_t address
Definition usb.h:199
uint8_t protocol
Definition usb.h:200
bool driverInitialized
Definition usb.h:204
uint16_t usbVersion
Definition usb.h:198
int(* get_max_pack_sz)(_usb_dev_ *dev, void *ep)
Definition usb.h:214