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