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