XenevaOS
Loading...
Searching...
No Matches
ch9.h
Go to the documentation of this file.
1#include <linux/kernel.h>
2#include <linux/list.h>
3
4/* ─── USB speed ─── */
7 USB_SPEED_LOW, /* 1.5 Mb/s */
8 USB_SPEED_FULL, /* 12 Mb/s */
9 USB_SPEED_HIGH, /* 480 Mb/s */
11 USB_SPEED_SUPER, /* 5 Gb/s */
12 USB_SPEED_SUPER_PLUS, /* 10 Gb/s */
13};
14
15/* ─── USB device state ─── */
27
28/* ─── Endpoint type ─── */
29#define USB_ENDPOINT_XFER_CONTROL 0
30#define USB_ENDPOINT_XFER_ISOC 1
31#define USB_ENDPOINT_XFER_BULK 2
32#define USB_ENDPOINT_XFER_INT 3
33
34/* ─── Endpoint direction ─── */
35#define USB_DIR_OUT 0x00
36#define USB_DIR_IN 0x80
37
38/* ─── usb_endpoint_descriptor ─── */
39#pragma pack(push,1)
48#pragma pack(pop)
49
50/* ─── usb_ep ─── */
51struct usb_ep {
53 const char* name;
54 const struct usb_ep_ops* ops;
57 unsigned maxpacket : 11;
58 unsigned maxpacket_limit : 11;
59 unsigned max_streams : 5;
60 unsigned mult : 2;
61 unsigned maxburst : 5;
69 bool enabled;
70 bool wedged;
71};
72
73/* ─── usb_request (URB equivalent at gadget layer) ─── */
75 void* buf;
76 unsigned length;
78 unsigned stream_id : 16;
79 unsigned no_interrupt : 1;
80 unsigned zero : 1;
81 unsigned short_not_ok : 1;
82 void (*complete)(struct usb_ep* ep,
83 struct usb_request* req);
84 void* context;
86 unsigned actual;
87 int status;
88};
89
90/* ─── URB (host side) ─── */
91#define URB_SHORT_NOT_OK 0x0001
92#define URB_ISO_ASAP 0x0002
93#define URB_NO_TRANSFER_DMA_MAP 0x0004
94#define URB_ZERO_PACKET 0x0040
95#define URB_NO_INTERRUPT 0x0080
96
119
120/* ─── Pipe encoding helpers ─── */
121#define usb_pipein(pipe) ((pipe) & USB_DIR_IN)
122#define usb_pipeout(pipe) (!usb_pipein(pipe))
123#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
124#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
125#define usb_pipetype(pipe) (((pipe) >> 30) & 3)
126#define usb_pipecontrol(pipe) (usb_pipetype(pipe) == USB_ENDPOINT_XFER_CONTROL)
127#define usb_pipebulk(pipe) (usb_pipetype(pipe) == USB_ENDPOINT_XFER_BULK)
128#define usb_pipeint(pipe) (usb_pipetype(pipe) == USB_ENDPOINT_XFER_INT)
129#define usb_pipeisoc(pipe) (usb_pipetype(pipe) == USB_ENDPOINT_XFER_ISOC)
130
131/* ─── usb_host_endpoint ─── */
135 void* hcpriv;
136 struct ep_device* ep_dev;
137 unsigned char* extra;
141};
142
143/* ─── usb_device ─── */
162
163/* ─── usb_bus ─── */
AuUSBDeviceStruc * device
Definition main.cpp:148
usb_device_speed
Definition ch9.h:5
@ USB_SPEED_LOW
Definition ch9.h:7
@ USB_SPEED_FULL
Definition ch9.h:8
@ USB_SPEED_HIGH
Definition ch9.h:9
@ USB_SPEED_UNKNOWN
Definition ch9.h:6
@ USB_SPEED_SUPER_PLUS
Definition ch9.h:12
@ USB_SPEED_WIRELESS
Definition ch9.h:10
@ USB_SPEED_SUPER
Definition ch9.h:11
usb_device_state
Definition ch9.h:16
@ USB_STATE_POWERED
Definition ch9.h:19
@ USB_STATE_NOTATTACHED
Definition ch9.h:17
@ USB_STATE_ADDRESS
Definition ch9.h:23
@ USB_STATE_SUSPENDED
Definition ch9.h:25
@ USB_STATE_CONFIGURED
Definition ch9.h:24
@ USB_STATE_ATTACHED
Definition ch9.h:18
@ USB_STATE_DEFAULT
Definition ch9.h:22
@ USB_STATE_UNAUTHENTICATED
Definition ch9.h:21
@ USB_STATE_RECONNECTING
Definition ch9.h:20
uintptr_t dma_addr_t
Definition kernel.h:69
uint8_t u8
Definition kernel.h:20
uint16_t u16
Definition kernel.h:21
uint32_t u32
Definition kernel.h:22
Definition list.h:7
Definition ch9.h:97
dma_addr_t setup_dma
Definition ch9.h:111
int start_frame
Definition ch9.h:112
unsigned int pipe
Definition ch9.h:102
unsigned int stream_id
Definition ch9.h:103
int status
Definition ch9.h:104
struct list_head anchor_list
Definition ch9.h:99
int interval
Definition ch9.h:114
u32 transfer_buffer_length
Definition ch9.h:108
int error_count
Definition ch9.h:115
void * context
Definition ch9.h:116
struct usb_host_endpoint * ep
Definition ch9.h:101
struct usb_device * dev
Definition ch9.h:100
int number_of_packets
Definition ch9.h:113
unsigned int transfer_flags
Definition ch9.h:105
void(* complete)(struct urb *urb)
Definition ch9.h:117
void * transfer_buffer
Definition ch9.h:106
unsigned char * setup_packet
Definition ch9.h:110
dma_addr_t transfer_dma
Definition ch9.h:107
u32 actual_length
Definition ch9.h:109
struct list_head urb_list
Definition ch9.h:98
Definition ch9.h:164
u8 otg_port
Definition ch9.h:170
const char * bus_name
Definition ch9.h:167
int busnum
Definition ch9.h:166
u8 uses_dma
Definition ch9.h:168
u8 uses_pio_for_control
Definition ch9.h:169
struct device * controller
Definition ch9.h:165
struct usb_device * root_hub
Definition ch9.h:172
int devnum_next
Definition ch9.h:171
Definition ch9.h:144
enum usb_device_speed speed
Definition ch9.h:147
int maxchild
Definition ch9.h:157
void * hcpriv
Definition ch9.h:160
int devnum
Definition ch9.h:145
u16 descriptor_idProduct
Definition ch9.h:153
struct usb_bus * bus
Definition ch9.h:149
u16 descriptor_idVendor
Definition ch9.h:152
struct usb_device * children[16]
Definition ch9.h:158
struct usb_host_endpoint ep0
Definition ch9.h:150
u32 quirks
Definition ch9.h:159
char * serial
Definition ch9.h:156
enum usb_device_state state
Definition ch9.h:146
char * manufacturer
Definition ch9.h:155
char * product
Definition ch9.h:154
struct usb_device * parent
Definition ch9.h:148
Definition ch9.h:40
u8 bInterval
Definition ch9.h:46
u8 bDescriptorType
Definition ch9.h:42
u16 wMaxPacketSize
Definition ch9.h:45
u8 bEndpointAddress
Definition ch9.h:43
u8 bmAttributes
Definition ch9.h:44
u8 bLength
Definition ch9.h:41
Definition ch9.h:51
bool caps_type_iso
Definition ch9.h:66
u8 address
Definition ch9.h:62
bool caps_type_bulk
Definition ch9.h:67
bool caps_type_control
Definition ch9.h:65
bool caps_type_int
Definition ch9.h:68
bool enabled
Definition ch9.h:69
unsigned maxburst
Definition ch9.h:61
bool wedged
Definition ch9.h:70
unsigned max_streams
Definition ch9.h:59
const char * name
Definition ch9.h:53
unsigned mult
Definition ch9.h:60
unsigned maxpacket_limit
Definition ch9.h:58
const struct usb_ep_ops * ops
Definition ch9.h:54
bool caps_dir_out
Definition ch9.h:64
unsigned maxpacket
Definition ch9.h:57
struct usb_endpoint_descriptor * desc
Definition ch9.h:56
void * driver_data
Definition ch9.h:52
struct list_head ep_list
Definition ch9.h:55
bool caps_dir_in
Definition ch9.h:63
Definition ch9.h:132
int streams
Definition ch9.h:140
unsigned char * extra
Definition ch9.h:137
struct list_head urb_list
Definition ch9.h:134
struct ep_device * ep_dev
Definition ch9.h:136
void * hcpriv
Definition ch9.h:135
int enabled
Definition ch9.h:139
int extralen
Definition ch9.h:138
struct usb_endpoint_descriptor desc
Definition ch9.h:133
Definition ch9.h:74
int status
Definition ch9.h:87
unsigned no_interrupt
Definition ch9.h:79
struct list_head list
Definition ch9.h:85
unsigned actual
Definition ch9.h:86
unsigned stream_id
Definition ch9.h:78
unsigned zero
Definition ch9.h:80
unsigned short_not_ok
Definition ch9.h:81
void(* complete)(struct usb_ep *ep, struct usb_request *req)
Definition ch9.h:82
void * buf
Definition ch9.h:75
dma_addr_t dma
Definition ch9.h:77
void * context
Definition ch9.h:84
unsigned length
Definition ch9.h:76