1 /* $OpenBSD: mbim.h,v 1.6 2021/03/30 15:59:04 patrick 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 * https://www.usb.org/sites/default/files/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 #define NCM_GET_NTB_FORMAT 0x83 /* Current format returned as uWord */ 609 #define NCM_SET_NTB_FORMAT 0x84 /* Desired format is in wValue */ 610 611 #define NCM_FORMAT_NTB16 0x00 612 #define NCM_FORMAT_NTB32 0x01 613 614 struct ncm_ntb_parameters { 615 uWord wLength; 616 uWord bmNtbFormatsSupported; 617 #define NCM_FORMAT_NTB16_MASK (1U << NCM_FORMAT_NTB16) 618 #define NCM_FORMAT_NTB32_MASK (1U << NCM_FORMAT_NTB32) 619 uDWord dwNtbInMaxSize; 620 uWord wNdpInDivisor; 621 uWord wNdpInPayloadRemainder; 622 uWord wNdpInAlignment; 623 uWord wReserved1; 624 uDWord dwNtbOutMaxSize; 625 uWord wNdpOutDivisor; 626 uWord wNdpOutPayloadRemainder; 627 uWord wNdpOutAlignment; 628 uWord wNtbOutMaxDatagrams; 629 } __packed; 630 631 /* 632 * NCM Encoding 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[1]; 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[1]; 693 } __packed; 694 695 #endif /* _KERNEL */ 696 697 #endif /* _MBIM_H_ */ 698