1 /* $OpenBSD: mbim.h,v 1.1 2016/06/15 19:39:34 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_CTRLMSG_MINLEN 64 89 #define MBIM_CTRLMSG_MAXLEN (4 * 1204) 90 91 #define MBIM_MAXSEGSZ_MINVAL (2 * 1024) 92 93 /* 94 * Control messages (host to function) 95 */ 96 #define MBIM_OPEN_MSG 1U 97 #define MBIM_CLOSE_MSG 2U 98 #define MBIM_COMMAND_MSG 3U 99 #define MBIM_HOST_ERROR_MSG 4U 100 101 /* 102 * Control messages (function to host) 103 */ 104 #define MBIM_OPEN_DONE 0x80000001U 105 #define MBIM_CLOSE_DONE 0x80000002U 106 #define MBIM_COMMAND_DONE 0x80000003U 107 #define MBIM_FUNCTION_ERROR_MSG 0x80000004U 108 #define MBIM_INDICATE_STATUS_MSG 0x80000007U 109 110 /* 111 * Generic status codes 112 */ 113 #define MBIM_STATUS_SUCCESS 0 114 #define MBIM_STATUS_BUSY 1 115 #define MBIM_STATUS_FAILURE 2 116 #define MBIM_STATUS_SIM_NOT_INSERTED 3 117 #define MBIM_STATUS_BAD_SIM 4 118 #define MBIM_STATUS_PIN_REQUIRED 5 119 #define MBIM_STATUS_PIN_DISABLED 6 120 #define MBIM_STATUS_NOT_REGISTERED 7 121 #define MBIM_STATUS_PROVIDERS_NOT_FOUND 8 122 #define MBIM_STATUS_NO_DEVICE_SUPPORT 9 123 #define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10 124 #define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11 125 #define MBIM_STATUS_PACKET_SERVICE_DETACHED 12 126 #define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13 127 #define MBIM_STATUS_NOT_INITIALIZED 14 128 #define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15 129 #define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16 130 #define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17 131 #define MBIM_STATUS_INVALID_ACCESS_STRING 18 132 #define MBIM_STATUS_INVALID_USER_NAME_PWD 19 133 #define MBIM_STATUS_RADIO_POWER_OFF 20 134 #define MBIM_STATUS_INVALID_PARAMETERS 21 135 #define MBIM_STATUS_READ_FAILURE 22 136 #define MBIM_STATUS_WRITE_FAILURE 23 137 #define MBIM_STATUS_NO_PHONEBOOK 25 138 #define MBIM_STATUS_PARAMETER_TOO_LONG 26 139 #define MBIM_STATUS_STK_BUSY 27 140 #define MBIM_STATUS_OPERATION_NOT_ALLOWED 28 141 #define MBIM_STATUS_MEMORY_FAILURE 29 142 #define MBIM_STATUS_INVALID_MEMORY_INDEX 30 143 #define MBIM_STATUS_MEMORY_FULL 31 144 #define MBIM_STATUS_FILTER_NOT_SUPPORTED 32 145 #define MBIM_STATUS_DSS_INSTANCE_LIMIT 33 146 #define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34 147 #define MBIM_STATUS_AUTH_INCORRECT_AUTN 35 148 #define MBIM_STATUS_AUTH_SYNC_FAILURE 36 149 #define MBIM_STATUS_AUTH_AMF_NOT_SET 37 150 #define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38 151 #define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100 152 #define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101 153 #define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102 154 #define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103 155 #define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104 156 157 /* 158 * Message formats 159 */ 160 struct mbim_msghdr { 161 /* Msg header */ 162 uint32_t type; /* message type */ 163 uint32_t len; /* message length */ 164 uint32_t tid; /* transaction id */ 165 } __packed; 166 167 struct mbim_fraghdr { 168 uint32_t nfrag; /* total # of fragments */ 169 uint32_t currfrag; /* current fragment */ 170 } __packed; 171 172 struct mbim_fragmented_msg_hdr { 173 struct mbim_msghdr hdr; 174 struct mbim_fraghdr frag; 175 } __packed; 176 177 struct mbim_h2f_openmsg { 178 struct mbim_msghdr hdr; 179 uint32_t maxlen; 180 } __packed; 181 182 struct mbim_h2f_closemsg { 183 struct mbim_msghdr hdr; 184 } __packed; 185 186 struct mbim_h2f_cmd { 187 struct mbim_msghdr hdr; 188 struct mbim_fraghdr frag; 189 uint8_t devid[MBIM_UUID_LEN]; 190 uint32_t cid; /* command id */ 191 #define MBIM_CMDOP_QRY 0 192 #define MBIM_CMDOP_SET 1 193 uint32_t op; 194 uint32_t infolen; 195 uint8_t info[]; 196 } __packed; 197 198 struct mbim_f2h_indicate_status { 199 struct mbim_msghdr hdr; 200 struct mbim_fraghdr frag; 201 uint8_t devid[MBIM_UUID_LEN]; 202 uint32_t cid; /* command id */ 203 uint32_t infolen; 204 uint8_t info[]; 205 } __packed; 206 207 struct mbim_f2h_hosterr { 208 struct mbim_msghdr hdr; 209 210 #define MBIM_ERROR_TIMEOUT_FRAGMENT 1 211 #define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2 212 #define MBIM_ERROR_LENGTH_MISMATCH 3 213 #define MBIM_ERROR_DUPLICATED_TID 4 214 #define MBIM_ERROR_NOT_OPENED 5 215 #define MBIM_ERROR_UNKNOWN 6 216 #define MBIM_ERROR_CANCEL 7 217 #define MBIM_ERROR_MAX_TRANSFER 8 218 uint32_t err; 219 } __packed; 220 221 struct mbim_f2h_openclosedone { 222 struct mbim_msghdr hdr; 223 int32_t status; 224 } __packed; 225 226 struct mbim_f2h_cmddone { 227 struct mbim_msghdr hdr; 228 struct mbim_fraghdr frag; 229 uint8_t devid[MBIM_UUID_LEN]; 230 uint32_t cid; /* command id */ 231 int32_t status; 232 uint32_t infolen; 233 uint8_t info[]; 234 } __packed; 235 236 /* 237 * Messages and commands for MBIM_UUID_BASIC_CONNECT 238 */ 239 #define MBIM_CID_DEVICE_CAPS 1 240 #define MBIM_CID_SUBSCRIBER_READY_STATUS 2 241 #define MBIM_CID_RADIO_STATE 3 242 #define MBIM_CID_PIN 4 243 #define MBIM_CID_PIN_LIST 5 244 #define MBIM_CID_HOME_PROVIDER 6 245 #define MBIM_CID_PREFERRED_PROVIDERS 7 246 #define MBIM_CID_VISIBLE_PROVIDERS 8 247 #define MBIM_CID_REGISTER_STATE 9 248 #define MBIM_CID_PACKET_SERVICE 10 249 #define MBIM_CID_SIGNAL_STATE 11 250 #define MBIM_CID_CONNECT 12 251 #define MBIM_CID_PROVISIONED_CONTEXTS 13 252 #define MBIM_CID_SERVICE_ACTIVATION 14 253 #define MBIM_CID_IP_CONFIGURATION 15 254 #define MBIM_CID_DEVICE_SERVICES 16 255 #define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19 256 #define MBIM_CID_PACKET_STATISTICS 20 257 #define MBIM_CID_NETWORK_IDLE_HINT 21 258 #define MBIM_CID_EMERGENCY_MODE 22 259 #define MBIM_CID_IP_PACKET_FILTERS 23 260 #define MBIM_CID_MULTICARRIER_PROVIDERS 24 261 262 struct mbim_cid_subscriber_ready_info { 263 #define MBIM_SIMSTATE_NOTINITIALIZED 0 264 #define MBIM_SIMSTATE_INITIALIZED 1 265 #define MBIM_SIMSTATE_NOTINSERTED 2 266 #define MBIM_SIMSTATE_BADSIM 3 267 #define MBIM_SIMSTATE_FAILURE 4 268 #define MBIM_SIMSTATE_NOTACTIVATED 5 269 #define MBIM_SIMSTATE_LOCKED 6 270 uint32_t ready; 271 272 uint32_t sid_offs; 273 uint32_t sid_size; 274 275 uint32_t icc_offs; 276 uint32_t icc_size; 277 278 #define MBIM_SIMUNIQEID_NONE 0 279 #define MBIM_SIMUNIQEID_PROTECT 1 280 uint32_t info; 281 282 uint32_t no_pn; 283 struct { 284 uint32_t offs; 285 uint32_t size; 286 } 287 pn[]; 288 } __packed; 289 290 struct mbim_cid_radio_state { 291 #define MBIM_RADIO_STATE_OFF 0 292 #define MBIM_RADIO_STATE_ON 1 293 uint32_t state; 294 } __packed; 295 296 struct mbim_cid_radio_state_info { 297 uint32_t hw_state; 298 uint32_t sw_state; 299 } __packed; 300 301 struct mbim_cid_pin { 302 #define MBIM_PIN_TYPE_NONE 0 303 #define MBIM_PIN_TYPE_CUSTOM 1 304 #define MBIM_PIN_TYPE_PIN1 2 305 #define MBIM_PIN_TYPE_PIN2 3 306 #define MBIM_PIN_TYPE_DEV_SIM_PIN 4 307 #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5 308 #define MBIM_PIN_TYPE_NETWORK_PIN 6 309 #define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7 310 #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8 311 #define MBIM_PIN_TYPE_CORPORATE_PIN 9 312 #define MBIM_PIN_TYPE_SUBSIDY_LOCK 10 313 #define MBIM_PIN_TYPE_PUK1 11 314 #define MBIM_PIN_TYPE_PUK2 12 315 #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13 316 #define MBIM_PIN_TYPE_NETWORK_PUK 14 317 #define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15 318 #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16 319 #define MBIM_PIN_TYPE_CORPORATE_PUK 17 320 uint32_t type; 321 322 #define MBIM_PIN_OP_ENTER 0 323 #define MBIM_PIN_OP_ENABLE 1 324 #define MBIM_PIN_OP_DISABLE 2 325 #define MBIM_PIN_OP_CHANGE 3 326 uint32_t op; 327 uint32_t pin_offs; 328 uint32_t pin_size; 329 uint32_t newpin_offs; 330 uint32_t newpin_size; 331 #define MBIM_PIN_MAXLEN 32 332 uint8_t data[2 * MBIM_PIN_MAXLEN]; 333 } __packed; 334 335 struct mbim_cid_pin_info { 336 uint32_t type; 337 338 #define MBIM_PIN_STATE_UNLOCKED 0 339 #define MBIM_PIN_STATE_LOCKED 1 340 uint32_t state; 341 uint32_t remaining_attempts; 342 } __packed; 343 344 struct mbim_cid_pin_list_info { 345 struct mbim_pin_desc { 346 347 #define MBIM_PINMODE_NOTSUPPORTED 0 348 #define MBIM_PINMODE_ENABLED 1 349 #define MBIM_PINMODE_DISABLED 2 350 uint32_t mode; 351 352 #define MBIM_PINFORMAT_UNKNOWN 0 353 #define MBIM_PINFORMAT_NUMERIC 1 354 #define MBIM_PINFORMAT_ALPHANUMERIC 2 355 uint32_t format; 356 357 uint32_t minlen; 358 uint32_t maxlen; 359 } 360 pin1, 361 pin2, 362 dev_sim_pin, 363 first_dev_sim_pin, 364 net_pin, 365 net_sub_pin, 366 svp_pin, 367 corp_pin, 368 subsidy_lock, 369 custom; 370 } __packed; 371 372 struct mbim_cid_device_caps { 373 #define MBIM_DEVTYPE_UNKNOWN 0 374 #define MBIM_DEVTYPE_EMBEDDED 1 375 #define MBIM_DEVTYPE_REMOVABLE 2 376 #define MBIM_DEVTYPE_REMOTE 3 377 uint32_t devtype; 378 379 uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */ 380 uint32_t voiceclass; 381 uint32_t simclass; 382 uint32_t dataclass; /* values: MBIM_DATA_CLASS */ 383 uint32_t smscaps; 384 uint32_t cntrlcaps; 385 uint32_t max_sessions; 386 387 uint32_t custdataclass_offs; 388 uint32_t custdataclass_size; 389 390 uint32_t devid_offs; 391 uint32_t devid_size; 392 393 uint32_t fwinfo_offs; 394 uint32_t fwinfo_size; 395 396 uint32_t hwinfo_offs; 397 uint32_t hwinfo_size; 398 399 uint32_t data[]; 400 } __packed; 401 402 struct mbim_cid_registration_state { 403 uint32_t provid_offs; 404 uint32_t provid_size; 405 406 #define MBIM_REGACTION_AUTOMATIC 0 407 #define MBIM_REGACTION_MANUAL 1 408 uint32_t regaction; 409 uint32_t data_class; 410 411 uint32_t data[]; 412 } __packed; 413 414 struct mbim_cid_registration_state_info { 415 uint32_t nwerror; 416 417 uint32_t regstate; /* values: MBIM_REGISTER_STATE */ 418 419 #define MBIM_REGMODE_UNKNOWN 0 420 #define MBIM_REGMODE_AUTOMATIC 1 421 #define MBIM_REGMODE_MANUAL 2 422 uint32_t regmode; 423 424 uint32_t availclasses; /* values: MBIM_DATA_CLASS */ 425 uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */ 426 427 uint32_t provid_offs; 428 uint32_t provid_size; 429 430 uint32_t provname_offs; 431 uint32_t provname_size; 432 433 uint32_t roamingtxt_offs; 434 uint32_t roamingtxt_size; 435 436 #define MBIM_REGFLAGS_NONE 0 437 #define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1 438 #define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2 439 uint32_t regflag; 440 441 uint32_t data[]; 442 } __packed; 443 444 struct mbim_cid_packet_service { 445 #define MBIM_PKTSERVICE_ACTION_ATTACH 0 446 #define MBIM_PKTSERVICE_ACTION_DETACH 1 447 uint32_t action; 448 } __packed; 449 450 struct mbim_cid_packet_service_info { 451 uint32_t nwerror; 452 453 #define MBIM_PKTSERVICE_STATE_UNKNOWN 0 454 #define MBIM_PKTSERVICE_STATE_ATTACHING 1 455 #define MBIM_PKTSERVICE_STATE_ATTACHED 2 456 #define MBIM_PKTSERVICE_STATE_DETACHING 3 457 #define MBIM_PKTSERVICE_STATE_DETACHED 4 458 uint32_t state; 459 460 uint32_t highest_dataclass; 461 uint64_t uplink_speed; 462 uint64_t downlink_speed; 463 } __packed; 464 465 struct mbim_cid_signal_state { 466 uint32_t rssi; 467 uint32_t err_rate; 468 uint32_t ss_intvl; 469 uint32_t rssi_thr; 470 uint32_t err_thr; 471 } __packed; 472 473 struct mbim_cid_connect { 474 uint32_t sessionid; 475 476 #define MBIM_CONNECT_DEACTIVATE 0 477 #define MBIM_CONNECT_ACTIVATE 1 478 uint32_t command; 479 480 #define MBIM_ACCESS_MAXLEN 200 481 uint32_t access_offs; 482 uint32_t access_size; 483 484 #define MBIM_USER_MAXLEN 510 485 uint32_t user_offs; 486 uint32_t user_size; 487 488 #define MBIM_PASSWD_MAXLEN 510 489 uint32_t passwd_offs; 490 uint32_t passwd_size; 491 492 #define MBIM_COMPRESSION_NONE 0 493 #define MBIM_COMPRESSION_ENABLE 1 494 uint32_t compression; 495 496 #define MBIM_AUTHPROT_NONE 0 497 #define MBIM_AUTHPROT_PAP 1 498 #define MBIM_AUTHPROT_CHAP 2 499 #define MBIM_AUTHPROT_MSCHAP 3 500 uint32_t authprot; 501 502 #define MBIM_CONTEXT_IPTYPE_DEFAULT 0 503 #define MBIM_CONTEXT_IPTYPE_IPV4 1 504 #define MBIM_CONTEXT_IPTYPE_IPV6 2 505 #define MBIM_CONTEXT_IPTYPE_IPV4V6 3 506 #define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4 507 uint32_t iptype; 508 509 uint8_t context[MBIM_UUID_LEN]; 510 511 uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN + 512 MBIM_PASSWD_MAXLEN]; 513 514 } __packed; 515 516 struct mbim_cid_connect_info { 517 uint32_t sessionid; 518 519 #define MBIM_ACTIVATION_STATE_UNKNOWN 0 520 #define MBIM_ACTIVATION_STATE_ACTIVATED 1 521 #define MBIM_ACTIVATION_STATE_ACTIVATING 2 522 #define MBIM_ACTIVATION_STATE_DEACTIVATED 3 523 #define MBIM_ACTIVATION_STATE_DEACTIVATING 4 524 uint32_t activation; 525 526 uint32_t voice; 527 uint32_t iptype; 528 uint8_t context[MBIM_UUID_LEN]; 529 uint32_t nwerror; 530 } __packed; 531 532 struct mbim_cid_ipv4_element { 533 uint32_t prefixlen; 534 uint32_t addr; 535 } __packed; 536 537 struct mbim_cid_ipv6_element { 538 uint32_t prefixlen; 539 uint8_t addr[16]; 540 } __packed; 541 542 struct mbim_cid_ip_configuration_info { 543 uint32_t sessionid; 544 545 #define MBIM_IPCONF_HAS_ADDRINFO 0x0001 546 #define MBIM_IPCONF_HAS_GWINFO 0x0002 547 #define MBIM_IPCONF_HAS_DNSINFO 0x0004 548 #define MBIM_IPCONF_HAS_MTUINFO 0x0008 549 uint32_t ipv4_available; 550 uint32_t ipv6_available; 551 552 uint32_t ipv4_naddr; 553 uint32_t ipv4_addroffs; 554 uint32_t ipv6_naddr; 555 uint32_t ipv6_addroffs; 556 557 uint32_t ipv4_gwoffs; 558 uint32_t ipv6_gwoffs; 559 560 uint32_t ipv4_ndnssrv; 561 uint32_t ipv4_dnssrvoffs; 562 uint32_t ipv6_ndnssrv; 563 uint32_t ipv6_dnssrvoffs; 564 565 uint32_t ipv4_mtu; 566 uint32_t ipv6_mtu; 567 568 uint32_t data[]; 569 } __packed; 570 571 struct mbim_cid_packet_statistics_info { 572 uint32_t in_discards; 573 uint32_t in_errors; 574 uint64_t in_octets; 575 uint64_t in_packets; 576 uint64_t out_octets; 577 uint64_t out_packets; 578 uint32_t out_errors; 579 uint32_t out_discards; 580 } __packed; 581 582 583 #ifdef _KERNEL 584 585 struct mbim_descriptor { 586 uByte bLength; 587 uByte bDescriptorType; 588 uByte bDescriptorSubtype; 589 #define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f) 590 #define MBIM_VER_MINOR(v) ((v) & 0x0f) 591 uWord bcdMBIMVersion; 592 uWord wMaxControlMessage; 593 uByte bNumberFilters; 594 uByte bMaxFilterSize; 595 uWord wMaxSegmentSize; 596 uByte bmNetworkCapabilities; 597 } __packed; 598 599 /* 600 * NCM Encoding 601 */ 602 #define MBIM_HDR16_LEN \ 603 (sizeof (struct ncm_header16) + sizeof (struct ncm_pointer16)) 604 #define MBIM_HDR32_LEN \ 605 (sizeof (struct ncm_header32) + sizeof (struct ncm_pointer32)) 606 607 struct ncm_header16 { 608 #define NCM_HDR16_SIG 0x484d434e 609 uDWord dwSignature; 610 uWord wHeaderLength; 611 uWord wSequence; 612 uWord wBlockLength; 613 uWord wNdpIndex; 614 } __packed; 615 616 struct ncm_header32 { 617 #define NCM_HDR32_SIG 0x686d636e 618 uDWord dwSignature; 619 uWord wHeaderLength; 620 uWord wSequence; 621 uDWord dwBlockLength; 622 uDWord dwNdpIndex; 623 } __packed; 624 625 626 #define MBIM_NCM_NTH_SIDSHIFT 24 627 #define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff) 628 629 struct ncm_pointer16_dgram { 630 uWord wDatagramIndex; 631 uWord wDatagramLen; 632 } __packed; 633 634 struct ncm_pointer16 { 635 #define MBIM_NCM_NTH16_IPS 0x00535049 636 #define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS) 637 #define MBIM_NCM_NTH16_SIG(s) \ 638 ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS) 639 uDWord dwSignature; 640 uWord wLength; 641 uWord wNextNdpIndex; 642 643 /* Minimum is two datagrams, but can be more */ 644 struct ncm_pointer16_dgram dgram[2]; 645 } __packed; 646 647 struct ncm_pointer32_dgram { 648 uDWord dwDatagramIndex; 649 uDWord dwDatagramLen; 650 } __packed; 651 652 struct ncm_pointer32 { 653 #define MBIM_NCM_NTH32_IPS 0x00737069 654 #define MBIM_NCM_NTH32_ISISG(s) \ 655 (((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS) 656 #define MBIM_NCM_NTH32_SIG(s) \ 657 ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS) 658 uDWord dwSignature; 659 uWord wLength; 660 uWord wReserved6; 661 uDWord dwNextNdpIndex; 662 uDWord dwReserved12; 663 664 /* Minimum is two datagrams, but can be more */ 665 struct ncm_pointer32_dgram dgram[2]; 666 } __packed; 667 668 #endif /* _KERNEL */ 669 670 #endif /* _MBIM_H_ */ 671