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