-
Notifications
You must be signed in to change notification settings - Fork 1
/
mausb_event.h
248 lines (217 loc) · 5.44 KB
/
mausb_event.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 - 2020 DisplayLink (UK) Ltd.
*/
#ifndef __MAUSB_MAUSB_EVENT_H__
#define __MAUSB_MAUSB_EVENT_H__
#include "ma_usb.h"
#define MAUSB_MAX_NUM_OF_MA_DEVS 15
#define MAUSB_RING_BUFFER_SIZE 1024
#define MAUSB_MAX_DATA_IN_REQ_SIZE 28
#define MAUSB_EVENT_TYPE_DEV_RESET 1u
#define MAUSB_EVENT_TYPE_USB_DEV_HANDLE 2u
#define MAUSB_EVENT_TYPE_EP_HANDLE 3u
#define MAUSB_EVENT_TYPE_EP_HANDLE_ACTIVATE 4u
#define MAUSB_EVENT_TYPE_EP_HANDLE_INACTIVATE 5u
#define MAUSB_EVENT_TYPE_EP_HANDLE_RESET 6u
#define MAUSB_EVENT_TYPE_EP_HANDLE_DELETE 7u
#define MAUSB_EVENT_TYPE_MODIFY_EP0 8u
#define MAUSB_EVENT_TYPE_SET_USB_DEV_ADDRESS 9u
#define MAUSB_EVENT_TYPE_UPDATE_DEV 10u
#define MAUSB_EVENT_TYPE_USB_DEV_DISCONNECT 11u
#define MAUSB_EVENT_TYPE_PING 12u
#define MAUSB_EVENT_TYPE_DEV_DISCONNECT 13u
#define MAUSB_EVENT_TYPE_USB_DEV_RESET 14u
#define MAUSB_EVENT_TYPE_CANCEL_TRANSFER 15u
#define MAUSB_EVENT_TYPE_CLEAR_TRANSFERS 16u
#define MAUSB_EVENT_TYPE_PORT_CHANGED 80u
#define MAUSB_EVENT_TYPE_SEND_MGMT_MSG 81u
#define MAUSB_EVENT_TYPE_SEND_DATA_MSG 82u
#define MAUSB_EVENT_TYPE_RECEIVED_MGMT_MSG 83u
#define MAUSB_EVENT_TYPE_RECEIVED_DATA_MSG 84u
#define MAUSB_EVENT_TYPE_URB_COMPLETE 85u
#define MAUSB_EVENT_TYPE_SEND_ACK 86u
#define MAUSB_EVENT_TYPE_ITERATOR_RESET 87u
#define MAUSB_EVENT_TYPE_ITERATOR_SEEK 88u
#define MAUSB_EVENT_TYPE_DELETE_DATA_TRANSFER 89u
#define MAUSB_EVENT_TYPE_DELETE_MA_DEV 90u
#define MAUSB_EVENT_TYPE_USER_FINISHED 91u
#define MAUSB_EVENT_TYPE_RELEASE_EVENT_RESOURCES 92u
#define MAUSB_EVENT_TYPE_NETWORK_DISCONNECTED 93u
#define MAUSB_EVENT_TYPE_MGMT_REQUEST_TIMED_OUT 94u
#define MAUSB_EVENT_TYPE_NONE 255u
#define MAUSB_DATA_MSG_DIRECTION_OUT 0
#define MAUSB_DATA_MSG_DIRECTION_IN 1
#define MAUSB_DATA_MSG_CONTROL MAUSB_DATA_MSG_DIRECTION_OUT
struct mausb_devhandle {
u64 event_id;
u32 route_string;
u16 hub_dev_handle;
u16 parent_hs_hub_dev_handle;
u16 parent_hs_hub_port;
u16 mtt;
/* dev_handle assigned in user */
u16 dev_handle;
u8 device_speed;
u8 lse;
};
struct mausb_ephandle {
u64 event_id;
u16 device_handle;
u16 descriptor_size;
/* ep_handle assigned in user */
u16 ep_handle;
char descriptor[sizeof(struct ma_usb_ephandlereq_desc_ss)];
};
struct mausb_epactivate {
u64 event_id;
u16 device_handle;
u16 ep_handle;
};
struct mausb_epinactivate {
u64 event_id;
u16 device_handle;
u16 ep_handle;
};
struct mausb_epreset {
u64 event_id;
u16 device_handle;
u16 ep_handle;
u8 tsp;
};
struct mausb_epdelete {
u64 event_id;
u16 device_handle;
u16 ep_handle;
};
struct mausb_updatedev {
u64 event_id;
u16 device_handle;
u16 max_exit_latency;
struct ma_usb_updatedevreq_desc update_descriptor;
u8 hub;
u8 number_of_ports;
u8 mtt;
u8 ttt;
u8 integrated_hub_latency;
};
struct mausb_usbdevreset {
u64 event_id;
u16 device_handle;
};
struct mausb_modifyep0 {
u64 event_id;
u16 device_handle;
u16 ep_handle;
__le16 max_packet_size;
};
struct mausb_setusbdevaddress {
u64 event_id;
u16 device_handle;
u16 response_timeout;
};
struct mausb_usbdevdisconnect {
u16 device_handle;
};
struct mausb_canceltransfer {
u64 urb;
u16 device_handle;
u16 ep_handle;
};
struct mausb_cleartransfers {
u64 event_id;
u16 device_handle;
u16 ep_handle;
};
struct mausb_devdisconnect {
u64 event_id;
};
struct mausb_mgmt_hdr {
__aligned(4) char hdr[MAUSB_MAX_MGMT_SIZE];
};
struct mausb_mgmt_req_timedout {
u64 event_id;
};
struct mausb_delete_ma_dev {
u64 event_id;
u16 device_id;
};
/* TODO split mgmt_event to generic send mgmt req and specific requests */
struct mausb_mgmt_event {
union {
struct mausb_devhandle dev_handle;
struct mausb_ephandle ep_handle;
struct mausb_epactivate ep_activate;
struct mausb_epinactivate ep_inactivate;
struct mausb_epreset ep_reset;
struct mausb_epdelete ep_delete;
struct mausb_modifyep0 modify_ep0;
struct mausb_setusbdevaddress set_usb_dev_address;
struct mausb_updatedev update_dev;
struct mausb_usbdevreset usb_dev_reset;
struct mausb_usbdevdisconnect usb_dev_disconnect;
struct mausb_canceltransfer cancel_transfer;
struct mausb_cleartransfers clear_transfers;
struct mausb_devdisconnect dev_disconnect;
struct mausb_mgmt_hdr mgmt_hdr;
struct mausb_mgmt_req_timedout mgmt_req_timedout;
struct mausb_delete_ma_dev delete_ma_dev;
};
};
struct mausb_data_event {
#if defined(__KERNEL__)
uintptr_t urb;
uintptr_t recv_buf;
#else
#if (defined(MAUSB_KERNEL_BITNESS) && MAUSB_KERNEL_BITNESS == 32) && \
__WORDSIZE == 32
u32 urb;
u32 recv_buf;
#else
u64 urb;
u64 recv_buf;
#endif
#endif
u32 iterator_seek_delta;
u32 transfer_size;
u32 rem_transfer_size;
u32 transfer_flags;
u32 isoch_seg_num;
u32 req_id;
u32 payload_size;
s32 status;
__aligned(4) char hdr[MAUSB_TRANSFER_HDR_SIZE];
__aligned(4) char hdr_ack[MAUSB_TRANSFER_HDR_SIZE];
u16 device_id;
u16 ep_handle;
u16 packet_size;
u8 setup_packet;
u8 direction;
u8 transfer_type;
u8 first_control_packet;
u8 transfer_eot;
u8 mausb_address;
u8 mausb_ssid;
};
struct mausb_port_changed_event {
u8 port;
u8 dev_type;
u8 dev_speed;
u8 lse;
};
struct mausb_event {
union {
struct mausb_mgmt_event mgmt;
struct mausb_data_event data;
struct mausb_port_changed_event port_changed;
};
s32 status;
u8 type;
u8 madev_addr;
};
struct mausb_events_notification {
u16 num_of_events;
u16 num_of_completed_events;
u8 madev_addr;
};
#endif /* __MAUSB_MAUSB_EVENT_H__ */