Home | History | Annotate | Line # | Download | only in usb
      1  1.2    skrll /*	$NetBSD: if_umbreg.h,v 1.2 2020/03/21 06:54:32 skrll Exp $ */
      2  1.1  khorben /*	$OpenBSD: if_umb.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 _IF_UMBREG_H_
     26  1.1  khorben #define _IF_UMBREG_H_
     27  1.1  khorben 
     28  1.1  khorben struct umb_valdescr {
     29  1.1  khorben 	int		 val;
     30  1.1  khorben 	char const	*descr;
     31  1.1  khorben };
     32  1.1  khorben 
     33  1.1  khorben static const char *
     34  1.1  khorben umb_val2descr(const struct umb_valdescr *vdp, int val)
     35  1.1  khorben {
     36  1.1  khorben 	static char sval[32];
     37  1.1  khorben 
     38  1.1  khorben 	while (vdp->descr != NULL) {
     39  1.1  khorben 		if (vdp->val == val)
     40  1.1  khorben 			return vdp->descr;
     41  1.1  khorben 		vdp++;
     42  1.1  khorben 	}
     43  1.2    skrll 	snprintf(sval, sizeof(sval), "#%d", val);
     44  1.1  khorben 	return sval;
     45  1.1  khorben }
     46  1.1  khorben 
     47  1.1  khorben #define MBIM_REGSTATE_DESCRIPTIONS {				\
     48  1.1  khorben 	{ MBIM_REGSTATE_UNKNOWN,	"unknown" },		\
     49  1.1  khorben 	{ MBIM_REGSTATE_DEREGISTERED,	"not registered" },	\
     50  1.1  khorben 	{ MBIM_REGSTATE_SEARCHING,	"searching" },		\
     51  1.1  khorben 	{ MBIM_REGSTATE_HOME,		"home network" },	\
     52  1.1  khorben 	{ MBIM_REGSTATE_ROAMING,	"roaming network" },	\
     53  1.1  khorben 	{ MBIM_REGSTATE_PARTNER,	"partner network" },	\
     54  1.1  khorben 	{ MBIM_REGSTATE_DENIED,		"access denied" },	\
     55  1.1  khorben 	{ 0, NULL } }
     56  1.1  khorben 
     57  1.1  khorben #define MBIM_DATACLASS_DESCRIPTIONS {					\
     58  1.1  khorben 	{ MBIM_DATACLASS_NONE,				"none" },	\
     59  1.1  khorben 	{ MBIM_DATACLASS_GPRS,				"GPRS" },	\
     60  1.1  khorben 	{ MBIM_DATACLASS_EDGE,				"EDGE" },	\
     61  1.1  khorben 	{ MBIM_DATACLASS_UMTS,				"UMTS" },	\
     62  1.1  khorben 	{ MBIM_DATACLASS_HSDPA,				"HSDPA" },	\
     63  1.1  khorben 	{ MBIM_DATACLASS_HSUPA,				"HSUPA" },	\
     64  1.1  khorben 	{ MBIM_DATACLASS_HSDPA|MBIM_DATACLASS_HSUPA,	"HSPA" },	\
     65  1.1  khorben 	{ MBIM_DATACLASS_LTE,				"LTE" },	\
     66  1.1  khorben 	{ MBIM_DATACLASS_1XRTT,				"CDMA2000" },	\
     67  1.1  khorben 	{ MBIM_DATACLASS_1XEVDO,			"CDMA2000" },	\
     68  1.1  khorben 	{ MBIM_DATACLASS_1XEVDO_REV_A,			"CDMA2000" },	\
     69  1.1  khorben 	{ MBIM_DATACLASS_1XEVDV,			"CDMA2000" },	\
     70  1.1  khorben 	{ MBIM_DATACLASS_3XRTT,				"CDMA2000" },	\
     71  1.1  khorben 	{ MBIM_DATACLASS_1XEVDO_REV_B,			"CDMA2000" },	\
     72  1.1  khorben 	{ MBIM_DATACLASS_UMB,				"CDMA2000" },	\
     73  1.1  khorben 	{ MBIM_DATACLASS_CUSTOM,			"custom" },	\
     74  1.1  khorben 	{ 0, NULL } }
     75  1.1  khorben 
     76  1.1  khorben #define MBIM_1TO1_DESCRIPTION(m)	{ (m), #m }
     77  1.1  khorben #define MBIM_MESSAGES_DESCRIPTIONS {				\
     78  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_OPEN_MSG),			\
     79  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CLOSE_MSG),			\
     80  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_COMMAND_MSG),		\
     81  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_HOST_ERROR_MSG),		\
     82  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_OPEN_DONE),			\
     83  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CLOSE_DONE),			\
     84  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_COMMAND_DONE),		\
     85  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_FUNCTION_ERROR_MSG),		\
     86  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_INDICATE_STATUS_MSG),	\
     87  1.1  khorben 	{ 0, NULL } }
     88  1.1  khorben 
     89  1.1  khorben #define MBIM_STATUS_DESCRIPTION(m)	{ MBIM_STATUS_ ## m, #m }
     90  1.1  khorben #define MBIM_STATUS_DESCRIPTIONS {					\
     91  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SUCCESS),				\
     92  1.1  khorben 	MBIM_STATUS_DESCRIPTION(BUSY),					\
     93  1.1  khorben 	MBIM_STATUS_DESCRIPTION(FAILURE),				\
     94  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SIM_NOT_INSERTED),			\
     95  1.1  khorben 	MBIM_STATUS_DESCRIPTION(BAD_SIM),				\
     96  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PIN_REQUIRED),				\
     97  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PIN_DISABLED),				\
     98  1.1  khorben 	MBIM_STATUS_DESCRIPTION(NOT_REGISTERED),			\
     99  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PROVIDERS_NOT_FOUND),			\
    100  1.1  khorben 	MBIM_STATUS_DESCRIPTION(NO_DEVICE_SUPPORT),			\
    101  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PROVIDER_NOT_VISIBLE),			\
    102  1.1  khorben 	MBIM_STATUS_DESCRIPTION(DATA_CLASS_NOT_AVAILABLE),		\
    103  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PACKET_SERVICE_DETACHED),		\
    104  1.1  khorben 	MBIM_STATUS_DESCRIPTION(MAX_ACTIVATED_CONTEXTS),		\
    105  1.1  khorben 	MBIM_STATUS_DESCRIPTION(NOT_INITIALIZED),			\
    106  1.1  khorben 	MBIM_STATUS_DESCRIPTION(VOICE_CALL_IN_PROGRESS),		\
    107  1.1  khorben 	MBIM_STATUS_DESCRIPTION(CONTEXT_NOT_ACTIVATED),			\
    108  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SERVICE_NOT_ACTIVATED),			\
    109  1.1  khorben 	MBIM_STATUS_DESCRIPTION(INVALID_ACCESS_STRING),			\
    110  1.1  khorben 	MBIM_STATUS_DESCRIPTION(INVALID_USER_NAME_PWD),			\
    111  1.1  khorben 	MBIM_STATUS_DESCRIPTION(RADIO_POWER_OFF),			\
    112  1.1  khorben 	MBIM_STATUS_DESCRIPTION(INVALID_PARAMETERS),			\
    113  1.1  khorben 	MBIM_STATUS_DESCRIPTION(READ_FAILURE),				\
    114  1.1  khorben 	MBIM_STATUS_DESCRIPTION(WRITE_FAILURE),				\
    115  1.1  khorben 	MBIM_STATUS_DESCRIPTION(NO_PHONEBOOK),				\
    116  1.1  khorben 	MBIM_STATUS_DESCRIPTION(PARAMETER_TOO_LONG),			\
    117  1.1  khorben 	MBIM_STATUS_DESCRIPTION(STK_BUSY),				\
    118  1.1  khorben 	MBIM_STATUS_DESCRIPTION(OPERATION_NOT_ALLOWED),			\
    119  1.1  khorben 	MBIM_STATUS_DESCRIPTION(MEMORY_FAILURE),			\
    120  1.1  khorben 	MBIM_STATUS_DESCRIPTION(INVALID_MEMORY_INDEX),			\
    121  1.1  khorben 	MBIM_STATUS_DESCRIPTION(MEMORY_FULL),				\
    122  1.1  khorben 	MBIM_STATUS_DESCRIPTION(FILTER_NOT_SUPPORTED),			\
    123  1.1  khorben 	MBIM_STATUS_DESCRIPTION(DSS_INSTANCE_LIMIT),			\
    124  1.1  khorben 	MBIM_STATUS_DESCRIPTION(INVALID_DEVICE_SERVICE_OPERATION),	\
    125  1.1  khorben 	MBIM_STATUS_DESCRIPTION(AUTH_INCORRECT_AUTN),			\
    126  1.1  khorben 	MBIM_STATUS_DESCRIPTION(AUTH_SYNC_FAILURE),			\
    127  1.1  khorben 	MBIM_STATUS_DESCRIPTION(AUTH_AMF_NOT_SET),			\
    128  1.1  khorben 	MBIM_STATUS_DESCRIPTION(CONTEXT_NOT_SUPPORTED),			\
    129  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SMS_UNKNOWN_SMSC_ADDRESS),		\
    130  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SMS_NETWORK_TIMEOUT),			\
    131  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SMS_LANG_NOT_SUPPORTED),		\
    132  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SMS_ENCODING_NOT_SUPPORTED),		\
    133  1.1  khorben 	MBIM_STATUS_DESCRIPTION(SMS_FORMAT_NOT_SUPPORTED),		\
    134  1.1  khorben 	{ 0, NULL } }
    135  1.1  khorben 
    136  1.1  khorben #define MBIM_ERROR_DESCRIPTION(m)	{ MBIM_ERROR_ ## m, #m }
    137  1.1  khorben #define MBIM_ERROR_DESCRIPTIONS {					\
    138  1.1  khorben 	MBIM_ERROR_DESCRIPTION(TIMEOUT_FRAGMENT),			\
    139  1.1  khorben 	MBIM_ERROR_DESCRIPTION(FRAGMENT_OUT_OF_SEQUENCE),		\
    140  1.1  khorben 	MBIM_ERROR_DESCRIPTION(LENGTH_MISMATCH),			\
    141  1.1  khorben 	MBIM_ERROR_DESCRIPTION(DUPLICATED_TID),				\
    142  1.1  khorben 	MBIM_ERROR_DESCRIPTION(NOT_OPENED),				\
    143  1.1  khorben 	MBIM_ERROR_DESCRIPTION(UNKNOWN),				\
    144  1.1  khorben 	MBIM_ERROR_DESCRIPTION(CANCEL),					\
    145  1.1  khorben 	MBIM_ERROR_DESCRIPTION(MAX_TRANSFER),				\
    146  1.1  khorben 	{ 0, NULL } }
    147  1.1  khorben 
    148  1.1  khorben #define MBIM_CID_DESCRIPTIONS {						\
    149  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_CAPS),			\
    150  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_SUBSCRIBER_READY_STATUS),	\
    151  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_RADIO_STATE),			\
    152  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PIN),				\
    153  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PIN_LIST),			\
    154  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_HOME_PROVIDER),			\
    155  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PREFERRED_PROVIDERS),		\
    156  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_VISIBLE_PROVIDERS),		\
    157  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_REGISTER_STATE),			\
    158  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PACKET_SERVICE),			\
    159  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_SIGNAL_STATE),			\
    160  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_CONNECT),			\
    161  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PROVISIONED_CONTEXTS),		\
    162  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_SERVICE_ACTIVATION),		\
    163  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_IP_CONFIGURATION),		\
    164  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_SERVICES),		\
    165  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST),	\
    166  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_PACKET_STATISTICS),		\
    167  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_NETWORK_IDLE_HINT),		\
    168  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_EMERGENCY_MODE),			\
    169  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_IP_PACKET_FILTERS),		\
    170  1.1  khorben 	MBIM_1TO1_DESCRIPTION(MBIM_CID_MULTICARRIER_PROVIDERS),		\
    171  1.1  khorben 	{ 0, NULL } }
    172  1.1  khorben 
    173  1.1  khorben #define MBIM_SIMSTATE_DESCRIPTIONS {					\
    174  1.1  khorben 	{ MBIM_SIMSTATE_NOTINITIALIZED, "not initialized" },		\
    175  1.1  khorben 	{ MBIM_SIMSTATE_INITIALIZED, "initialized" },			\
    176  1.1  khorben 	{ MBIM_SIMSTATE_NOTINSERTED, "not inserted" },			\
    177  1.1  khorben 	{ MBIM_SIMSTATE_BADSIM, "bad type" },				\
    178  1.1  khorben 	{ MBIM_SIMSTATE_FAILURE, "failed" },				\
    179  1.1  khorben 	{ MBIM_SIMSTATE_NOTACTIVATED, "not activated" },		\
    180  1.1  khorben 	{ MBIM_SIMSTATE_LOCKED, "locked" },				\
    181  1.1  khorben 	{ 0, NULL } }
    182  1.1  khorben 
    183  1.1  khorben #define MBIM_PINTYPE_DESCRIPTIONS {					\
    184  1.1  khorben 	{ MBIM_PIN_TYPE_NONE, "none" },					\
    185  1.1  khorben 	{ MBIM_PIN_TYPE_CUSTOM, "custom" },				\
    186  1.1  khorben 	{ MBIM_PIN_TYPE_PIN1, "PIN1" },					\
    187  1.1  khorben 	{ MBIM_PIN_TYPE_PIN2, "PIN2" },					\
    188  1.1  khorben 	{ MBIM_PIN_TYPE_DEV_SIM_PIN, "device PIN" },			\
    189  1.1  khorben 	{ MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN, "device 1st PIN" },		\
    190  1.1  khorben 	{ MBIM_PIN_TYPE_NETWORK_PIN, "network PIN" },			\
    191  1.1  khorben 	{ MBIM_PIN_TYPE_NETWORK_SUBSET_PIN, "network subset PIN" },	\
    192  1.1  khorben 	{ MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN, "provider PIN" },		\
    193  1.1  khorben 	{ MBIM_PIN_TYPE_CORPORATE_PIN, "corporate PIN" },		\
    194  1.1  khorben 	{ MBIM_PIN_TYPE_SUBSIDY_LOCK, "subsidy lock" },			\
    195  1.1  khorben 	{ MBIM_PIN_TYPE_PUK1, "PUK" },					\
    196  1.1  khorben 	{ MBIM_PIN_TYPE_PUK2, "PUK2" },					\
    197  1.1  khorben 	{ MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK, "device 1st PUK" },		\
    198  1.1  khorben 	{ MBIM_PIN_TYPE_NETWORK_PUK, "network PUK" },			\
    199  1.1  khorben 	{ MBIM_PIN_TYPE_NETWORK_SUBSET_PUK, "network subset PUK" },	\
    200  1.1  khorben 	{ MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK, "provider PUK" },		\
    201  1.1  khorben 	{ MBIM_PIN_TYPE_CORPORATE_PUK, "corporate PUK" },		\
    202  1.1  khorben 	{ 0, NULL } }
    203  1.1  khorben 
    204  1.1  khorben #define MBIM_PKTSRV_STATE_DESCRIPTIONS {				\
    205  1.1  khorben 	{ MBIM_PKTSERVICE_STATE_UNKNOWN, "unknown" },			\
    206  1.1  khorben 	{ MBIM_PKTSERVICE_STATE_ATTACHING, "attaching" },		\
    207  1.1  khorben 	{ MBIM_PKTSERVICE_STATE_ATTACHED, "attached" },			\
    208  1.1  khorben 	{ MBIM_PKTSERVICE_STATE_DETACHING, "detaching" },		\
    209  1.1  khorben 	{ MBIM_PKTSERVICE_STATE_DETACHED, "detached" },			\
    210  1.1  khorben 	{ 0, NULL } }
    211  1.1  khorben 
    212  1.1  khorben #define MBIM_ACTIVATION_STATE_DESCRIPTIONS {				\
    213  1.1  khorben 	{ MBIM_ACTIVATION_STATE_UNKNOWN, "unknown" },			\
    214  1.1  khorben 	{ MBIM_ACTIVATION_STATE_ACTIVATED, "activated" },		\
    215  1.1  khorben 	{ MBIM_ACTIVATION_STATE_ACTIVATING, "activating" },		\
    216  1.1  khorben 	{ MBIM_ACTIVATION_STATE_DEACTIVATED, "deactivated" },		\
    217  1.1  khorben 	{ MBIM_ACTIVATION_STATE_DEACTIVATING, "deactivating" },		\
    218  1.1  khorben 	{ 0, NULL } }
    219  1.1  khorben 
    220  1.1  khorben /*
    221  1.1  khorben  * Driver internal state
    222  1.1  khorben  */
    223  1.1  khorben enum umb_state {
    224  1.1  khorben 	UMB_S_DOWN = 0,		/* interface down */
    225  1.1  khorben 	UMB_S_OPEN,		/* MBIM device has been opened */
    226  1.1  khorben 	UMB_S_CID,		/* QMI client id allocated */
    227  1.1  khorben 	UMB_S_RADIO,		/* radio is on */
    228  1.1  khorben 	UMB_S_SIMREADY,		/* SIM is ready */
    229  1.1  khorben 	UMB_S_ATTACHED,		/* packet service is attached */
    230  1.1  khorben 	UMB_S_CONNECTED,	/* connected to provider */
    231  1.1  khorben 	UMB_S_UP,		/* have IP configuration */
    232  1.1  khorben };
    233  1.1  khorben 
    234  1.1  khorben #define UMB_INTERNAL_STATE_DESCRIPTIONS {	\
    235  1.1  khorben 	{ UMB_S_DOWN, "down" },			\
    236  1.1  khorben 	{ UMB_S_OPEN, "open" },			\
    237  1.1  khorben 	{ UMB_S_CID, "CID allocated" },		\
    238  1.1  khorben 	{ UMB_S_RADIO, "radio on" },		\
    239  1.1  khorben 	{ UMB_S_SIMREADY, "SIM is ready" },	\
    240  1.1  khorben 	{ UMB_S_ATTACHED, "attached" },		\
    241  1.1  khorben 	{ UMB_S_CONNECTED, "connected" },	\
    242  1.1  khorben 	{ UMB_S_UP, "up" },			\
    243  1.1  khorben 	{ 0, NULL } }
    244  1.1  khorben 
    245  1.1  khorben /*
    246  1.1  khorben  * UMB parameters (SIOC[GS]UMBPARAM ioctls)
    247  1.1  khorben  */
    248  1.1  khorben struct umb_parameter {
    249  1.1  khorben 	int			op;
    250  1.1  khorben 	int			is_puk;
    251  1.1  khorben 	uint16_t		pin[MBIM_PIN_MAXLEN];
    252  1.1  khorben 	int			pinlen;
    253  1.1  khorben 
    254  1.1  khorben 	char			newpin[MBIM_PIN_MAXLEN];
    255  1.1  khorben 	int			newpinlen;
    256  1.1  khorben 
    257  1.1  khorben #define UMB_APN_MAXLEN		100
    258  1.1  khorben 	uint16_t		apn[UMB_APN_MAXLEN];
    259  1.1  khorben 	int			apnlen;
    260  1.1  khorben 
    261  1.1  khorben #define UMB_USERNAME_MAXLEN	205
    262  1.1  khorben 	uint16_t		username[UMB_USERNAME_MAXLEN];
    263  1.1  khorben 	int			usernamelen;
    264  1.1  khorben 
    265  1.1  khorben #define UMB_PASSWORD_MAXLEN	205
    266  1.1  khorben 	uint16_t		password[UMB_PASSWORD_MAXLEN];
    267  1.1  khorben 	int			passwordlen;
    268  1.1  khorben 
    269  1.1  khorben 	int			roaming;
    270  1.1  khorben 	uint32_t		preferredclasses;
    271  1.1  khorben };
    272  1.1  khorben 
    273  1.1  khorben /*
    274  1.1  khorben  * UMB device status info (SIOCGUMBINFO ioctl)
    275  1.1  khorben  */
    276  1.1  khorben struct umb_info {
    277  1.1  khorben 	enum umb_state		state;
    278  1.1  khorben 	int			enable_roaming;
    279  1.1  khorben #define UMB_PIN_REQUIRED	0
    280  1.1  khorben #define UMB_PIN_UNLOCKED	1
    281  1.1  khorben #define UMB_PUK_REQUIRED	2
    282  1.1  khorben 	int			pin_state;
    283  1.1  khorben 	int			pin_attempts_left;
    284  1.1  khorben 	int			activation;
    285  1.1  khorben 	int			sim_state;
    286  1.1  khorben 	int			regstate;
    287  1.1  khorben 	int			regmode;
    288  1.1  khorben 	int			nwerror;
    289  1.1  khorben 	int			packetstate;
    290  1.1  khorben 	uint32_t		supportedclasses; /* what the hw supports */
    291  1.1  khorben 	uint32_t		preferredclasses; /* what the user prefers */
    292  1.1  khorben 	uint32_t		highestclass;	/* what the network offers */
    293  1.1  khorben 	uint32_t		cellclass;
    294  1.1  khorben #define UMB_PROVIDERNAME_MAXLEN		20
    295  1.1  khorben 	uint16_t		provider[UMB_PROVIDERNAME_MAXLEN];
    296  1.1  khorben #define UMB_PHONENR_MAXLEN		22
    297  1.1  khorben 	uint16_t		pn[UMB_PHONENR_MAXLEN];
    298  1.1  khorben #define UMB_SUBSCRIBERID_MAXLEN		15
    299  1.1  khorben 	uint16_t		sid[UMB_SUBSCRIBERID_MAXLEN];
    300  1.1  khorben #define UMB_ICCID_MAXLEN		20
    301  1.1  khorben 	uint16_t		iccid[UMB_ICCID_MAXLEN];
    302  1.1  khorben #define UMB_ROAMINGTEXT_MAXLEN		63
    303  1.1  khorben 	uint16_t		roamingtxt[UMB_ROAMINGTEXT_MAXLEN];
    304  1.1  khorben 
    305  1.1  khorben #define UMB_DEVID_MAXLEN		18
    306  1.1  khorben 	uint16_t		devid[UMB_DEVID_MAXLEN];
    307  1.1  khorben #define UMB_FWINFO_MAXLEN		30
    308  1.1  khorben 	uint16_t		fwinfo[UMB_FWINFO_MAXLEN];
    309  1.1  khorben #define UMB_HWINFO_MAXLEN		30
    310  1.1  khorben 	uint16_t		hwinfo[UMB_HWINFO_MAXLEN];
    311  1.1  khorben 
    312  1.1  khorben 	uint16_t		apn[UMB_APN_MAXLEN];
    313  1.1  khorben 	int			apnlen;
    314  1.1  khorben 
    315  1.1  khorben 	uint16_t		username[UMB_USERNAME_MAXLEN];
    316  1.1  khorben 	int			usernamelen;
    317  1.1  khorben 
    318  1.1  khorben 	uint16_t		password[UMB_PASSWORD_MAXLEN];
    319  1.1  khorben 	int			passwordlen;
    320  1.1  khorben 
    321  1.1  khorben #define UMB_VALUE_UNKNOWN	-999
    322  1.1  khorben 	int			rssi;
    323  1.1  khorben #define UMB_BER_EXCELLENT	0
    324  1.1  khorben #define UMB_BER_VERYGOOD	1
    325  1.1  khorben #define UMB_BER_GOOD		2
    326  1.1  khorben #define UMB_BER_OK		3
    327  1.1  khorben #define UMB_BER_MEDIUM		4
    328  1.1  khorben #define UMB_BER_BAD		5
    329  1.1  khorben #define UMB_BER_VERYBAD		6
    330  1.1  khorben #define UMB_BER_EXTREMELYBAD	7
    331  1.1  khorben 	int			ber;
    332  1.1  khorben 
    333  1.1  khorben 	int			hw_radio_on;
    334  1.1  khorben 	int			sw_radio_on;
    335  1.1  khorben 
    336  1.1  khorben 	uint64_t		uplink_speed;
    337  1.1  khorben 	uint64_t		downlink_speed;
    338  1.1  khorben 
    339  1.1  khorben #define UMB_MAX_DNSSRV			2
    340  1.1  khorben 	u_int32_t		ipv4dns[UMB_MAX_DNSSRV];
    341  1.1  khorben };
    342  1.1  khorben 
    343  1.1  khorben #if !defined(ifr_mtu)
    344  1.1  khorben #define ifr_mtu	ifr_ifru.ifru_metric
    345  1.1  khorben #endif
    346  1.1  khorben 
    347  1.1  khorben #ifdef _KERNEL
    348  1.1  khorben /*
    349  1.1  khorben  * UMB device
    350  1.1  khorben  */
    351  1.1  khorben struct umb_softc {
    352  1.1  khorben 	device_t		 sc_dev;
    353  1.1  khorben 	struct ifnet		 sc_if;
    354  1.1  khorben #define GET_IFP(sc)	(&(sc)->sc_if)
    355  1.1  khorben 	struct ifmedia		 sc_im;
    356  1.1  khorben 	krndsource_t		 sc_rnd_source;
    357  1.1  khorben 	struct usbd_device	*sc_udev;
    358  1.1  khorben 
    359  1.1  khorben 	int			 sc_ver_maj;
    360  1.1  khorben 	int			 sc_ver_min;
    361  1.1  khorben 	int			 sc_ctrl_len;
    362  1.1  khorben 	int			 sc_maxpktlen;
    363  1.1  khorben 	int			 sc_maxsessions;
    364  1.1  khorben 
    365  1.1  khorben #define UMBFLG_FCC_AUTH_REQUIRED	0x0001
    366  1.1  khorben 	uint32_t		 sc_flags;
    367  1.1  khorben 	int			 sc_cid;
    368  1.1  khorben 
    369  1.1  khorben 	struct usb_task		 sc_umb_task;
    370  1.1  khorben 	struct usb_task		 sc_get_response_task;
    371  1.1  khorben 	int			 sc_nresp;
    372  1.1  khorben 	callout_t		 sc_statechg_timer;
    373  1.1  khorben 	char			 sc_dying;
    374  1.1  khorben 	char			 sc_attached;
    375  1.1  khorben 
    376  1.1  khorben 	uint8_t			 sc_ctrl_ifaceno;
    377  1.1  khorben 	struct usbd_pipe	*sc_ctrl_pipe;
    378  1.1  khorben 	usb_cdc_notification_t	 sc_intr_msg;
    379  1.1  khorben 	struct usbd_interface	*sc_data_iface;
    380  1.1  khorben 
    381  1.1  khorben 	void			*sc_resp_buf;
    382  1.1  khorben 	void			*sc_ctrl_msg;
    383  1.1  khorben 
    384  1.1  khorben 	int			 sc_rx_ep;
    385  1.1  khorben 	struct usbd_xfer	*sc_rx_xfer;
    386  1.1  khorben 	char			*sc_rx_buf;
    387  1.1  khorben 	int			 sc_rx_bufsz;
    388  1.1  khorben 	struct usbd_pipe	*sc_rx_pipe;
    389  1.1  khorben 	unsigned		 sc_rx_nerr;
    390  1.1  khorben 
    391  1.1  khorben 	int			 sc_tx_ep;
    392  1.1  khorben 	struct usbd_xfer	*sc_tx_xfer;
    393  1.1  khorben 	char			*sc_tx_buf;
    394  1.1  khorben 	int			 sc_tx_bufsz;
    395  1.1  khorben 	struct usbd_pipe	*sc_tx_pipe;
    396  1.1  khorben 	struct mbuf		*sc_tx_m;
    397  1.1  khorben 	uint32_t		 sc_tx_seq;
    398  1.1  khorben 
    399  1.1  khorben 	uint32_t		 sc_tid;
    400  1.1  khorben 
    401  1.1  khorben #define sc_state		sc_info.state
    402  1.1  khorben #define sc_roaming		sc_info.enable_roaming
    403  1.1  khorben 	struct umb_info		sc_info;
    404  1.1  khorben };
    405  1.1  khorben #endif /* _KERNEL */
    406  1.1  khorben 
    407  1.1  khorben #endif /* _IF_UMBREG_H_ */
    408