Home | History | Annotate | Line # | Download | only in usb
      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