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