XenevaOS
Loading...
Searching...
No Matches
XenevaOS
BaseHdr
linux
usb
ch9.h
Go to the documentation of this file.
1
#include <
linux/kernel.h
>
2
#include <
linux/list.h
>
3
4
/* ─── USB speed ─── */
5
enum
usb_device_speed
{
6
USB_SPEED_UNKNOWN
= 0,
7
USB_SPEED_LOW
,
/* 1.5 Mb/s */
8
USB_SPEED_FULL
,
/* 12 Mb/s */
9
USB_SPEED_HIGH
,
/* 480 Mb/s */
10
USB_SPEED_WIRELESS
,
11
USB_SPEED_SUPER
,
/* 5 Gb/s */
12
USB_SPEED_SUPER_PLUS
,
/* 10 Gb/s */
13
};
14
15
/* ─── USB device state ─── */
16
enum
usb_device_state
{
17
USB_STATE_NOTATTACHED
= 0,
18
USB_STATE_ATTACHED
,
19
USB_STATE_POWERED
,
20
USB_STATE_RECONNECTING
,
21
USB_STATE_UNAUTHENTICATED
,
22
USB_STATE_DEFAULT
,
23
USB_STATE_ADDRESS
,
24
USB_STATE_CONFIGURED
,
25
USB_STATE_SUSPENDED
,
26
};
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)
40
struct
usb_endpoint_descriptor
{
41
u8
bLength
;
42
u8
bDescriptorType
;
43
u8
bEndpointAddress
;
44
u8
bmAttributes
;
45
u16
wMaxPacketSize
;
46
u8
bInterval
;
47
};
// __packed;
48
#pragma pack(pop)
49
50
/* ─── usb_ep ─── */
51
struct
usb_ep
{
52
void
*
driver_data
;
53
const
char
*
name
;
54
const
struct
usb_ep_ops*
ops
;
55
struct
list_head
ep_list
;
56
struct
usb_endpoint_descriptor
*
desc
;
57
unsigned
maxpacket
: 11;
58
unsigned
maxpacket_limit
: 11;
59
unsigned
max_streams
: 5;
60
unsigned
mult
: 2;
61
unsigned
maxburst
: 5;
62
u8
address
;
63
bool
caps_dir_in
;
64
bool
caps_dir_out
;
65
bool
caps_type_control
;
66
bool
caps_type_iso
;
67
bool
caps_type_bulk
;
68
bool
caps_type_int
;
69
bool
enabled
;
70
bool
wedged
;
71
};
72
73
/* ─── usb_request (URB equivalent at gadget layer) ─── */
74
struct
usb_request
{
75
void
*
buf
;
76
unsigned
length
;
77
dma_addr_t
dma
;
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
;
85
struct
list_head
list
;
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
97
struct
urb
{
98
struct
list_head
urb_list
;
99
struct
list_head
anchor_list
;
100
struct
usb_device
*
dev
;
101
struct
usb_host_endpoint
*
ep
;
102
unsigned
int
pipe
;
103
unsigned
int
stream_id
;
104
int
status
;
105
unsigned
int
transfer_flags
;
106
void
*
transfer_buffer
;
107
dma_addr_t
transfer_dma
;
108
u32
transfer_buffer_length
;
109
u32
actual_length
;
110
unsigned
char
*
setup_packet
;
111
dma_addr_t
setup_dma
;
112
int
start_frame
;
113
int
number_of_packets
;
114
int
interval
;
115
int
error_count
;
116
void
*
context
;
117
void (*
complete
)(
struct
urb
*
urb
);
118
};
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 ─── */
132
struct
usb_host_endpoint
{
133
struct
usb_endpoint_descriptor
desc
;
134
struct
list_head
urb_list
;
135
void
*
hcpriv
;
136
struct
ep_device*
ep_dev
;
137
unsigned
char
*
extra
;
138
int
extralen
;
139
int
enabled
;
140
int
streams
;
141
};
142
143
/* ─── usb_device ─── */
144
struct
usb_device
{
145
int
devnum
;
146
enum
usb_device_state
state
;
147
enum
usb_device_speed
speed
;
148
struct
usb_device
*
parent
;
149
struct
usb_bus
*
bus
;
150
struct
usb_host_endpoint
ep0
;
151
// struct device dev;
152
u16
descriptor_idVendor
;
153
u16
descriptor_idProduct
;
154
char
*
product
;
155
char
*
manufacturer
;
156
char
*
serial
;
157
int
maxchild
;
158
struct
usb_device
*
children
[16];
159
u32
quirks
;
160
void
*
hcpriv
;
161
};
162
163
/* ─── usb_bus ─── */
164
struct
usb_bus
{
165
struct
device
*
controller
;
166
int
busnum
;
167
const
char
*
bus_name
;
168
u8
uses_dma
;
169
u8
uses_pio_for_control
;
170
u8
otg_port
;
171
int
devnum_next
;
172
struct
usb_device
*
root_hub
;
173
};
list.h
device
AuUSBDeviceStruc * device
Definition
main.cpp:148
usb_device_speed
usb_device_speed
Definition
ch9.h:5
USB_SPEED_LOW
@ USB_SPEED_LOW
Definition
ch9.h:7
USB_SPEED_FULL
@ USB_SPEED_FULL
Definition
ch9.h:8
USB_SPEED_HIGH
@ USB_SPEED_HIGH
Definition
ch9.h:9
USB_SPEED_UNKNOWN
@ USB_SPEED_UNKNOWN
Definition
ch9.h:6
USB_SPEED_SUPER_PLUS
@ USB_SPEED_SUPER_PLUS
Definition
ch9.h:12
USB_SPEED_WIRELESS
@ USB_SPEED_WIRELESS
Definition
ch9.h:10
USB_SPEED_SUPER
@ USB_SPEED_SUPER
Definition
ch9.h:11
usb_device_state
usb_device_state
Definition
ch9.h:16
USB_STATE_POWERED
@ USB_STATE_POWERED
Definition
ch9.h:19
USB_STATE_NOTATTACHED
@ USB_STATE_NOTATTACHED
Definition
ch9.h:17
USB_STATE_ADDRESS
@ USB_STATE_ADDRESS
Definition
ch9.h:23
USB_STATE_SUSPENDED
@ USB_STATE_SUSPENDED
Definition
ch9.h:25
USB_STATE_CONFIGURED
@ USB_STATE_CONFIGURED
Definition
ch9.h:24
USB_STATE_ATTACHED
@ USB_STATE_ATTACHED
Definition
ch9.h:18
USB_STATE_DEFAULT
@ USB_STATE_DEFAULT
Definition
ch9.h:22
USB_STATE_UNAUTHENTICATED
@ USB_STATE_UNAUTHENTICATED
Definition
ch9.h:21
USB_STATE_RECONNECTING
@ USB_STATE_RECONNECTING
Definition
ch9.h:20
kernel.h
dma_addr_t
uintptr_t dma_addr_t
Definition
kernel.h:69
u8
uint8_t u8
Definition
kernel.h:20
u16
uint16_t u16
Definition
kernel.h:21
u32
uint32_t u32
Definition
kernel.h:22
list_head
Definition
list.h:7
urb
Definition
ch9.h:97
urb::setup_dma
dma_addr_t setup_dma
Definition
ch9.h:111
urb::start_frame
int start_frame
Definition
ch9.h:112
urb::pipe
unsigned int pipe
Definition
ch9.h:102
urb::stream_id
unsigned int stream_id
Definition
ch9.h:103
urb::status
int status
Definition
ch9.h:104
urb::anchor_list
struct list_head anchor_list
Definition
ch9.h:99
urb::interval
int interval
Definition
ch9.h:114
urb::transfer_buffer_length
u32 transfer_buffer_length
Definition
ch9.h:108
urb::error_count
int error_count
Definition
ch9.h:115
urb::context
void * context
Definition
ch9.h:116
urb::ep
struct usb_host_endpoint * ep
Definition
ch9.h:101
urb::dev
struct usb_device * dev
Definition
ch9.h:100
urb::number_of_packets
int number_of_packets
Definition
ch9.h:113
urb::transfer_flags
unsigned int transfer_flags
Definition
ch9.h:105
urb::complete
void(* complete)(struct urb *urb)
Definition
ch9.h:117
urb::transfer_buffer
void * transfer_buffer
Definition
ch9.h:106
urb::setup_packet
unsigned char * setup_packet
Definition
ch9.h:110
urb::transfer_dma
dma_addr_t transfer_dma
Definition
ch9.h:107
urb::actual_length
u32 actual_length
Definition
ch9.h:109
urb::urb_list
struct list_head urb_list
Definition
ch9.h:98
usb_bus
Definition
ch9.h:164
usb_bus::otg_port
u8 otg_port
Definition
ch9.h:170
usb_bus::bus_name
const char * bus_name
Definition
ch9.h:167
usb_bus::busnum
int busnum
Definition
ch9.h:166
usb_bus::uses_dma
u8 uses_dma
Definition
ch9.h:168
usb_bus::uses_pio_for_control
u8 uses_pio_for_control
Definition
ch9.h:169
usb_bus::controller
struct device * controller
Definition
ch9.h:165
usb_bus::root_hub
struct usb_device * root_hub
Definition
ch9.h:172
usb_bus::devnum_next
int devnum_next
Definition
ch9.h:171
usb_device
Definition
ch9.h:144
usb_device::speed
enum usb_device_speed speed
Definition
ch9.h:147
usb_device::maxchild
int maxchild
Definition
ch9.h:157
usb_device::hcpriv
void * hcpriv
Definition
ch9.h:160
usb_device::devnum
int devnum
Definition
ch9.h:145
usb_device::descriptor_idProduct
u16 descriptor_idProduct
Definition
ch9.h:153
usb_device::bus
struct usb_bus * bus
Definition
ch9.h:149
usb_device::descriptor_idVendor
u16 descriptor_idVendor
Definition
ch9.h:152
usb_device::children
struct usb_device * children[16]
Definition
ch9.h:158
usb_device::ep0
struct usb_host_endpoint ep0
Definition
ch9.h:150
usb_device::quirks
u32 quirks
Definition
ch9.h:159
usb_device::serial
char * serial
Definition
ch9.h:156
usb_device::state
enum usb_device_state state
Definition
ch9.h:146
usb_device::manufacturer
char * manufacturer
Definition
ch9.h:155
usb_device::product
char * product
Definition
ch9.h:154
usb_device::parent
struct usb_device * parent
Definition
ch9.h:148
usb_endpoint_descriptor
Definition
ch9.h:40
usb_endpoint_descriptor::bInterval
u8 bInterval
Definition
ch9.h:46
usb_endpoint_descriptor::bDescriptorType
u8 bDescriptorType
Definition
ch9.h:42
usb_endpoint_descriptor::wMaxPacketSize
u16 wMaxPacketSize
Definition
ch9.h:45
usb_endpoint_descriptor::bEndpointAddress
u8 bEndpointAddress
Definition
ch9.h:43
usb_endpoint_descriptor::bmAttributes
u8 bmAttributes
Definition
ch9.h:44
usb_endpoint_descriptor::bLength
u8 bLength
Definition
ch9.h:41
usb_ep
Definition
ch9.h:51
usb_ep::caps_type_iso
bool caps_type_iso
Definition
ch9.h:66
usb_ep::address
u8 address
Definition
ch9.h:62
usb_ep::caps_type_bulk
bool caps_type_bulk
Definition
ch9.h:67
usb_ep::caps_type_control
bool caps_type_control
Definition
ch9.h:65
usb_ep::caps_type_int
bool caps_type_int
Definition
ch9.h:68
usb_ep::enabled
bool enabled
Definition
ch9.h:69
usb_ep::maxburst
unsigned maxburst
Definition
ch9.h:61
usb_ep::wedged
bool wedged
Definition
ch9.h:70
usb_ep::max_streams
unsigned max_streams
Definition
ch9.h:59
usb_ep::name
const char * name
Definition
ch9.h:53
usb_ep::mult
unsigned mult
Definition
ch9.h:60
usb_ep::maxpacket_limit
unsigned maxpacket_limit
Definition
ch9.h:58
usb_ep::ops
const struct usb_ep_ops * ops
Definition
ch9.h:54
usb_ep::caps_dir_out
bool caps_dir_out
Definition
ch9.h:64
usb_ep::maxpacket
unsigned maxpacket
Definition
ch9.h:57
usb_ep::desc
struct usb_endpoint_descriptor * desc
Definition
ch9.h:56
usb_ep::driver_data
void * driver_data
Definition
ch9.h:52
usb_ep::ep_list
struct list_head ep_list
Definition
ch9.h:55
usb_ep::caps_dir_in
bool caps_dir_in
Definition
ch9.h:63
usb_host_endpoint
Definition
ch9.h:132
usb_host_endpoint::streams
int streams
Definition
ch9.h:140
usb_host_endpoint::extra
unsigned char * extra
Definition
ch9.h:137
usb_host_endpoint::urb_list
struct list_head urb_list
Definition
ch9.h:134
usb_host_endpoint::ep_dev
struct ep_device * ep_dev
Definition
ch9.h:136
usb_host_endpoint::hcpriv
void * hcpriv
Definition
ch9.h:135
usb_host_endpoint::enabled
int enabled
Definition
ch9.h:139
usb_host_endpoint::extralen
int extralen
Definition
ch9.h:138
usb_host_endpoint::desc
struct usb_endpoint_descriptor desc
Definition
ch9.h:133
usb_request
Definition
ch9.h:74
usb_request::status
int status
Definition
ch9.h:87
usb_request::no_interrupt
unsigned no_interrupt
Definition
ch9.h:79
usb_request::list
struct list_head list
Definition
ch9.h:85
usb_request::actual
unsigned actual
Definition
ch9.h:86
usb_request::stream_id
unsigned stream_id
Definition
ch9.h:78
usb_request::zero
unsigned zero
Definition
ch9.h:80
usb_request::short_not_ok
unsigned short_not_ok
Definition
ch9.h:81
usb_request::complete
void(* complete)(struct usb_ep *ep, struct usb_request *req)
Definition
ch9.h:82
usb_request::buf
void * buf
Definition
ch9.h:75
usb_request::dma
dma_addr_t dma
Definition
ch9.h:77
usb_request::context
void * context
Definition
ch9.h:84
usb_request::length
unsigned length
Definition
ch9.h:76
Generated by
1.9.8