1*83adad25Spatrick /* $OpenBSD: mbim.h,v 1.6 2021/03/30 15:59:04 patrick Exp $ */ 227131187Sgerhard 327131187Sgerhard /* 427131187Sgerhard * Copyright (c) 2016 genua mbH 527131187Sgerhard * All rights reserved. 627131187Sgerhard * 727131187Sgerhard * Permission to use, copy, modify, and distribute this software for any 827131187Sgerhard * purpose with or without fee is hereby granted, provided that the above 927131187Sgerhard * copyright notice and this permission notice appear in all copies. 1027131187Sgerhard * 1127131187Sgerhard * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1227131187Sgerhard * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1327131187Sgerhard * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1427131187Sgerhard * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1527131187Sgerhard * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1627131187Sgerhard * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1727131187Sgerhard * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1827131187Sgerhard */ 1927131187Sgerhard 2027131187Sgerhard /* 2127131187Sgerhard * Mobile Broadband Interface Model 222b01c74bSsthen * https://www.usb.org/sites/default/files/MBIM-Compliance-1.0.pdf 2327131187Sgerhard */ 2427131187Sgerhard #ifndef _MBIM_H_ 2527131187Sgerhard #define _MBIM_H_ 2627131187Sgerhard 2727131187Sgerhard #define UDESCSUB_MBIM 27 2827131187Sgerhard #define MBIM_INTERFACE_ALTSETTING 1 2927131187Sgerhard 3027131187Sgerhard #define MBIM_RESET_FUNCTION 0x05 3127131187Sgerhard 3227131187Sgerhard /* 3327131187Sgerhard * Registration state (MBIM_REGISTER_STATE) 3427131187Sgerhard */ 3527131187Sgerhard #define MBIM_REGSTATE_UNKNOWN 0 3627131187Sgerhard #define MBIM_REGSTATE_DEREGISTERED 1 3727131187Sgerhard #define MBIM_REGSTATE_SEARCHING 2 3827131187Sgerhard #define MBIM_REGSTATE_HOME 3 3927131187Sgerhard #define MBIM_REGSTATE_ROAMING 4 4027131187Sgerhard #define MBIM_REGSTATE_PARTNER 5 4127131187Sgerhard #define MBIM_REGSTATE_DENIED 6 4227131187Sgerhard 4327131187Sgerhard /* 4427131187Sgerhard * Data classes mask (MBIM_DATA_CLASS) 4527131187Sgerhard */ 4627131187Sgerhard #define MBIM_DATACLASS_NONE 0x00000000 4727131187Sgerhard #define MBIM_DATACLASS_GPRS 0x00000001 4827131187Sgerhard #define MBIM_DATACLASS_EDGE 0x00000002 4927131187Sgerhard #define MBIM_DATACLASS_UMTS 0x00000004 5027131187Sgerhard #define MBIM_DATACLASS_HSDPA 0x00000008 5127131187Sgerhard #define MBIM_DATACLASS_HSUPA 0x00000010 5227131187Sgerhard #define MBIM_DATACLASS_LTE 0x00000020 5327131187Sgerhard #define MBIM_DATACLASS_1XRTT 0x00010000 5427131187Sgerhard #define MBIM_DATACLASS_1XEVDO 0x00020000 5527131187Sgerhard #define MBIM_DATACLASS_1XEVDO_REV_A 0x00040000 5627131187Sgerhard #define MBIM_DATACLASS_1XEVDV 0x00080000 5727131187Sgerhard #define MBIM_DATACLASS_3XRTT 0x00100000 5827131187Sgerhard #define MBIM_DATACLASS_1XEVDO_REV_B 0x00200000 5927131187Sgerhard #define MBIM_DATACLASS_UMB 0x00400000 6027131187Sgerhard #define MBIM_DATACLASS_CUSTOM 0x80000000 6127131187Sgerhard 6227131187Sgerhard /* 6327131187Sgerhard * Cell classes mask (MBIM_CELLULAR_CLASS) 6427131187Sgerhard */ 6527131187Sgerhard #define MBIM_CELLCLASS_GSM 0x00000001 6627131187Sgerhard #define MBIM_CELLCLASS_CDMA 0x00000002 6727131187Sgerhard 6827131187Sgerhard /* 6927131187Sgerhard * UUIDs 7027131187Sgerhard */ 7127131187Sgerhard #define MBIM_UUID_LEN 16 7227131187Sgerhard 7327131187Sgerhard #define MBIM_UUID_BASIC_CONNECT { \ 7427131187Sgerhard 0xa2, 0x89, 0xcc, 0x33, 0xbc, 0xbb, 0x8b, 0x4f, \ 7527131187Sgerhard 0xb6, 0xb0, 0x13, 0x3e, 0xc2, 0xaa, 0xe6, 0xdf \ 7627131187Sgerhard } 7727131187Sgerhard 7827131187Sgerhard #define MBIM_UUID_CONTEXT_INTERNET { \ 7927131187Sgerhard 0x7e, 0x5e, 0x2a, 0x7e, 0x4e, 0x6f, 0x72, 0x72, \ 8027131187Sgerhard 0x73, 0x6b, 0x65, 0x6e, 0x7e, 0x5e, 0x2a, 0x7e \ 8127131187Sgerhard } 8227131187Sgerhard 8327131187Sgerhard #define MBIM_UUID_CONTEXT_VPN { \ 8427131187Sgerhard 0x9b, 0x9f, 0x7b, 0xbe, 0x89, 0x52, 0x44, 0xb7, \ 8527131187Sgerhard 0x83, 0xac, 0xca, 0x41, 0x31, 0x8d, 0xf7, 0xa0 \ 8627131187Sgerhard } 8727131187Sgerhard 88f892d520Sgerhard #define MBIM_UUID_QMI_MBIM { \ 89f892d520Sgerhard 0xd1, 0xa3, 0x0b, 0xc2, 0xf9, 0x7a, 0x6e, 0x43, \ 90f892d520Sgerhard 0xbf, 0x65, 0xc7, 0xe2, 0x4f, 0xb0, 0xf0, 0xd3 \ 91f892d520Sgerhard } 92f892d520Sgerhard 9327131187Sgerhard #define MBIM_CTRLMSG_MINLEN 64 9427131187Sgerhard #define MBIM_CTRLMSG_MAXLEN (4 * 1204) 9527131187Sgerhard 9627131187Sgerhard #define MBIM_MAXSEGSZ_MINVAL (2 * 1024) 9727131187Sgerhard 9827131187Sgerhard /* 9927131187Sgerhard * Control messages (host to function) 10027131187Sgerhard */ 10127131187Sgerhard #define MBIM_OPEN_MSG 1U 10227131187Sgerhard #define MBIM_CLOSE_MSG 2U 10327131187Sgerhard #define MBIM_COMMAND_MSG 3U 10427131187Sgerhard #define MBIM_HOST_ERROR_MSG 4U 10527131187Sgerhard 10627131187Sgerhard /* 10727131187Sgerhard * Control messages (function to host) 10827131187Sgerhard */ 10927131187Sgerhard #define MBIM_OPEN_DONE 0x80000001U 11027131187Sgerhard #define MBIM_CLOSE_DONE 0x80000002U 11127131187Sgerhard #define MBIM_COMMAND_DONE 0x80000003U 11227131187Sgerhard #define MBIM_FUNCTION_ERROR_MSG 0x80000004U 11327131187Sgerhard #define MBIM_INDICATE_STATUS_MSG 0x80000007U 11427131187Sgerhard 11527131187Sgerhard /* 11627131187Sgerhard * Generic status codes 11727131187Sgerhard */ 11827131187Sgerhard #define MBIM_STATUS_SUCCESS 0 11927131187Sgerhard #define MBIM_STATUS_BUSY 1 12027131187Sgerhard #define MBIM_STATUS_FAILURE 2 12127131187Sgerhard #define MBIM_STATUS_SIM_NOT_INSERTED 3 12227131187Sgerhard #define MBIM_STATUS_BAD_SIM 4 12327131187Sgerhard #define MBIM_STATUS_PIN_REQUIRED 5 12427131187Sgerhard #define MBIM_STATUS_PIN_DISABLED 6 12527131187Sgerhard #define MBIM_STATUS_NOT_REGISTERED 7 12627131187Sgerhard #define MBIM_STATUS_PROVIDERS_NOT_FOUND 8 12727131187Sgerhard #define MBIM_STATUS_NO_DEVICE_SUPPORT 9 12827131187Sgerhard #define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10 12927131187Sgerhard #define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11 13027131187Sgerhard #define MBIM_STATUS_PACKET_SERVICE_DETACHED 12 13127131187Sgerhard #define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13 13227131187Sgerhard #define MBIM_STATUS_NOT_INITIALIZED 14 13327131187Sgerhard #define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15 13427131187Sgerhard #define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16 13527131187Sgerhard #define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17 13627131187Sgerhard #define MBIM_STATUS_INVALID_ACCESS_STRING 18 13727131187Sgerhard #define MBIM_STATUS_INVALID_USER_NAME_PWD 19 13827131187Sgerhard #define MBIM_STATUS_RADIO_POWER_OFF 20 13927131187Sgerhard #define MBIM_STATUS_INVALID_PARAMETERS 21 14027131187Sgerhard #define MBIM_STATUS_READ_FAILURE 22 14127131187Sgerhard #define MBIM_STATUS_WRITE_FAILURE 23 14227131187Sgerhard #define MBIM_STATUS_NO_PHONEBOOK 25 14327131187Sgerhard #define MBIM_STATUS_PARAMETER_TOO_LONG 26 14427131187Sgerhard #define MBIM_STATUS_STK_BUSY 27 14527131187Sgerhard #define MBIM_STATUS_OPERATION_NOT_ALLOWED 28 14627131187Sgerhard #define MBIM_STATUS_MEMORY_FAILURE 29 14727131187Sgerhard #define MBIM_STATUS_INVALID_MEMORY_INDEX 30 14827131187Sgerhard #define MBIM_STATUS_MEMORY_FULL 31 14927131187Sgerhard #define MBIM_STATUS_FILTER_NOT_SUPPORTED 32 15027131187Sgerhard #define MBIM_STATUS_DSS_INSTANCE_LIMIT 33 15127131187Sgerhard #define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34 15227131187Sgerhard #define MBIM_STATUS_AUTH_INCORRECT_AUTN 35 15327131187Sgerhard #define MBIM_STATUS_AUTH_SYNC_FAILURE 36 15427131187Sgerhard #define MBIM_STATUS_AUTH_AMF_NOT_SET 37 15527131187Sgerhard #define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38 15627131187Sgerhard #define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100 15727131187Sgerhard #define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101 15827131187Sgerhard #define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102 15927131187Sgerhard #define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103 16027131187Sgerhard #define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104 16127131187Sgerhard 16227131187Sgerhard /* 16327131187Sgerhard * Message formats 16427131187Sgerhard */ 16527131187Sgerhard struct mbim_msghdr { 16627131187Sgerhard /* Msg header */ 16727131187Sgerhard uint32_t type; /* message type */ 16827131187Sgerhard uint32_t len; /* message length */ 16927131187Sgerhard uint32_t tid; /* transaction id */ 17027131187Sgerhard } __packed; 17127131187Sgerhard 17227131187Sgerhard struct mbim_fraghdr { 17327131187Sgerhard uint32_t nfrag; /* total # of fragments */ 17427131187Sgerhard uint32_t currfrag; /* current fragment */ 17527131187Sgerhard } __packed; 17627131187Sgerhard 17727131187Sgerhard struct mbim_fragmented_msg_hdr { 17827131187Sgerhard struct mbim_msghdr hdr; 17927131187Sgerhard struct mbim_fraghdr frag; 18027131187Sgerhard } __packed; 18127131187Sgerhard 18227131187Sgerhard struct mbim_h2f_openmsg { 18327131187Sgerhard struct mbim_msghdr hdr; 18427131187Sgerhard uint32_t maxlen; 18527131187Sgerhard } __packed; 18627131187Sgerhard 18727131187Sgerhard struct mbim_h2f_closemsg { 18827131187Sgerhard struct mbim_msghdr hdr; 18927131187Sgerhard } __packed; 19027131187Sgerhard 19127131187Sgerhard struct mbim_h2f_cmd { 19227131187Sgerhard struct mbim_msghdr hdr; 19327131187Sgerhard struct mbim_fraghdr frag; 19427131187Sgerhard uint8_t devid[MBIM_UUID_LEN]; 19527131187Sgerhard uint32_t cid; /* command id */ 19627131187Sgerhard #define MBIM_CMDOP_QRY 0 19727131187Sgerhard #define MBIM_CMDOP_SET 1 19827131187Sgerhard uint32_t op; 19927131187Sgerhard uint32_t infolen; 20027131187Sgerhard uint8_t info[]; 20127131187Sgerhard } __packed; 20227131187Sgerhard 20327131187Sgerhard struct mbim_f2h_indicate_status { 20427131187Sgerhard struct mbim_msghdr hdr; 20527131187Sgerhard struct mbim_fraghdr frag; 20627131187Sgerhard uint8_t devid[MBIM_UUID_LEN]; 20727131187Sgerhard uint32_t cid; /* command id */ 20827131187Sgerhard uint32_t infolen; 20927131187Sgerhard uint8_t info[]; 21027131187Sgerhard } __packed; 21127131187Sgerhard 21227131187Sgerhard struct mbim_f2h_hosterr { 21327131187Sgerhard struct mbim_msghdr hdr; 21427131187Sgerhard 21527131187Sgerhard #define MBIM_ERROR_TIMEOUT_FRAGMENT 1 21627131187Sgerhard #define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2 21727131187Sgerhard #define MBIM_ERROR_LENGTH_MISMATCH 3 21827131187Sgerhard #define MBIM_ERROR_DUPLICATED_TID 4 21927131187Sgerhard #define MBIM_ERROR_NOT_OPENED 5 22027131187Sgerhard #define MBIM_ERROR_UNKNOWN 6 22127131187Sgerhard #define MBIM_ERROR_CANCEL 7 22227131187Sgerhard #define MBIM_ERROR_MAX_TRANSFER 8 22327131187Sgerhard uint32_t err; 22427131187Sgerhard } __packed; 22527131187Sgerhard 22627131187Sgerhard struct mbim_f2h_openclosedone { 22727131187Sgerhard struct mbim_msghdr hdr; 22827131187Sgerhard int32_t status; 22927131187Sgerhard } __packed; 23027131187Sgerhard 23127131187Sgerhard struct mbim_f2h_cmddone { 23227131187Sgerhard struct mbim_msghdr hdr; 23327131187Sgerhard struct mbim_fraghdr frag; 23427131187Sgerhard uint8_t devid[MBIM_UUID_LEN]; 23527131187Sgerhard uint32_t cid; /* command id */ 23627131187Sgerhard int32_t status; 23727131187Sgerhard uint32_t infolen; 23827131187Sgerhard uint8_t info[]; 23927131187Sgerhard } __packed; 24027131187Sgerhard 24127131187Sgerhard /* 24227131187Sgerhard * Messages and commands for MBIM_UUID_BASIC_CONNECT 24327131187Sgerhard */ 24427131187Sgerhard #define MBIM_CID_DEVICE_CAPS 1 24527131187Sgerhard #define MBIM_CID_SUBSCRIBER_READY_STATUS 2 24627131187Sgerhard #define MBIM_CID_RADIO_STATE 3 24727131187Sgerhard #define MBIM_CID_PIN 4 24827131187Sgerhard #define MBIM_CID_PIN_LIST 5 24927131187Sgerhard #define MBIM_CID_HOME_PROVIDER 6 25027131187Sgerhard #define MBIM_CID_PREFERRED_PROVIDERS 7 25127131187Sgerhard #define MBIM_CID_VISIBLE_PROVIDERS 8 25227131187Sgerhard #define MBIM_CID_REGISTER_STATE 9 25327131187Sgerhard #define MBIM_CID_PACKET_SERVICE 10 25427131187Sgerhard #define MBIM_CID_SIGNAL_STATE 11 25527131187Sgerhard #define MBIM_CID_CONNECT 12 25627131187Sgerhard #define MBIM_CID_PROVISIONED_CONTEXTS 13 25727131187Sgerhard #define MBIM_CID_SERVICE_ACTIVATION 14 25827131187Sgerhard #define MBIM_CID_IP_CONFIGURATION 15 25927131187Sgerhard #define MBIM_CID_DEVICE_SERVICES 16 26027131187Sgerhard #define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19 26127131187Sgerhard #define MBIM_CID_PACKET_STATISTICS 20 26227131187Sgerhard #define MBIM_CID_NETWORK_IDLE_HINT 21 26327131187Sgerhard #define MBIM_CID_EMERGENCY_MODE 22 26427131187Sgerhard #define MBIM_CID_IP_PACKET_FILTERS 23 26527131187Sgerhard #define MBIM_CID_MULTICARRIER_PROVIDERS 24 26627131187Sgerhard 26727131187Sgerhard struct mbim_cid_subscriber_ready_info { 26827131187Sgerhard #define MBIM_SIMSTATE_NOTINITIALIZED 0 26927131187Sgerhard #define MBIM_SIMSTATE_INITIALIZED 1 27027131187Sgerhard #define MBIM_SIMSTATE_NOTINSERTED 2 27127131187Sgerhard #define MBIM_SIMSTATE_BADSIM 3 27227131187Sgerhard #define MBIM_SIMSTATE_FAILURE 4 27327131187Sgerhard #define MBIM_SIMSTATE_NOTACTIVATED 5 27427131187Sgerhard #define MBIM_SIMSTATE_LOCKED 6 27527131187Sgerhard uint32_t ready; 27627131187Sgerhard 27727131187Sgerhard uint32_t sid_offs; 27827131187Sgerhard uint32_t sid_size; 27927131187Sgerhard 28027131187Sgerhard uint32_t icc_offs; 28127131187Sgerhard uint32_t icc_size; 28227131187Sgerhard 28327131187Sgerhard #define MBIM_SIMUNIQEID_NONE 0 28427131187Sgerhard #define MBIM_SIMUNIQEID_PROTECT 1 28527131187Sgerhard uint32_t info; 28627131187Sgerhard 28727131187Sgerhard uint32_t no_pn; 28827131187Sgerhard struct { 28927131187Sgerhard uint32_t offs; 29027131187Sgerhard uint32_t size; 29127131187Sgerhard } 29227131187Sgerhard pn[]; 29327131187Sgerhard } __packed; 29427131187Sgerhard 29527131187Sgerhard struct mbim_cid_radio_state { 29627131187Sgerhard #define MBIM_RADIO_STATE_OFF 0 29727131187Sgerhard #define MBIM_RADIO_STATE_ON 1 29827131187Sgerhard uint32_t state; 29927131187Sgerhard } __packed; 30027131187Sgerhard 30127131187Sgerhard struct mbim_cid_radio_state_info { 30227131187Sgerhard uint32_t hw_state; 30327131187Sgerhard uint32_t sw_state; 30427131187Sgerhard } __packed; 30527131187Sgerhard 30627131187Sgerhard struct mbim_cid_pin { 30727131187Sgerhard #define MBIM_PIN_TYPE_NONE 0 30827131187Sgerhard #define MBIM_PIN_TYPE_CUSTOM 1 30927131187Sgerhard #define MBIM_PIN_TYPE_PIN1 2 31027131187Sgerhard #define MBIM_PIN_TYPE_PIN2 3 31127131187Sgerhard #define MBIM_PIN_TYPE_DEV_SIM_PIN 4 31227131187Sgerhard #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5 31327131187Sgerhard #define MBIM_PIN_TYPE_NETWORK_PIN 6 31427131187Sgerhard #define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7 31527131187Sgerhard #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8 31627131187Sgerhard #define MBIM_PIN_TYPE_CORPORATE_PIN 9 31727131187Sgerhard #define MBIM_PIN_TYPE_SUBSIDY_LOCK 10 31827131187Sgerhard #define MBIM_PIN_TYPE_PUK1 11 31927131187Sgerhard #define MBIM_PIN_TYPE_PUK2 12 32027131187Sgerhard #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13 32127131187Sgerhard #define MBIM_PIN_TYPE_NETWORK_PUK 14 32227131187Sgerhard #define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15 32327131187Sgerhard #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16 32427131187Sgerhard #define MBIM_PIN_TYPE_CORPORATE_PUK 17 32527131187Sgerhard uint32_t type; 32627131187Sgerhard 32727131187Sgerhard #define MBIM_PIN_OP_ENTER 0 32827131187Sgerhard #define MBIM_PIN_OP_ENABLE 1 32927131187Sgerhard #define MBIM_PIN_OP_DISABLE 2 33027131187Sgerhard #define MBIM_PIN_OP_CHANGE 3 33127131187Sgerhard uint32_t op; 33227131187Sgerhard uint32_t pin_offs; 33327131187Sgerhard uint32_t pin_size; 33427131187Sgerhard uint32_t newpin_offs; 33527131187Sgerhard uint32_t newpin_size; 33627131187Sgerhard #define MBIM_PIN_MAXLEN 32 33727131187Sgerhard uint8_t data[2 * MBIM_PIN_MAXLEN]; 33827131187Sgerhard } __packed; 33927131187Sgerhard 34027131187Sgerhard struct mbim_cid_pin_info { 34127131187Sgerhard uint32_t type; 34227131187Sgerhard 34327131187Sgerhard #define MBIM_PIN_STATE_UNLOCKED 0 34427131187Sgerhard #define MBIM_PIN_STATE_LOCKED 1 34527131187Sgerhard uint32_t state; 34627131187Sgerhard uint32_t remaining_attempts; 34727131187Sgerhard } __packed; 34827131187Sgerhard 34927131187Sgerhard struct mbim_cid_pin_list_info { 35027131187Sgerhard struct mbim_pin_desc { 35127131187Sgerhard 35227131187Sgerhard #define MBIM_PINMODE_NOTSUPPORTED 0 35327131187Sgerhard #define MBIM_PINMODE_ENABLED 1 35427131187Sgerhard #define MBIM_PINMODE_DISABLED 2 35527131187Sgerhard uint32_t mode; 35627131187Sgerhard 35727131187Sgerhard #define MBIM_PINFORMAT_UNKNOWN 0 35827131187Sgerhard #define MBIM_PINFORMAT_NUMERIC 1 35927131187Sgerhard #define MBIM_PINFORMAT_ALPHANUMERIC 2 36027131187Sgerhard uint32_t format; 36127131187Sgerhard 36227131187Sgerhard uint32_t minlen; 36327131187Sgerhard uint32_t maxlen; 36427131187Sgerhard } 36527131187Sgerhard pin1, 36627131187Sgerhard pin2, 36727131187Sgerhard dev_sim_pin, 36827131187Sgerhard first_dev_sim_pin, 36927131187Sgerhard net_pin, 37027131187Sgerhard net_sub_pin, 37127131187Sgerhard svp_pin, 37227131187Sgerhard corp_pin, 37327131187Sgerhard subsidy_lock, 37427131187Sgerhard custom; 37527131187Sgerhard } __packed; 37627131187Sgerhard 37727131187Sgerhard struct mbim_cid_device_caps { 37827131187Sgerhard #define MBIM_DEVTYPE_UNKNOWN 0 37927131187Sgerhard #define MBIM_DEVTYPE_EMBEDDED 1 38027131187Sgerhard #define MBIM_DEVTYPE_REMOVABLE 2 38127131187Sgerhard #define MBIM_DEVTYPE_REMOTE 3 38227131187Sgerhard uint32_t devtype; 38327131187Sgerhard 38427131187Sgerhard uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */ 38527131187Sgerhard uint32_t voiceclass; 38627131187Sgerhard uint32_t simclass; 38727131187Sgerhard uint32_t dataclass; /* values: MBIM_DATA_CLASS */ 38827131187Sgerhard uint32_t smscaps; 38927131187Sgerhard uint32_t cntrlcaps; 39027131187Sgerhard uint32_t max_sessions; 39127131187Sgerhard 39227131187Sgerhard uint32_t custdataclass_offs; 39327131187Sgerhard uint32_t custdataclass_size; 39427131187Sgerhard 39527131187Sgerhard uint32_t devid_offs; 39627131187Sgerhard uint32_t devid_size; 39727131187Sgerhard 39827131187Sgerhard uint32_t fwinfo_offs; 39927131187Sgerhard uint32_t fwinfo_size; 40027131187Sgerhard 40127131187Sgerhard uint32_t hwinfo_offs; 40227131187Sgerhard uint32_t hwinfo_size; 40327131187Sgerhard 40427131187Sgerhard uint32_t data[]; 40527131187Sgerhard } __packed; 40627131187Sgerhard 40727131187Sgerhard struct mbim_cid_registration_state { 40827131187Sgerhard uint32_t provid_offs; 40927131187Sgerhard uint32_t provid_size; 41027131187Sgerhard 41127131187Sgerhard #define MBIM_REGACTION_AUTOMATIC 0 41227131187Sgerhard #define MBIM_REGACTION_MANUAL 1 41327131187Sgerhard uint32_t regaction; 41427131187Sgerhard uint32_t data_class; 41527131187Sgerhard 41627131187Sgerhard uint32_t data[]; 41727131187Sgerhard } __packed; 41827131187Sgerhard 41927131187Sgerhard struct mbim_cid_registration_state_info { 42027131187Sgerhard uint32_t nwerror; 42127131187Sgerhard 42227131187Sgerhard uint32_t regstate; /* values: MBIM_REGISTER_STATE */ 42327131187Sgerhard 42427131187Sgerhard #define MBIM_REGMODE_UNKNOWN 0 42527131187Sgerhard #define MBIM_REGMODE_AUTOMATIC 1 42627131187Sgerhard #define MBIM_REGMODE_MANUAL 2 42727131187Sgerhard uint32_t regmode; 42827131187Sgerhard 42927131187Sgerhard uint32_t availclasses; /* values: MBIM_DATA_CLASS */ 43027131187Sgerhard uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */ 43127131187Sgerhard 43227131187Sgerhard uint32_t provid_offs; 43327131187Sgerhard uint32_t provid_size; 43427131187Sgerhard 43527131187Sgerhard uint32_t provname_offs; 43627131187Sgerhard uint32_t provname_size; 43727131187Sgerhard 43827131187Sgerhard uint32_t roamingtxt_offs; 43927131187Sgerhard uint32_t roamingtxt_size; 44027131187Sgerhard 44127131187Sgerhard #define MBIM_REGFLAGS_NONE 0 44227131187Sgerhard #define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1 44327131187Sgerhard #define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2 44427131187Sgerhard uint32_t regflag; 44527131187Sgerhard 44627131187Sgerhard uint32_t data[]; 44727131187Sgerhard } __packed; 44827131187Sgerhard 44927131187Sgerhard struct mbim_cid_packet_service { 45027131187Sgerhard #define MBIM_PKTSERVICE_ACTION_ATTACH 0 45127131187Sgerhard #define MBIM_PKTSERVICE_ACTION_DETACH 1 45227131187Sgerhard uint32_t action; 45327131187Sgerhard } __packed; 45427131187Sgerhard 45527131187Sgerhard struct mbim_cid_packet_service_info { 45627131187Sgerhard uint32_t nwerror; 45727131187Sgerhard 45827131187Sgerhard #define MBIM_PKTSERVICE_STATE_UNKNOWN 0 45927131187Sgerhard #define MBIM_PKTSERVICE_STATE_ATTACHING 1 46027131187Sgerhard #define MBIM_PKTSERVICE_STATE_ATTACHED 2 46127131187Sgerhard #define MBIM_PKTSERVICE_STATE_DETACHING 3 46227131187Sgerhard #define MBIM_PKTSERVICE_STATE_DETACHED 4 46327131187Sgerhard uint32_t state; 46427131187Sgerhard 46527131187Sgerhard uint32_t highest_dataclass; 46627131187Sgerhard uint64_t uplink_speed; 46727131187Sgerhard uint64_t downlink_speed; 46827131187Sgerhard } __packed; 46927131187Sgerhard 47027131187Sgerhard struct mbim_cid_signal_state { 47127131187Sgerhard uint32_t rssi; 47227131187Sgerhard uint32_t err_rate; 47327131187Sgerhard uint32_t ss_intvl; 47427131187Sgerhard uint32_t rssi_thr; 47527131187Sgerhard uint32_t err_thr; 47627131187Sgerhard } __packed; 47727131187Sgerhard 47827131187Sgerhard struct mbim_cid_connect { 47927131187Sgerhard uint32_t sessionid; 48027131187Sgerhard 48127131187Sgerhard #define MBIM_CONNECT_DEACTIVATE 0 48227131187Sgerhard #define MBIM_CONNECT_ACTIVATE 1 48327131187Sgerhard uint32_t command; 48427131187Sgerhard 48527131187Sgerhard #define MBIM_ACCESS_MAXLEN 200 48627131187Sgerhard uint32_t access_offs; 48727131187Sgerhard uint32_t access_size; 48827131187Sgerhard 48927131187Sgerhard #define MBIM_USER_MAXLEN 510 49027131187Sgerhard uint32_t user_offs; 49127131187Sgerhard uint32_t user_size; 49227131187Sgerhard 49327131187Sgerhard #define MBIM_PASSWD_MAXLEN 510 49427131187Sgerhard uint32_t passwd_offs; 49527131187Sgerhard uint32_t passwd_size; 49627131187Sgerhard 49727131187Sgerhard #define MBIM_COMPRESSION_NONE 0 49827131187Sgerhard #define MBIM_COMPRESSION_ENABLE 1 49927131187Sgerhard uint32_t compression; 50027131187Sgerhard 50127131187Sgerhard #define MBIM_AUTHPROT_NONE 0 50227131187Sgerhard #define MBIM_AUTHPROT_PAP 1 50327131187Sgerhard #define MBIM_AUTHPROT_CHAP 2 50427131187Sgerhard #define MBIM_AUTHPROT_MSCHAP 3 50527131187Sgerhard uint32_t authprot; 50627131187Sgerhard 50727131187Sgerhard #define MBIM_CONTEXT_IPTYPE_DEFAULT 0 50827131187Sgerhard #define MBIM_CONTEXT_IPTYPE_IPV4 1 50927131187Sgerhard #define MBIM_CONTEXT_IPTYPE_IPV6 2 51027131187Sgerhard #define MBIM_CONTEXT_IPTYPE_IPV4V6 3 51127131187Sgerhard #define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4 51227131187Sgerhard uint32_t iptype; 51327131187Sgerhard 51427131187Sgerhard uint8_t context[MBIM_UUID_LEN]; 51527131187Sgerhard 51627131187Sgerhard uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN + 51727131187Sgerhard MBIM_PASSWD_MAXLEN]; 51827131187Sgerhard 51927131187Sgerhard } __packed; 52027131187Sgerhard 52127131187Sgerhard struct mbim_cid_connect_info { 52227131187Sgerhard uint32_t sessionid; 52327131187Sgerhard 52427131187Sgerhard #define MBIM_ACTIVATION_STATE_UNKNOWN 0 52527131187Sgerhard #define MBIM_ACTIVATION_STATE_ACTIVATED 1 52627131187Sgerhard #define MBIM_ACTIVATION_STATE_ACTIVATING 2 52727131187Sgerhard #define MBIM_ACTIVATION_STATE_DEACTIVATED 3 52827131187Sgerhard #define MBIM_ACTIVATION_STATE_DEACTIVATING 4 52927131187Sgerhard uint32_t activation; 53027131187Sgerhard 53127131187Sgerhard uint32_t voice; 53227131187Sgerhard uint32_t iptype; 53327131187Sgerhard uint8_t context[MBIM_UUID_LEN]; 53427131187Sgerhard uint32_t nwerror; 53527131187Sgerhard } __packed; 53627131187Sgerhard 53727131187Sgerhard struct mbim_cid_ipv4_element { 53827131187Sgerhard uint32_t prefixlen; 53927131187Sgerhard uint32_t addr; 54027131187Sgerhard } __packed; 54127131187Sgerhard 54227131187Sgerhard struct mbim_cid_ipv6_element { 54327131187Sgerhard uint32_t prefixlen; 54427131187Sgerhard uint8_t addr[16]; 54527131187Sgerhard } __packed; 54627131187Sgerhard 54727131187Sgerhard struct mbim_cid_ip_configuration_info { 54827131187Sgerhard uint32_t sessionid; 54927131187Sgerhard 55027131187Sgerhard #define MBIM_IPCONF_HAS_ADDRINFO 0x0001 55127131187Sgerhard #define MBIM_IPCONF_HAS_GWINFO 0x0002 55227131187Sgerhard #define MBIM_IPCONF_HAS_DNSINFO 0x0004 55327131187Sgerhard #define MBIM_IPCONF_HAS_MTUINFO 0x0008 55427131187Sgerhard uint32_t ipv4_available; 55527131187Sgerhard uint32_t ipv6_available; 55627131187Sgerhard 55727131187Sgerhard uint32_t ipv4_naddr; 55827131187Sgerhard uint32_t ipv4_addroffs; 55927131187Sgerhard uint32_t ipv6_naddr; 56027131187Sgerhard uint32_t ipv6_addroffs; 56127131187Sgerhard 56227131187Sgerhard uint32_t ipv4_gwoffs; 56327131187Sgerhard uint32_t ipv6_gwoffs; 56427131187Sgerhard 56527131187Sgerhard uint32_t ipv4_ndnssrv; 56627131187Sgerhard uint32_t ipv4_dnssrvoffs; 56727131187Sgerhard uint32_t ipv6_ndnssrv; 56827131187Sgerhard uint32_t ipv6_dnssrvoffs; 56927131187Sgerhard 57027131187Sgerhard uint32_t ipv4_mtu; 57127131187Sgerhard uint32_t ipv6_mtu; 57227131187Sgerhard 57327131187Sgerhard uint32_t data[]; 57427131187Sgerhard } __packed; 57527131187Sgerhard 57627131187Sgerhard struct mbim_cid_packet_statistics_info { 57727131187Sgerhard uint32_t in_discards; 57827131187Sgerhard uint32_t in_errors; 57927131187Sgerhard uint64_t in_octets; 58027131187Sgerhard uint64_t in_packets; 58127131187Sgerhard uint64_t out_octets; 58227131187Sgerhard uint64_t out_packets; 58327131187Sgerhard uint32_t out_errors; 58427131187Sgerhard uint32_t out_discards; 58527131187Sgerhard } __packed; 58627131187Sgerhard 58727131187Sgerhard 58827131187Sgerhard #ifdef _KERNEL 58927131187Sgerhard 59027131187Sgerhard struct mbim_descriptor { 59127131187Sgerhard uByte bLength; 59227131187Sgerhard uByte bDescriptorType; 59327131187Sgerhard uByte bDescriptorSubtype; 59427131187Sgerhard #define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f) 59527131187Sgerhard #define MBIM_VER_MINOR(v) ((v) & 0x0f) 59627131187Sgerhard uWord bcdMBIMVersion; 59727131187Sgerhard uWord wMaxControlMessage; 59827131187Sgerhard uByte bNumberFilters; 59927131187Sgerhard uByte bMaxFilterSize; 60027131187Sgerhard uWord wMaxSegmentSize; 60127131187Sgerhard uByte bmNetworkCapabilities; 60227131187Sgerhard } __packed; 60327131187Sgerhard 60427131187Sgerhard /* 6051bfc9b14Sgerhard * NCM Parameters 6061bfc9b14Sgerhard */ 6071bfc9b14Sgerhard #define NCM_GET_NTB_PARAMETERS 0x80 608*83adad25Spatrick #define NCM_GET_NTB_FORMAT 0x83 /* Current format returned as uWord */ 609*83adad25Spatrick #define NCM_SET_NTB_FORMAT 0x84 /* Desired format is in wValue */ 610*83adad25Spatrick 611*83adad25Spatrick #define NCM_FORMAT_NTB16 0x00 612*83adad25Spatrick #define NCM_FORMAT_NTB32 0x01 6131bfc9b14Sgerhard 6141bfc9b14Sgerhard struct ncm_ntb_parameters { 6151bfc9b14Sgerhard uWord wLength; 6161bfc9b14Sgerhard uWord bmNtbFormatsSupported; 617*83adad25Spatrick #define NCM_FORMAT_NTB16_MASK (1U << NCM_FORMAT_NTB16) 618*83adad25Spatrick #define NCM_FORMAT_NTB32_MASK (1U << NCM_FORMAT_NTB32) 6191bfc9b14Sgerhard uDWord dwNtbInMaxSize; 620ccb704bcSgerhard uWord wNdpInDivisor; 621ccb704bcSgerhard uWord wNdpInPayloadRemainder; 622ccb704bcSgerhard uWord wNdpInAlignment; 6231bfc9b14Sgerhard uWord wReserved1; 6241bfc9b14Sgerhard uDWord dwNtbOutMaxSize; 625ccb704bcSgerhard uWord wNdpOutDivisor; 626ccb704bcSgerhard uWord wNdpOutPayloadRemainder; 627ccb704bcSgerhard uWord wNdpOutAlignment; 6281bfc9b14Sgerhard uWord wNtbOutMaxDatagrams; 6291bfc9b14Sgerhard } __packed; 6301bfc9b14Sgerhard 6311bfc9b14Sgerhard /* 63227131187Sgerhard * NCM Encoding 63327131187Sgerhard */ 63427131187Sgerhard struct ncm_header16 { 63527131187Sgerhard #define NCM_HDR16_SIG 0x484d434e 63627131187Sgerhard uDWord dwSignature; 63727131187Sgerhard uWord wHeaderLength; 63827131187Sgerhard uWord wSequence; 63927131187Sgerhard uWord wBlockLength; 64027131187Sgerhard uWord wNdpIndex; 64127131187Sgerhard } __packed; 64227131187Sgerhard 64327131187Sgerhard struct ncm_header32 { 64427131187Sgerhard #define NCM_HDR32_SIG 0x686d636e 64527131187Sgerhard uDWord dwSignature; 64627131187Sgerhard uWord wHeaderLength; 64727131187Sgerhard uWord wSequence; 64827131187Sgerhard uDWord dwBlockLength; 64927131187Sgerhard uDWord dwNdpIndex; 65027131187Sgerhard } __packed; 65127131187Sgerhard 65227131187Sgerhard 65327131187Sgerhard #define MBIM_NCM_NTH_SIDSHIFT 24 65427131187Sgerhard #define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff) 65527131187Sgerhard 65627131187Sgerhard struct ncm_pointer16_dgram { 65727131187Sgerhard uWord wDatagramIndex; 65827131187Sgerhard uWord wDatagramLen; 65927131187Sgerhard } __packed; 66027131187Sgerhard 66127131187Sgerhard struct ncm_pointer16 { 66227131187Sgerhard #define MBIM_NCM_NTH16_IPS 0x00535049 66327131187Sgerhard #define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS) 66427131187Sgerhard #define MBIM_NCM_NTH16_SIG(s) \ 66527131187Sgerhard ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS) 66627131187Sgerhard uDWord dwSignature; 66727131187Sgerhard uWord wLength; 66827131187Sgerhard uWord wNextNdpIndex; 66927131187Sgerhard 67027131187Sgerhard /* Minimum is two datagrams, but can be more */ 671ccb704bcSgerhard struct ncm_pointer16_dgram dgram[1]; 67227131187Sgerhard } __packed; 67327131187Sgerhard 67427131187Sgerhard struct ncm_pointer32_dgram { 67527131187Sgerhard uDWord dwDatagramIndex; 67627131187Sgerhard uDWord dwDatagramLen; 67727131187Sgerhard } __packed; 67827131187Sgerhard 67927131187Sgerhard struct ncm_pointer32 { 68027131187Sgerhard #define MBIM_NCM_NTH32_IPS 0x00737069 68127131187Sgerhard #define MBIM_NCM_NTH32_ISISG(s) \ 68227131187Sgerhard (((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS) 68327131187Sgerhard #define MBIM_NCM_NTH32_SIG(s) \ 68427131187Sgerhard ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS) 68527131187Sgerhard uDWord dwSignature; 68627131187Sgerhard uWord wLength; 68727131187Sgerhard uWord wReserved6; 68827131187Sgerhard uDWord dwNextNdpIndex; 68927131187Sgerhard uDWord dwReserved12; 69027131187Sgerhard 69127131187Sgerhard /* Minimum is two datagrams, but can be more */ 692ccb704bcSgerhard struct ncm_pointer32_dgram dgram[1]; 69327131187Sgerhard } __packed; 69427131187Sgerhard 69527131187Sgerhard #endif /* _KERNEL */ 69627131187Sgerhard 69727131187Sgerhard #endif /* _MBIM_H_ */ 698