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