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