mbim.h revision 1.2 1 1.2 andvar /* $NetBSD: mbim.h,v 1.2 2021/08/26 21:33:36 andvar Exp $ */
2 1.1 khorben /* $OpenBSD: mbim.h,v 1.4 2017/04/18 13:27:55 gerhard Exp $ */
3 1.1 khorben
4 1.1 khorben /*
5 1.1 khorben * Copyright (c) 2016 genua mbH
6 1.1 khorben * All rights reserved.
7 1.1 khorben *
8 1.1 khorben * Permission to use, copy, modify, and distribute this software for any
9 1.1 khorben * purpose with or without fee is hereby granted, provided that the above
10 1.1 khorben * copyright notice and this permission notice appear in all copies.
11 1.1 khorben *
12 1.1 khorben * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 1.1 khorben * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 1.1 khorben * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 1.1 khorben * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 1.1 khorben * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 1.1 khorben * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 1.1 khorben * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 1.1 khorben */
20 1.1 khorben
21 1.1 khorben /*
22 1.1 khorben * Mobile Broadband Interface Model
23 1.1 khorben * http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
24 1.1 khorben */
25 1.1 khorben #ifndef _MBIM_H_
26 1.1 khorben #define _MBIM_H_
27 1.1 khorben
28 1.1 khorben #define UDESCSUB_MBIM 27
29 1.1 khorben #define MBIM_INTERFACE_ALTSETTING 1
30 1.1 khorben
31 1.1 khorben #define MBIM_RESET_FUNCTION 0x05
32 1.1 khorben
33 1.1 khorben /*
34 1.1 khorben * Registration state (MBIM_REGISTER_STATE)
35 1.1 khorben */
36 1.1 khorben #define MBIM_REGSTATE_UNKNOWN 0
37 1.1 khorben #define MBIM_REGSTATE_DEREGISTERED 1
38 1.1 khorben #define MBIM_REGSTATE_SEARCHING 2
39 1.1 khorben #define MBIM_REGSTATE_HOME 3
40 1.1 khorben #define MBIM_REGSTATE_ROAMING 4
41 1.1 khorben #define MBIM_REGSTATE_PARTNER 5
42 1.1 khorben #define MBIM_REGSTATE_DENIED 6
43 1.1 khorben
44 1.1 khorben /*
45 1.1 khorben * Data classes mask (MBIM_DATA_CLASS)
46 1.1 khorben */
47 1.1 khorben #define MBIM_DATACLASS_NONE 0x00000000
48 1.1 khorben #define MBIM_DATACLASS_GPRS 0x00000001
49 1.1 khorben #define MBIM_DATACLASS_EDGE 0x00000002
50 1.1 khorben #define MBIM_DATACLASS_UMTS 0x00000004
51 1.1 khorben #define MBIM_DATACLASS_HSDPA 0x00000008
52 1.1 khorben #define MBIM_DATACLASS_HSUPA 0x00000010
53 1.1 khorben #define MBIM_DATACLASS_LTE 0x00000020
54 1.1 khorben #define MBIM_DATACLASS_1XRTT 0x00010000
55 1.1 khorben #define MBIM_DATACLASS_1XEVDO 0x00020000
56 1.1 khorben #define MBIM_DATACLASS_1XEVDO_REV_A 0x00040000
57 1.1 khorben #define MBIM_DATACLASS_1XEVDV 0x00080000
58 1.1 khorben #define MBIM_DATACLASS_3XRTT 0x00100000
59 1.1 khorben #define MBIM_DATACLASS_1XEVDO_REV_B 0x00200000
60 1.1 khorben #define MBIM_DATACLASS_UMB 0x00400000
61 1.1 khorben #define MBIM_DATACLASS_CUSTOM 0x80000000
62 1.1 khorben
63 1.1 khorben /*
64 1.1 khorben * Cell classes mask (MBIM_CELLULAR_CLASS)
65 1.1 khorben */
66 1.1 khorben #define MBIM_CELLCLASS_GSM 0x00000001
67 1.1 khorben #define MBIM_CELLCLASS_CDMA 0x00000002
68 1.1 khorben
69 1.1 khorben /*
70 1.1 khorben * UUIDs
71 1.1 khorben */
72 1.1 khorben #define MBIM_UUID_LEN 16
73 1.1 khorben
74 1.1 khorben #define MBIM_UUID_BASIC_CONNECT { \
75 1.1 khorben 0xa2, 0x89, 0xcc, 0x33, 0xbc, 0xbb, 0x8b, 0x4f, \
76 1.1 khorben 0xb6, 0xb0, 0x13, 0x3e, 0xc2, 0xaa, 0xe6, 0xdf \
77 1.1 khorben }
78 1.1 khorben
79 1.1 khorben #define MBIM_UUID_CONTEXT_INTERNET { \
80 1.1 khorben 0x7e, 0x5e, 0x2a, 0x7e, 0x4e, 0x6f, 0x72, 0x72, \
81 1.1 khorben 0x73, 0x6b, 0x65, 0x6e, 0x7e, 0x5e, 0x2a, 0x7e \
82 1.1 khorben }
83 1.1 khorben
84 1.1 khorben #define MBIM_UUID_CONTEXT_VPN { \
85 1.1 khorben 0x9b, 0x9f, 0x7b, 0xbe, 0x89, 0x52, 0x44, 0xb7, \
86 1.1 khorben 0x83, 0xac, 0xca, 0x41, 0x31, 0x8d, 0xf7, 0xa0 \
87 1.1 khorben }
88 1.1 khorben
89 1.1 khorben #define MBIM_UUID_QMI_MBIM { \
90 1.1 khorben 0xd1, 0xa3, 0x0b, 0xc2, 0xf9, 0x7a, 0x6e, 0x43, \
91 1.1 khorben 0xbf, 0x65, 0xc7, 0xe2, 0x4f, 0xb0, 0xf0, 0xd3 \
92 1.1 khorben }
93 1.1 khorben
94 1.1 khorben #define MBIM_CTRLMSG_MINLEN 64
95 1.1 khorben #define MBIM_CTRLMSG_MAXLEN (4 * 1204)
96 1.1 khorben
97 1.1 khorben #define MBIM_MAXSEGSZ_MINVAL (2 * 1024)
98 1.1 khorben
99 1.1 khorben /*
100 1.1 khorben * Control messages (host to function)
101 1.1 khorben */
102 1.1 khorben #define MBIM_OPEN_MSG 1U
103 1.1 khorben #define MBIM_CLOSE_MSG 2U
104 1.1 khorben #define MBIM_COMMAND_MSG 3U
105 1.1 khorben #define MBIM_HOST_ERROR_MSG 4U
106 1.1 khorben
107 1.1 khorben /*
108 1.1 khorben * Control messages (function to host)
109 1.1 khorben */
110 1.1 khorben #define MBIM_OPEN_DONE 0x80000001U
111 1.1 khorben #define MBIM_CLOSE_DONE 0x80000002U
112 1.1 khorben #define MBIM_COMMAND_DONE 0x80000003U
113 1.1 khorben #define MBIM_FUNCTION_ERROR_MSG 0x80000004U
114 1.1 khorben #define MBIM_INDICATE_STATUS_MSG 0x80000007U
115 1.1 khorben
116 1.1 khorben /*
117 1.1 khorben * Generic status codes
118 1.1 khorben */
119 1.1 khorben #define MBIM_STATUS_SUCCESS 0
120 1.1 khorben #define MBIM_STATUS_BUSY 1
121 1.1 khorben #define MBIM_STATUS_FAILURE 2
122 1.1 khorben #define MBIM_STATUS_SIM_NOT_INSERTED 3
123 1.1 khorben #define MBIM_STATUS_BAD_SIM 4
124 1.1 khorben #define MBIM_STATUS_PIN_REQUIRED 5
125 1.1 khorben #define MBIM_STATUS_PIN_DISABLED 6
126 1.1 khorben #define MBIM_STATUS_NOT_REGISTERED 7
127 1.1 khorben #define MBIM_STATUS_PROVIDERS_NOT_FOUND 8
128 1.1 khorben #define MBIM_STATUS_NO_DEVICE_SUPPORT 9
129 1.1 khorben #define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10
130 1.1 khorben #define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11
131 1.1 khorben #define MBIM_STATUS_PACKET_SERVICE_DETACHED 12
132 1.1 khorben #define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13
133 1.1 khorben #define MBIM_STATUS_NOT_INITIALIZED 14
134 1.1 khorben #define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15
135 1.1 khorben #define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16
136 1.1 khorben #define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17
137 1.1 khorben #define MBIM_STATUS_INVALID_ACCESS_STRING 18
138 1.1 khorben #define MBIM_STATUS_INVALID_USER_NAME_PWD 19
139 1.1 khorben #define MBIM_STATUS_RADIO_POWER_OFF 20
140 1.1 khorben #define MBIM_STATUS_INVALID_PARAMETERS 21
141 1.1 khorben #define MBIM_STATUS_READ_FAILURE 22
142 1.1 khorben #define MBIM_STATUS_WRITE_FAILURE 23
143 1.1 khorben #define MBIM_STATUS_NO_PHONEBOOK 25
144 1.1 khorben #define MBIM_STATUS_PARAMETER_TOO_LONG 26
145 1.1 khorben #define MBIM_STATUS_STK_BUSY 27
146 1.1 khorben #define MBIM_STATUS_OPERATION_NOT_ALLOWED 28
147 1.1 khorben #define MBIM_STATUS_MEMORY_FAILURE 29
148 1.1 khorben #define MBIM_STATUS_INVALID_MEMORY_INDEX 30
149 1.1 khorben #define MBIM_STATUS_MEMORY_FULL 31
150 1.1 khorben #define MBIM_STATUS_FILTER_NOT_SUPPORTED 32
151 1.1 khorben #define MBIM_STATUS_DSS_INSTANCE_LIMIT 33
152 1.1 khorben #define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34
153 1.1 khorben #define MBIM_STATUS_AUTH_INCORRECT_AUTN 35
154 1.1 khorben #define MBIM_STATUS_AUTH_SYNC_FAILURE 36
155 1.1 khorben #define MBIM_STATUS_AUTH_AMF_NOT_SET 37
156 1.1 khorben #define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38
157 1.1 khorben #define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100
158 1.1 khorben #define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101
159 1.1 khorben #define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102
160 1.1 khorben #define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103
161 1.1 khorben #define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104
162 1.1 khorben
163 1.1 khorben /*
164 1.1 khorben * Message formats
165 1.1 khorben */
166 1.1 khorben struct mbim_msghdr {
167 1.1 khorben /* Msg header */
168 1.1 khorben uint32_t type; /* message type */
169 1.1 khorben uint32_t len; /* message length */
170 1.1 khorben uint32_t tid; /* transaction id */
171 1.1 khorben } __packed;
172 1.1 khorben
173 1.1 khorben struct mbim_fraghdr {
174 1.1 khorben uint32_t nfrag; /* total # of fragments */
175 1.1 khorben uint32_t currfrag; /* current fragment */
176 1.1 khorben } __packed;
177 1.1 khorben
178 1.1 khorben struct mbim_fragmented_msg_hdr {
179 1.1 khorben struct mbim_msghdr hdr;
180 1.1 khorben struct mbim_fraghdr frag;
181 1.1 khorben } __packed;
182 1.1 khorben
183 1.1 khorben struct mbim_h2f_openmsg {
184 1.1 khorben struct mbim_msghdr hdr;
185 1.1 khorben uint32_t maxlen;
186 1.1 khorben } __packed;
187 1.1 khorben
188 1.1 khorben struct mbim_h2f_closemsg {
189 1.1 khorben struct mbim_msghdr hdr;
190 1.1 khorben } __packed;
191 1.1 khorben
192 1.1 khorben struct mbim_h2f_cmd {
193 1.1 khorben struct mbim_msghdr hdr;
194 1.1 khorben struct mbim_fraghdr frag;
195 1.1 khorben uint8_t devid[MBIM_UUID_LEN];
196 1.1 khorben uint32_t cid; /* command id */
197 1.1 khorben #define MBIM_CMDOP_QRY 0
198 1.1 khorben #define MBIM_CMDOP_SET 1
199 1.1 khorben uint32_t op;
200 1.1 khorben uint32_t infolen;
201 1.1 khorben uint8_t info[];
202 1.1 khorben } __packed;
203 1.1 khorben
204 1.1 khorben struct mbim_f2h_indicate_status {
205 1.1 khorben struct mbim_msghdr hdr;
206 1.1 khorben struct mbim_fraghdr frag;
207 1.1 khorben uint8_t devid[MBIM_UUID_LEN];
208 1.1 khorben uint32_t cid; /* command id */
209 1.1 khorben uint32_t infolen;
210 1.1 khorben uint8_t info[];
211 1.1 khorben } __packed;
212 1.1 khorben
213 1.1 khorben struct mbim_f2h_hosterr {
214 1.1 khorben struct mbim_msghdr hdr;
215 1.1 khorben
216 1.1 khorben #define MBIM_ERROR_TIMEOUT_FRAGMENT 1
217 1.1 khorben #define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2
218 1.1 khorben #define MBIM_ERROR_LENGTH_MISMATCH 3
219 1.1 khorben #define MBIM_ERROR_DUPLICATED_TID 4
220 1.1 khorben #define MBIM_ERROR_NOT_OPENED 5
221 1.1 khorben #define MBIM_ERROR_UNKNOWN 6
222 1.1 khorben #define MBIM_ERROR_CANCEL 7
223 1.1 khorben #define MBIM_ERROR_MAX_TRANSFER 8
224 1.1 khorben uint32_t err;
225 1.1 khorben } __packed;
226 1.1 khorben
227 1.1 khorben struct mbim_f2h_openclosedone {
228 1.1 khorben struct mbim_msghdr hdr;
229 1.1 khorben int32_t status;
230 1.1 khorben } __packed;
231 1.1 khorben
232 1.1 khorben struct mbim_f2h_cmddone {
233 1.1 khorben struct mbim_msghdr hdr;
234 1.1 khorben struct mbim_fraghdr frag;
235 1.1 khorben uint8_t devid[MBIM_UUID_LEN];
236 1.1 khorben uint32_t cid; /* command id */
237 1.1 khorben int32_t status;
238 1.1 khorben uint32_t infolen;
239 1.1 khorben uint8_t info[];
240 1.1 khorben } __packed;
241 1.1 khorben
242 1.1 khorben /*
243 1.1 khorben * Messages and commands for MBIM_UUID_BASIC_CONNECT
244 1.1 khorben */
245 1.1 khorben #define MBIM_CID_DEVICE_CAPS 1
246 1.1 khorben #define MBIM_CID_SUBSCRIBER_READY_STATUS 2
247 1.1 khorben #define MBIM_CID_RADIO_STATE 3
248 1.1 khorben #define MBIM_CID_PIN 4
249 1.1 khorben #define MBIM_CID_PIN_LIST 5
250 1.1 khorben #define MBIM_CID_HOME_PROVIDER 6
251 1.1 khorben #define MBIM_CID_PREFERRED_PROVIDERS 7
252 1.1 khorben #define MBIM_CID_VISIBLE_PROVIDERS 8
253 1.1 khorben #define MBIM_CID_REGISTER_STATE 9
254 1.1 khorben #define MBIM_CID_PACKET_SERVICE 10
255 1.1 khorben #define MBIM_CID_SIGNAL_STATE 11
256 1.1 khorben #define MBIM_CID_CONNECT 12
257 1.1 khorben #define MBIM_CID_PROVISIONED_CONTEXTS 13
258 1.1 khorben #define MBIM_CID_SERVICE_ACTIVATION 14
259 1.1 khorben #define MBIM_CID_IP_CONFIGURATION 15
260 1.1 khorben #define MBIM_CID_DEVICE_SERVICES 16
261 1.1 khorben #define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19
262 1.1 khorben #define MBIM_CID_PACKET_STATISTICS 20
263 1.1 khorben #define MBIM_CID_NETWORK_IDLE_HINT 21
264 1.1 khorben #define MBIM_CID_EMERGENCY_MODE 22
265 1.1 khorben #define MBIM_CID_IP_PACKET_FILTERS 23
266 1.1 khorben #define MBIM_CID_MULTICARRIER_PROVIDERS 24
267 1.1 khorben
268 1.1 khorben struct mbim_cid_subscriber_ready_info {
269 1.1 khorben #define MBIM_SIMSTATE_NOTINITIALIZED 0
270 1.1 khorben #define MBIM_SIMSTATE_INITIALIZED 1
271 1.1 khorben #define MBIM_SIMSTATE_NOTINSERTED 2
272 1.1 khorben #define MBIM_SIMSTATE_BADSIM 3
273 1.1 khorben #define MBIM_SIMSTATE_FAILURE 4
274 1.1 khorben #define MBIM_SIMSTATE_NOTACTIVATED 5
275 1.1 khorben #define MBIM_SIMSTATE_LOCKED 6
276 1.1 khorben uint32_t ready;
277 1.1 khorben
278 1.1 khorben uint32_t sid_offs;
279 1.1 khorben uint32_t sid_size;
280 1.1 khorben
281 1.1 khorben uint32_t icc_offs;
282 1.1 khorben uint32_t icc_size;
283 1.1 khorben
284 1.1 khorben #define MBIM_SIMUNIQEID_NONE 0
285 1.1 khorben #define MBIM_SIMUNIQEID_PROTECT 1
286 1.1 khorben uint32_t info;
287 1.1 khorben
288 1.1 khorben uint32_t no_pn;
289 1.1 khorben struct {
290 1.1 khorben uint32_t offs;
291 1.1 khorben uint32_t size;
292 1.1 khorben }
293 1.1 khorben pn[];
294 1.1 khorben } __packed;
295 1.1 khorben
296 1.1 khorben struct mbim_cid_radio_state {
297 1.1 khorben #define MBIM_RADIO_STATE_OFF 0
298 1.1 khorben #define MBIM_RADIO_STATE_ON 1
299 1.1 khorben uint32_t state;
300 1.1 khorben } __packed;
301 1.1 khorben
302 1.1 khorben struct mbim_cid_radio_state_info {
303 1.1 khorben uint32_t hw_state;
304 1.1 khorben uint32_t sw_state;
305 1.1 khorben } __packed;
306 1.1 khorben
307 1.1 khorben struct mbim_cid_pin {
308 1.1 khorben #define MBIM_PIN_TYPE_NONE 0
309 1.1 khorben #define MBIM_PIN_TYPE_CUSTOM 1
310 1.1 khorben #define MBIM_PIN_TYPE_PIN1 2
311 1.1 khorben #define MBIM_PIN_TYPE_PIN2 3
312 1.1 khorben #define MBIM_PIN_TYPE_DEV_SIM_PIN 4
313 1.1 khorben #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5
314 1.1 khorben #define MBIM_PIN_TYPE_NETWORK_PIN 6
315 1.1 khorben #define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7
316 1.1 khorben #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8
317 1.1 khorben #define MBIM_PIN_TYPE_CORPORATE_PIN 9
318 1.1 khorben #define MBIM_PIN_TYPE_SUBSIDY_LOCK 10
319 1.1 khorben #define MBIM_PIN_TYPE_PUK1 11
320 1.1 khorben #define MBIM_PIN_TYPE_PUK2 12
321 1.1 khorben #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13
322 1.1 khorben #define MBIM_PIN_TYPE_NETWORK_PUK 14
323 1.1 khorben #define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15
324 1.1 khorben #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16
325 1.1 khorben #define MBIM_PIN_TYPE_CORPORATE_PUK 17
326 1.1 khorben uint32_t type;
327 1.1 khorben
328 1.1 khorben #define MBIM_PIN_OP_ENTER 0
329 1.1 khorben #define MBIM_PIN_OP_ENABLE 1
330 1.1 khorben #define MBIM_PIN_OP_DISABLE 2
331 1.1 khorben #define MBIM_PIN_OP_CHANGE 3
332 1.1 khorben uint32_t op;
333 1.1 khorben uint32_t pin_offs;
334 1.1 khorben uint32_t pin_size;
335 1.1 khorben uint32_t newpin_offs;
336 1.1 khorben uint32_t newpin_size;
337 1.1 khorben #define MBIM_PIN_MAXLEN 32
338 1.1 khorben uint8_t data[2 * MBIM_PIN_MAXLEN];
339 1.1 khorben } __packed;
340 1.1 khorben
341 1.1 khorben struct mbim_cid_pin_info {
342 1.1 khorben uint32_t type;
343 1.1 khorben
344 1.1 khorben #define MBIM_PIN_STATE_UNLOCKED 0
345 1.1 khorben #define MBIM_PIN_STATE_LOCKED 1
346 1.1 khorben uint32_t state;
347 1.1 khorben uint32_t remaining_attempts;
348 1.1 khorben } __packed;
349 1.1 khorben
350 1.1 khorben struct mbim_cid_pin_list_info {
351 1.1 khorben struct mbim_pin_desc {
352 1.1 khorben
353 1.1 khorben #define MBIM_PINMODE_NOTSUPPORTED 0
354 1.1 khorben #define MBIM_PINMODE_ENABLED 1
355 1.1 khorben #define MBIM_PINMODE_DISABLED 2
356 1.1 khorben uint32_t mode;
357 1.1 khorben
358 1.1 khorben #define MBIM_PINFORMAT_UNKNOWN 0
359 1.1 khorben #define MBIM_PINFORMAT_NUMERIC 1
360 1.1 khorben #define MBIM_PINFORMAT_ALPHANUMERIC 2
361 1.1 khorben uint32_t format;
362 1.1 khorben
363 1.1 khorben uint32_t minlen;
364 1.1 khorben uint32_t maxlen;
365 1.1 khorben }
366 1.1 khorben pin1,
367 1.1 khorben pin2,
368 1.1 khorben dev_sim_pin,
369 1.1 khorben first_dev_sim_pin,
370 1.1 khorben net_pin,
371 1.1 khorben net_sub_pin,
372 1.1 khorben svp_pin,
373 1.1 khorben corp_pin,
374 1.1 khorben subsidy_lock,
375 1.1 khorben custom;
376 1.1 khorben } __packed;
377 1.1 khorben
378 1.1 khorben struct mbim_cid_device_caps {
379 1.1 khorben #define MBIM_DEVTYPE_UNKNOWN 0
380 1.1 khorben #define MBIM_DEVTYPE_EMBEDDED 1
381 1.1 khorben #define MBIM_DEVTYPE_REMOVABLE 2
382 1.1 khorben #define MBIM_DEVTYPE_REMOTE 3
383 1.1 khorben uint32_t devtype;
384 1.1 khorben
385 1.1 khorben uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */
386 1.1 khorben uint32_t voiceclass;
387 1.1 khorben uint32_t simclass;
388 1.1 khorben uint32_t dataclass; /* values: MBIM_DATA_CLASS */
389 1.1 khorben uint32_t smscaps;
390 1.1 khorben uint32_t cntrlcaps;
391 1.1 khorben uint32_t max_sessions;
392 1.1 khorben
393 1.1 khorben uint32_t custdataclass_offs;
394 1.1 khorben uint32_t custdataclass_size;
395 1.1 khorben
396 1.1 khorben uint32_t devid_offs;
397 1.1 khorben uint32_t devid_size;
398 1.1 khorben
399 1.1 khorben uint32_t fwinfo_offs;
400 1.1 khorben uint32_t fwinfo_size;
401 1.1 khorben
402 1.1 khorben uint32_t hwinfo_offs;
403 1.1 khorben uint32_t hwinfo_size;
404 1.1 khorben
405 1.1 khorben uint32_t data[];
406 1.1 khorben } __packed;
407 1.1 khorben
408 1.1 khorben struct mbim_cid_registration_state {
409 1.1 khorben uint32_t provid_offs;
410 1.1 khorben uint32_t provid_size;
411 1.1 khorben
412 1.1 khorben #define MBIM_REGACTION_AUTOMATIC 0
413 1.1 khorben #define MBIM_REGACTION_MANUAL 1
414 1.1 khorben uint32_t regaction;
415 1.1 khorben uint32_t data_class;
416 1.1 khorben
417 1.1 khorben uint32_t data[];
418 1.1 khorben } __packed;
419 1.1 khorben
420 1.1 khorben struct mbim_cid_registration_state_info {
421 1.1 khorben uint32_t nwerror;
422 1.1 khorben
423 1.1 khorben uint32_t regstate; /* values: MBIM_REGISTER_STATE */
424 1.1 khorben
425 1.1 khorben #define MBIM_REGMODE_UNKNOWN 0
426 1.1 khorben #define MBIM_REGMODE_AUTOMATIC 1
427 1.1 khorben #define MBIM_REGMODE_MANUAL 2
428 1.1 khorben uint32_t regmode;
429 1.1 khorben
430 1.1 khorben uint32_t availclasses; /* values: MBIM_DATA_CLASS */
431 1.1 khorben uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */
432 1.1 khorben
433 1.1 khorben uint32_t provid_offs;
434 1.1 khorben uint32_t provid_size;
435 1.1 khorben
436 1.1 khorben uint32_t provname_offs;
437 1.1 khorben uint32_t provname_size;
438 1.1 khorben
439 1.1 khorben uint32_t roamingtxt_offs;
440 1.1 khorben uint32_t roamingtxt_size;
441 1.1 khorben
442 1.1 khorben #define MBIM_REGFLAGS_NONE 0
443 1.1 khorben #define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1
444 1.1 khorben #define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2
445 1.1 khorben uint32_t regflag;
446 1.1 khorben
447 1.1 khorben uint32_t data[];
448 1.1 khorben } __packed;
449 1.1 khorben
450 1.1 khorben struct mbim_cid_packet_service {
451 1.1 khorben #define MBIM_PKTSERVICE_ACTION_ATTACH 0
452 1.1 khorben #define MBIM_PKTSERVICE_ACTION_DETACH 1
453 1.1 khorben uint32_t action;
454 1.1 khorben } __packed;
455 1.1 khorben
456 1.1 khorben struct mbim_cid_packet_service_info {
457 1.1 khorben uint32_t nwerror;
458 1.1 khorben
459 1.1 khorben #define MBIM_PKTSERVICE_STATE_UNKNOWN 0
460 1.1 khorben #define MBIM_PKTSERVICE_STATE_ATTACHING 1
461 1.1 khorben #define MBIM_PKTSERVICE_STATE_ATTACHED 2
462 1.1 khorben #define MBIM_PKTSERVICE_STATE_DETACHING 3
463 1.1 khorben #define MBIM_PKTSERVICE_STATE_DETACHED 4
464 1.1 khorben uint32_t state;
465 1.1 khorben
466 1.1 khorben uint32_t highest_dataclass;
467 1.1 khorben uint64_t uplink_speed;
468 1.1 khorben uint64_t downlink_speed;
469 1.1 khorben } __packed;
470 1.1 khorben
471 1.1 khorben struct mbim_cid_signal_state {
472 1.1 khorben uint32_t rssi;
473 1.1 khorben uint32_t err_rate;
474 1.1 khorben uint32_t ss_intvl;
475 1.1 khorben uint32_t rssi_thr;
476 1.1 khorben uint32_t err_thr;
477 1.1 khorben } __packed;
478 1.1 khorben
479 1.1 khorben struct mbim_cid_connect {
480 1.1 khorben uint32_t sessionid;
481 1.1 khorben
482 1.1 khorben #define MBIM_CONNECT_DEACTIVATE 0
483 1.1 khorben #define MBIM_CONNECT_ACTIVATE 1
484 1.1 khorben uint32_t command;
485 1.1 khorben
486 1.1 khorben #define MBIM_ACCESS_MAXLEN 200
487 1.1 khorben uint32_t access_offs;
488 1.1 khorben uint32_t access_size;
489 1.1 khorben
490 1.1 khorben #define MBIM_USER_MAXLEN 510
491 1.1 khorben uint32_t user_offs;
492 1.1 khorben uint32_t user_size;
493 1.1 khorben
494 1.1 khorben #define MBIM_PASSWD_MAXLEN 510
495 1.1 khorben uint32_t passwd_offs;
496 1.1 khorben uint32_t passwd_size;
497 1.1 khorben
498 1.1 khorben #define MBIM_COMPRESSION_NONE 0
499 1.1 khorben #define MBIM_COMPRESSION_ENABLE 1
500 1.1 khorben uint32_t compression;
501 1.1 khorben
502 1.1 khorben #define MBIM_AUTHPROT_NONE 0
503 1.1 khorben #define MBIM_AUTHPROT_PAP 1
504 1.1 khorben #define MBIM_AUTHPROT_CHAP 2
505 1.1 khorben #define MBIM_AUTHPROT_MSCHAP 3
506 1.1 khorben uint32_t authprot;
507 1.1 khorben
508 1.1 khorben #define MBIM_CONTEXT_IPTYPE_DEFAULT 0
509 1.1 khorben #define MBIM_CONTEXT_IPTYPE_IPV4 1
510 1.1 khorben #define MBIM_CONTEXT_IPTYPE_IPV6 2
511 1.1 khorben #define MBIM_CONTEXT_IPTYPE_IPV4V6 3
512 1.1 khorben #define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4
513 1.1 khorben uint32_t iptype;
514 1.1 khorben
515 1.1 khorben uint8_t context[MBIM_UUID_LEN];
516 1.1 khorben
517 1.1 khorben uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN +
518 1.1 khorben MBIM_PASSWD_MAXLEN];
519 1.1 khorben
520 1.1 khorben } __packed;
521 1.1 khorben
522 1.1 khorben struct mbim_cid_connect_info {
523 1.1 khorben uint32_t sessionid;
524 1.1 khorben
525 1.1 khorben #define MBIM_ACTIVATION_STATE_UNKNOWN 0
526 1.1 khorben #define MBIM_ACTIVATION_STATE_ACTIVATED 1
527 1.1 khorben #define MBIM_ACTIVATION_STATE_ACTIVATING 2
528 1.1 khorben #define MBIM_ACTIVATION_STATE_DEACTIVATED 3
529 1.1 khorben #define MBIM_ACTIVATION_STATE_DEACTIVATING 4
530 1.1 khorben uint32_t activation;
531 1.1 khorben
532 1.1 khorben uint32_t voice;
533 1.1 khorben uint32_t iptype;
534 1.1 khorben uint8_t context[MBIM_UUID_LEN];
535 1.1 khorben uint32_t nwerror;
536 1.1 khorben } __packed;
537 1.1 khorben
538 1.1 khorben struct mbim_cid_ipv4_element {
539 1.1 khorben uint32_t prefixlen;
540 1.1 khorben uint32_t addr;
541 1.1 khorben } __packed;
542 1.1 khorben
543 1.1 khorben struct mbim_cid_ipv6_element {
544 1.1 khorben uint32_t prefixlen;
545 1.1 khorben uint8_t addr[16];
546 1.1 khorben } __packed;
547 1.1 khorben
548 1.1 khorben struct mbim_cid_ip_configuration_info {
549 1.1 khorben uint32_t sessionid;
550 1.1 khorben
551 1.1 khorben #define MBIM_IPCONF_HAS_ADDRINFO 0x0001
552 1.1 khorben #define MBIM_IPCONF_HAS_GWINFO 0x0002
553 1.1 khorben #define MBIM_IPCONF_HAS_DNSINFO 0x0004
554 1.1 khorben #define MBIM_IPCONF_HAS_MTUINFO 0x0008
555 1.1 khorben uint32_t ipv4_available;
556 1.1 khorben uint32_t ipv6_available;
557 1.1 khorben
558 1.1 khorben uint32_t ipv4_naddr;
559 1.1 khorben uint32_t ipv4_addroffs;
560 1.1 khorben uint32_t ipv6_naddr;
561 1.1 khorben uint32_t ipv6_addroffs;
562 1.1 khorben
563 1.1 khorben uint32_t ipv4_gwoffs;
564 1.1 khorben uint32_t ipv6_gwoffs;
565 1.1 khorben
566 1.1 khorben uint32_t ipv4_ndnssrv;
567 1.1 khorben uint32_t ipv4_dnssrvoffs;
568 1.1 khorben uint32_t ipv6_ndnssrv;
569 1.1 khorben uint32_t ipv6_dnssrvoffs;
570 1.1 khorben
571 1.1 khorben uint32_t ipv4_mtu;
572 1.1 khorben uint32_t ipv6_mtu;
573 1.1 khorben
574 1.1 khorben uint32_t data[];
575 1.1 khorben } __packed;
576 1.1 khorben
577 1.1 khorben struct mbim_cid_packet_statistics_info {
578 1.1 khorben uint32_t in_discards;
579 1.1 khorben uint32_t in_errors;
580 1.1 khorben uint64_t in_octets;
581 1.1 khorben uint64_t in_packets;
582 1.1 khorben uint64_t out_octets;
583 1.1 khorben uint64_t out_packets;
584 1.1 khorben uint32_t out_errors;
585 1.1 khorben uint32_t out_discards;
586 1.1 khorben } __packed;
587 1.1 khorben
588 1.1 khorben
589 1.1 khorben #ifdef _KERNEL
590 1.1 khorben
591 1.1 khorben struct mbim_descriptor {
592 1.1 khorben uByte bLength;
593 1.1 khorben uByte bDescriptorType;
594 1.1 khorben uByte bDescriptorSubtype;
595 1.1 khorben #define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f)
596 1.1 khorben #define MBIM_VER_MINOR(v) ((v) & 0x0f)
597 1.1 khorben uWord bcdMBIMVersion;
598 1.1 khorben uWord wMaxControlMessage;
599 1.1 khorben uByte bNumberFilters;
600 1.1 khorben uByte bMaxFilterSize;
601 1.1 khorben uWord wMaxSegmentSize;
602 1.1 khorben uByte bmNetworkCapabilities;
603 1.1 khorben } __packed;
604 1.1 khorben
605 1.1 khorben /*
606 1.1 khorben * NCM Parameters
607 1.1 khorben */
608 1.1 khorben #define NCM_GET_NTB_PARAMETERS 0x80
609 1.1 khorben
610 1.1 khorben struct ncm_ntb_parameters {
611 1.1 khorben uWord wLength;
612 1.1 khorben uWord bmNtbFormatsSupported;
613 1.1 khorben #define NCM_FORMAT_NTB16 0x0001
614 1.1 khorben #define NCM_FORMAT_NTB32 0x0002
615 1.1 khorben uDWord dwNtbInMaxSize;
616 1.1 khorben uWord wNtbInDivisor;
617 1.1 khorben uWord wNtbInPayloadRemainder;
618 1.1 khorben uWord wNtbInAlignment;
619 1.1 khorben uWord wReserved1;
620 1.1 khorben uDWord dwNtbOutMaxSize;
621 1.1 khorben uWord wNtbOutDivisor;
622 1.1 khorben uWord wNtbOutPayloadRemainder;
623 1.1 khorben uWord wNtbOutAlignment;
624 1.1 khorben uWord wNtbOutMaxDatagrams;
625 1.1 khorben } __packed;
626 1.1 khorben
627 1.1 khorben /*
628 1.1 khorben * NCM Encoding
629 1.1 khorben */
630 1.1 khorben #define MBIM_HDR16_LEN \
631 1.1 khorben (sizeof(struct ncm_header16) + sizeof(struct ncm_pointer16))
632 1.1 khorben #define MBIM_HDR32_LEN \
633 1.1 khorben (sizeof(struct ncm_header32) + sizeof(struct ncm_pointer32))
634 1.1 khorben
635 1.1 khorben struct ncm_header16 {
636 1.1 khorben #define NCM_HDR16_SIG 0x484d434e
637 1.1 khorben uDWord dwSignature;
638 1.1 khorben uWord wHeaderLength;
639 1.1 khorben uWord wSequence;
640 1.1 khorben uWord wBlockLength;
641 1.1 khorben uWord wNdpIndex;
642 1.1 khorben } __packed;
643 1.1 khorben
644 1.1 khorben struct ncm_header32 {
645 1.1 khorben #define NCM_HDR32_SIG 0x686d636e
646 1.1 khorben uDWord dwSignature;
647 1.1 khorben uWord wHeaderLength;
648 1.1 khorben uWord wSequence;
649 1.1 khorben uDWord dwBlockLength;
650 1.1 khorben uDWord dwNdpIndex;
651 1.1 khorben } __packed;
652 1.1 khorben
653 1.1 khorben
654 1.1 khorben #define MBIM_NCM_NTH_SIDSHIFT 24
655 1.1 khorben #define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff)
656 1.1 khorben
657 1.1 khorben struct ncm_pointer16_dgram {
658 1.1 khorben uWord wDatagramIndex;
659 1.1 khorben uWord wDatagramLen;
660 1.1 khorben } __packed;
661 1.1 khorben
662 1.1 khorben struct ncm_pointer16 {
663 1.1 khorben #define MBIM_NCM_NTH16_IPS 0x00535049
664 1.1 khorben #define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS)
665 1.1 khorben #define MBIM_NCM_NTH16_SIG(s) \
666 1.1 khorben ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS)
667 1.1 khorben uDWord dwSignature;
668 1.1 khorben uWord wLength;
669 1.1 khorben uWord wNextNdpIndex;
670 1.1 khorben
671 1.1 khorben /* Minimum is two datagrams, but can be more */
672 1.1 khorben struct ncm_pointer16_dgram dgram[2];
673 1.1 khorben } __packed;
674 1.1 khorben
675 1.1 khorben struct ncm_pointer32_dgram {
676 1.1 khorben uDWord dwDatagramIndex;
677 1.1 khorben uDWord dwDatagramLen;
678 1.1 khorben } __packed;
679 1.1 khorben
680 1.1 khorben struct ncm_pointer32 {
681 1.1 khorben #define MBIM_NCM_NTH32_IPS 0x00737069
682 1.1 khorben #define MBIM_NCM_NTH32_ISISG(s) \
683 1.1 khorben (((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS)
684 1.1 khorben #define MBIM_NCM_NTH32_SIG(s) \
685 1.1 khorben ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS)
686 1.1 khorben uDWord dwSignature;
687 1.1 khorben uWord wLength;
688 1.1 khorben uWord wReserved6;
689 1.1 khorben uDWord dwNextNdpIndex;
690 1.1 khorben uDWord dwReserved12;
691 1.1 khorben
692 1.1 khorben /* Minimum is two datagrams, but can be more */
693 1.1 khorben struct ncm_pointer32_dgram dgram[2];
694 1.1 khorben } __packed;
695 1.1 khorben
696 1.1 khorben #endif /* _KERNEL */
697 1.1 khorben
698 1.1 khorben #endif /* _MBIM_H_ */
699