1*16cce00fSdlg /* $OpenBSD: if_umb.h,v 1.11 2023/08/29 23:26:40 dlg Exp $ */
227131187Sgerhard
327131187Sgerhard /*
427131187Sgerhard * Copyright (c) 2016 genua mbH
527131187Sgerhard * All rights reserved.
627131187Sgerhard *
727131187Sgerhard * Permission to use, copy, modify, and distribute this software for any
827131187Sgerhard * purpose with or without fee is hereby granted, provided that the above
927131187Sgerhard * copyright notice and this permission notice appear in all copies.
1027131187Sgerhard *
1127131187Sgerhard * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1227131187Sgerhard * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1327131187Sgerhard * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1427131187Sgerhard * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1527131187Sgerhard * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1627131187Sgerhard * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1727131187Sgerhard * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1827131187Sgerhard */
1927131187Sgerhard
2027131187Sgerhard /*
2127131187Sgerhard * Mobile Broadband Interface Model
222b01c74bSsthen * https://www.usb.org/sites/default/files/MBIM-Compliance-1.0.pdf
2327131187Sgerhard */
2427131187Sgerhard
2527131187Sgerhard struct umb_valdescr {
2627131187Sgerhard int val;
2727131187Sgerhard char *descr;
2827131187Sgerhard };
2927131187Sgerhard
3027131187Sgerhard static const char *
umb_val2descr(const struct umb_valdescr * vdp,int val)3127131187Sgerhard umb_val2descr(const struct umb_valdescr *vdp, int val)
3227131187Sgerhard {
3327131187Sgerhard static char sval[32];
3427131187Sgerhard
3527131187Sgerhard while (vdp->descr != NULL) {
3627131187Sgerhard if (vdp->val == val)
3727131187Sgerhard return vdp->descr;
3827131187Sgerhard vdp++;
3927131187Sgerhard }
4027131187Sgerhard snprintf(sval, sizeof (sval), "#%d", val);
4127131187Sgerhard return sval;
4227131187Sgerhard }
4327131187Sgerhard
4427131187Sgerhard #define MBIM_REGSTATE_DESCRIPTIONS { \
4527131187Sgerhard { MBIM_REGSTATE_UNKNOWN, "unknown" }, \
4627131187Sgerhard { MBIM_REGSTATE_DEREGISTERED, "not registered" }, \
4727131187Sgerhard { MBIM_REGSTATE_SEARCHING, "searching" }, \
4827131187Sgerhard { MBIM_REGSTATE_HOME, "home network" }, \
4927131187Sgerhard { MBIM_REGSTATE_ROAMING, "roaming network" }, \
5027131187Sgerhard { MBIM_REGSTATE_PARTNER, "partner network" }, \
5127131187Sgerhard { MBIM_REGSTATE_DENIED, "access denied" }, \
5227131187Sgerhard { 0, NULL } }
5327131187Sgerhard
5427131187Sgerhard #define MBIM_DATACLASS_DESCRIPTIONS { \
5527131187Sgerhard { MBIM_DATACLASS_NONE, "none" }, \
5627131187Sgerhard { MBIM_DATACLASS_GPRS, "GPRS" }, \
5727131187Sgerhard { MBIM_DATACLASS_EDGE, "EDGE" }, \
5827131187Sgerhard { MBIM_DATACLASS_UMTS, "UMTS" }, \
5927131187Sgerhard { MBIM_DATACLASS_HSDPA, "HSDPA" }, \
6027131187Sgerhard { MBIM_DATACLASS_HSUPA, "HSUPA" }, \
6127131187Sgerhard { MBIM_DATACLASS_HSDPA|MBIM_DATACLASS_HSUPA, "HSPA" }, \
6227131187Sgerhard { MBIM_DATACLASS_LTE, "LTE" }, \
6327131187Sgerhard { MBIM_DATACLASS_1XRTT, "CDMA2000" }, \
6427131187Sgerhard { MBIM_DATACLASS_1XEVDO, "CDMA2000" }, \
6527131187Sgerhard { MBIM_DATACLASS_1XEVDO_REV_A, "CDMA2000" }, \
6627131187Sgerhard { MBIM_DATACLASS_1XEVDV, "CDMA2000" }, \
6727131187Sgerhard { MBIM_DATACLASS_3XRTT, "CDMA2000" }, \
6827131187Sgerhard { MBIM_DATACLASS_1XEVDO_REV_B, "CDMA2000" }, \
6927131187Sgerhard { MBIM_DATACLASS_UMB, "CDMA2000" }, \
7027131187Sgerhard { MBIM_DATACLASS_CUSTOM, "custom" }, \
7127131187Sgerhard { 0, NULL } }
7227131187Sgerhard
7327131187Sgerhard #define MBIM_1TO1_DESCRIPTION(m) { (m), #m }
7427131187Sgerhard #define MBIM_MESSAGES_DESCRIPTIONS { \
7527131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_OPEN_MSG), \
7627131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CLOSE_MSG), \
7727131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_COMMAND_MSG), \
7827131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_HOST_ERROR_MSG), \
7927131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_OPEN_DONE), \
8027131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CLOSE_DONE), \
8127131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_COMMAND_DONE), \
8227131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_FUNCTION_ERROR_MSG), \
8327131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_INDICATE_STATUS_MSG), \
8427131187Sgerhard { 0, NULL } }
8527131187Sgerhard
8627131187Sgerhard #define MBIM_STATUS_DESCRIPTION(m) { MBIM_STATUS_ ## m, #m }
8727131187Sgerhard #define MBIM_STATUS_DESCRIPTIONS { \
8827131187Sgerhard MBIM_STATUS_DESCRIPTION(SUCCESS), \
8927131187Sgerhard MBIM_STATUS_DESCRIPTION(BUSY), \
9027131187Sgerhard MBIM_STATUS_DESCRIPTION(FAILURE), \
9127131187Sgerhard MBIM_STATUS_DESCRIPTION(SIM_NOT_INSERTED), \
9227131187Sgerhard MBIM_STATUS_DESCRIPTION(BAD_SIM), \
9327131187Sgerhard MBIM_STATUS_DESCRIPTION(PIN_REQUIRED), \
9427131187Sgerhard MBIM_STATUS_DESCRIPTION(PIN_DISABLED), \
9527131187Sgerhard MBIM_STATUS_DESCRIPTION(NOT_REGISTERED), \
9627131187Sgerhard MBIM_STATUS_DESCRIPTION(PROVIDERS_NOT_FOUND), \
9727131187Sgerhard MBIM_STATUS_DESCRIPTION(NO_DEVICE_SUPPORT), \
9827131187Sgerhard MBIM_STATUS_DESCRIPTION(PROVIDER_NOT_VISIBLE), \
9927131187Sgerhard MBIM_STATUS_DESCRIPTION(DATA_CLASS_NOT_AVAILABLE), \
10027131187Sgerhard MBIM_STATUS_DESCRIPTION(PACKET_SERVICE_DETACHED), \
10127131187Sgerhard MBIM_STATUS_DESCRIPTION(MAX_ACTIVATED_CONTEXTS), \
10227131187Sgerhard MBIM_STATUS_DESCRIPTION(NOT_INITIALIZED), \
10327131187Sgerhard MBIM_STATUS_DESCRIPTION(VOICE_CALL_IN_PROGRESS), \
10427131187Sgerhard MBIM_STATUS_DESCRIPTION(CONTEXT_NOT_ACTIVATED), \
10527131187Sgerhard MBIM_STATUS_DESCRIPTION(SERVICE_NOT_ACTIVATED), \
10627131187Sgerhard MBIM_STATUS_DESCRIPTION(INVALID_ACCESS_STRING), \
10727131187Sgerhard MBIM_STATUS_DESCRIPTION(INVALID_USER_NAME_PWD), \
10827131187Sgerhard MBIM_STATUS_DESCRIPTION(RADIO_POWER_OFF), \
10927131187Sgerhard MBIM_STATUS_DESCRIPTION(INVALID_PARAMETERS), \
11027131187Sgerhard MBIM_STATUS_DESCRIPTION(READ_FAILURE), \
11127131187Sgerhard MBIM_STATUS_DESCRIPTION(WRITE_FAILURE), \
11227131187Sgerhard MBIM_STATUS_DESCRIPTION(NO_PHONEBOOK), \
11327131187Sgerhard MBIM_STATUS_DESCRIPTION(PARAMETER_TOO_LONG), \
11427131187Sgerhard MBIM_STATUS_DESCRIPTION(STK_BUSY), \
11527131187Sgerhard MBIM_STATUS_DESCRIPTION(OPERATION_NOT_ALLOWED), \
11627131187Sgerhard MBIM_STATUS_DESCRIPTION(MEMORY_FAILURE), \
11727131187Sgerhard MBIM_STATUS_DESCRIPTION(INVALID_MEMORY_INDEX), \
11827131187Sgerhard MBIM_STATUS_DESCRIPTION(MEMORY_FULL), \
11927131187Sgerhard MBIM_STATUS_DESCRIPTION(FILTER_NOT_SUPPORTED), \
12027131187Sgerhard MBIM_STATUS_DESCRIPTION(DSS_INSTANCE_LIMIT), \
12127131187Sgerhard MBIM_STATUS_DESCRIPTION(INVALID_DEVICE_SERVICE_OPERATION), \
12227131187Sgerhard MBIM_STATUS_DESCRIPTION(AUTH_INCORRECT_AUTN), \
12327131187Sgerhard MBIM_STATUS_DESCRIPTION(AUTH_SYNC_FAILURE), \
12427131187Sgerhard MBIM_STATUS_DESCRIPTION(AUTH_AMF_NOT_SET), \
12527131187Sgerhard MBIM_STATUS_DESCRIPTION(CONTEXT_NOT_SUPPORTED), \
12627131187Sgerhard MBIM_STATUS_DESCRIPTION(SMS_UNKNOWN_SMSC_ADDRESS), \
12727131187Sgerhard MBIM_STATUS_DESCRIPTION(SMS_NETWORK_TIMEOUT), \
12827131187Sgerhard MBIM_STATUS_DESCRIPTION(SMS_LANG_NOT_SUPPORTED), \
12927131187Sgerhard MBIM_STATUS_DESCRIPTION(SMS_ENCODING_NOT_SUPPORTED), \
13027131187Sgerhard MBIM_STATUS_DESCRIPTION(SMS_FORMAT_NOT_SUPPORTED), \
13127131187Sgerhard { 0, NULL } }
13227131187Sgerhard
13327131187Sgerhard #define MBIM_ERROR_DESCRIPTION(m) { MBIM_ERROR_ ## m, #m }
13427131187Sgerhard #define MBIM_ERROR_DESCRIPTIONS { \
13527131187Sgerhard MBIM_ERROR_DESCRIPTION(TIMEOUT_FRAGMENT), \
13627131187Sgerhard MBIM_ERROR_DESCRIPTION(FRAGMENT_OUT_OF_SEQUENCE), \
13727131187Sgerhard MBIM_ERROR_DESCRIPTION(LENGTH_MISMATCH), \
13827131187Sgerhard MBIM_ERROR_DESCRIPTION(DUPLICATED_TID), \
13927131187Sgerhard MBIM_ERROR_DESCRIPTION(NOT_OPENED), \
14027131187Sgerhard MBIM_ERROR_DESCRIPTION(UNKNOWN), \
14127131187Sgerhard MBIM_ERROR_DESCRIPTION(CANCEL), \
14227131187Sgerhard MBIM_ERROR_DESCRIPTION(MAX_TRANSFER), \
14327131187Sgerhard { 0, NULL } }
14427131187Sgerhard
14527131187Sgerhard #define MBIM_CID_DESCRIPTIONS { \
14627131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_CAPS), \
14727131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_SUBSCRIBER_READY_STATUS), \
14827131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_RADIO_STATE), \
14927131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PIN), \
15027131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PIN_LIST), \
15127131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_HOME_PROVIDER), \
15227131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PREFERRED_PROVIDERS), \
15327131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_VISIBLE_PROVIDERS), \
15427131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_REGISTER_STATE), \
15527131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PACKET_SERVICE), \
15627131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_SIGNAL_STATE), \
15727131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_CONNECT), \
15827131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PROVISIONED_CONTEXTS), \
15927131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_SERVICE_ACTIVATION), \
16027131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_IP_CONFIGURATION), \
16127131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_SERVICES), \
16227131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST), \
16327131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_PACKET_STATISTICS), \
16427131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_NETWORK_IDLE_HINT), \
16527131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_EMERGENCY_MODE), \
16627131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_IP_PACKET_FILTERS), \
16727131187Sgerhard MBIM_1TO1_DESCRIPTION(MBIM_CID_MULTICARRIER_PROVIDERS), \
16827131187Sgerhard { 0, NULL } }
16927131187Sgerhard
17027131187Sgerhard #define MBIM_SIMSTATE_DESCRIPTIONS { \
17127131187Sgerhard { MBIM_SIMSTATE_NOTINITIALIZED, "not initialized" }, \
17227131187Sgerhard { MBIM_SIMSTATE_INITIALIZED, "initialized" }, \
17327131187Sgerhard { MBIM_SIMSTATE_NOTINSERTED, "not inserted" }, \
17427131187Sgerhard { MBIM_SIMSTATE_BADSIM, "bad type" }, \
17527131187Sgerhard { MBIM_SIMSTATE_FAILURE, "failed" }, \
17627131187Sgerhard { MBIM_SIMSTATE_NOTACTIVATED, "not activated" }, \
17727131187Sgerhard { MBIM_SIMSTATE_LOCKED, "locked" }, \
17827131187Sgerhard { 0, NULL } }
17927131187Sgerhard
18027131187Sgerhard #define MBIM_PINTYPE_DESCRIPTIONS { \
18127131187Sgerhard { MBIM_PIN_TYPE_NONE, "none" }, \
18227131187Sgerhard { MBIM_PIN_TYPE_CUSTOM, "custom" }, \
18327131187Sgerhard { MBIM_PIN_TYPE_PIN1, "PIN1" }, \
18427131187Sgerhard { MBIM_PIN_TYPE_PIN2, "PIN2" }, \
18527131187Sgerhard { MBIM_PIN_TYPE_DEV_SIM_PIN, "device PIN" }, \
18627131187Sgerhard { MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN, "device 1st PIN" }, \
18727131187Sgerhard { MBIM_PIN_TYPE_NETWORK_PIN, "network PIN" }, \
18827131187Sgerhard { MBIM_PIN_TYPE_NETWORK_SUBSET_PIN, "network subset PIN" }, \
18927131187Sgerhard { MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN, "provider PIN" }, \
19027131187Sgerhard { MBIM_PIN_TYPE_CORPORATE_PIN, "corporate PIN" }, \
19127131187Sgerhard { MBIM_PIN_TYPE_SUBSIDY_LOCK, "subsidy lock" }, \
19227131187Sgerhard { MBIM_PIN_TYPE_PUK1, "PUK" }, \
19327131187Sgerhard { MBIM_PIN_TYPE_PUK2, "PUK2" }, \
19427131187Sgerhard { MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK, "device 1st PUK" }, \
19527131187Sgerhard { MBIM_PIN_TYPE_NETWORK_PUK, "network PUK" }, \
19627131187Sgerhard { MBIM_PIN_TYPE_NETWORK_SUBSET_PUK, "network subset PUK" }, \
19727131187Sgerhard { MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK, "provider PUK" }, \
19827131187Sgerhard { MBIM_PIN_TYPE_CORPORATE_PUK, "corporate PUK" }, \
19927131187Sgerhard { 0, NULL } }
20027131187Sgerhard
20127131187Sgerhard #define MBIM_PKTSRV_STATE_DESCRIPTIONS { \
20227131187Sgerhard { MBIM_PKTSERVICE_STATE_UNKNOWN, "unknown" }, \
20327131187Sgerhard { MBIM_PKTSERVICE_STATE_ATTACHING, "attaching" }, \
20427131187Sgerhard { MBIM_PKTSERVICE_STATE_ATTACHED, "attached" }, \
20527131187Sgerhard { MBIM_PKTSERVICE_STATE_DETACHING, "detaching" }, \
20627131187Sgerhard { MBIM_PKTSERVICE_STATE_DETACHED, "detached" }, \
20727131187Sgerhard { 0, NULL } }
20827131187Sgerhard
20927131187Sgerhard #define MBIM_ACTIVATION_STATE_DESCRIPTIONS { \
21027131187Sgerhard { MBIM_ACTIVATION_STATE_UNKNOWN, "unknown" }, \
21127131187Sgerhard { MBIM_ACTIVATION_STATE_ACTIVATED, "activated" }, \
21227131187Sgerhard { MBIM_ACTIVATION_STATE_ACTIVATING, "activating" }, \
21327131187Sgerhard { MBIM_ACTIVATION_STATE_DEACTIVATED, "deactivated" }, \
21427131187Sgerhard { MBIM_ACTIVATION_STATE_DEACTIVATING, "deactivating" }, \
21527131187Sgerhard { 0, NULL } }
21627131187Sgerhard
21727131187Sgerhard /*
21827131187Sgerhard * Driver internal state
21927131187Sgerhard */
22027131187Sgerhard enum umb_state {
22127131187Sgerhard UMB_S_DOWN = 0, /* interface down */
22227131187Sgerhard UMB_S_OPEN, /* MBIM device has been opened */
223f892d520Sgerhard UMB_S_CID, /* QMI client id allocated */
22427131187Sgerhard UMB_S_RADIO, /* radio is on */
22527131187Sgerhard UMB_S_SIMREADY, /* SIM is ready */
22627131187Sgerhard UMB_S_ATTACHED, /* packet service is attached */
22727131187Sgerhard UMB_S_CONNECTED, /* connected to provider */
22827131187Sgerhard UMB_S_UP, /* have IP configuration */
22927131187Sgerhard };
23027131187Sgerhard
23127131187Sgerhard #define UMB_INTERNAL_STATE_DESCRIPTIONS { \
23227131187Sgerhard { UMB_S_DOWN, "down" }, \
23327131187Sgerhard { UMB_S_OPEN, "open" }, \
234f892d520Sgerhard { UMB_S_CID, "CID allocated" }, \
23527131187Sgerhard { UMB_S_RADIO, "radio on" }, \
23627131187Sgerhard { UMB_S_SIMREADY, "SIM is ready" }, \
23727131187Sgerhard { UMB_S_ATTACHED, "attached" }, \
23827131187Sgerhard { UMB_S_CONNECTED, "connected" }, \
23927131187Sgerhard { UMB_S_UP, "up" }, \
24027131187Sgerhard { 0, NULL } }
24127131187Sgerhard
24227131187Sgerhard /*
24327131187Sgerhard * UMB parameters (SIOC[GS]UMBPARAM ioctls)
24427131187Sgerhard */
24527131187Sgerhard struct umb_parameter {
24627131187Sgerhard int op;
24727131187Sgerhard int is_puk;
24827131187Sgerhard char pin[MBIM_PIN_MAXLEN];
24927131187Sgerhard int pinlen;
25027131187Sgerhard
25127131187Sgerhard char newpin[MBIM_PIN_MAXLEN];
25227131187Sgerhard int newpinlen;
25327131187Sgerhard
25427131187Sgerhard #define UMB_APN_MAXLEN 100
25527131187Sgerhard uint16_t apn[UMB_APN_MAXLEN];
25627131187Sgerhard int apnlen;
25727131187Sgerhard
25827131187Sgerhard int roaming;
25927131187Sgerhard uint32_t preferredclasses;
26027131187Sgerhard };
26127131187Sgerhard
26227131187Sgerhard /*
26327131187Sgerhard * UMB device status info (SIOCGUMBINFO ioctl)
26427131187Sgerhard */
26527131187Sgerhard struct umb_info {
26627131187Sgerhard enum umb_state state;
26727131187Sgerhard int enable_roaming;
26827131187Sgerhard #define UMB_PIN_REQUIRED 0
26927131187Sgerhard #define UMB_PIN_UNLOCKED 1
27027131187Sgerhard #define UMB_PUK_REQUIRED 2
27127131187Sgerhard int pin_state;
27227131187Sgerhard int pin_attempts_left;
27327131187Sgerhard int activation;
27427131187Sgerhard int sim_state;
27527131187Sgerhard int regstate;
27627131187Sgerhard int regmode;
27727131187Sgerhard int nwerror;
27827131187Sgerhard int packetstate;
27927131187Sgerhard uint32_t supportedclasses; /* what the hw supports */
28027131187Sgerhard uint32_t preferredclasses; /* what the user prefers */
28127131187Sgerhard uint32_t highestclass; /* what the network offers */
28227131187Sgerhard uint32_t cellclass;
28327131187Sgerhard #define UMB_PROVIDERNAME_MAXLEN 20
28427131187Sgerhard uint16_t provider[UMB_PROVIDERNAME_MAXLEN];
2855a5baf73Ssthen #define UMB_PROVIDERID_MAXLEN 20
2865a5baf73Ssthen uint16_t providerid[UMB_PROVIDERID_MAXLEN];
28727131187Sgerhard #define UMB_PHONENR_MAXLEN 22
28827131187Sgerhard uint16_t pn[UMB_PHONENR_MAXLEN];
28927131187Sgerhard #define UMB_SUBSCRIBERID_MAXLEN 15
29027131187Sgerhard uint16_t sid[UMB_SUBSCRIBERID_MAXLEN];
29127131187Sgerhard #define UMB_ICCID_MAXLEN 20
29227131187Sgerhard uint16_t iccid[UMB_ICCID_MAXLEN];
29327131187Sgerhard #define UMB_ROAMINGTEXT_MAXLEN 63
29427131187Sgerhard uint16_t roamingtxt[UMB_ROAMINGTEXT_MAXLEN];
29527131187Sgerhard
29627131187Sgerhard #define UMB_DEVID_MAXLEN 18
29727131187Sgerhard uint16_t devid[UMB_DEVID_MAXLEN];
29827131187Sgerhard #define UMB_FWINFO_MAXLEN 30
29927131187Sgerhard uint16_t fwinfo[UMB_FWINFO_MAXLEN];
30027131187Sgerhard #define UMB_HWINFO_MAXLEN 30
30127131187Sgerhard uint16_t hwinfo[UMB_HWINFO_MAXLEN];
30227131187Sgerhard
30327131187Sgerhard uint16_t apn[UMB_APN_MAXLEN];
30427131187Sgerhard int apnlen;
30527131187Sgerhard
30627131187Sgerhard #define UMB_VALUE_UNKNOWN -999
30727131187Sgerhard int rssi;
30827131187Sgerhard #define UMB_BER_EXCELLENT 0
30927131187Sgerhard #define UMB_BER_VERYGOOD 1
31027131187Sgerhard #define UMB_BER_GOOD 2
31127131187Sgerhard #define UMB_BER_OK 3
31227131187Sgerhard #define UMB_BER_MEDIUM 4
31327131187Sgerhard #define UMB_BER_BAD 5
31427131187Sgerhard #define UMB_BER_VERYBAD 6
31527131187Sgerhard #define UMB_BER_EXTREMELYBAD 7
31627131187Sgerhard int ber;
31727131187Sgerhard
31827131187Sgerhard int hw_radio_on;
31927131187Sgerhard int sw_radio_on;
32027131187Sgerhard
32127131187Sgerhard uint64_t uplink_speed;
32227131187Sgerhard uint64_t downlink_speed;
32327131187Sgerhard
32427131187Sgerhard #define UMB_MAX_DNSSRV 2
32599980cd5Sclaudio struct in_addr ipv4dns[UMB_MAX_DNSSRV];
326e61a622dSgerhard struct in6_addr ipv6dns[UMB_MAX_DNSSRV];
32727131187Sgerhard };
32827131187Sgerhard
32927131187Sgerhard #ifdef _KERNEL
33027131187Sgerhard /*
33127131187Sgerhard * UMB device
33227131187Sgerhard */
33327131187Sgerhard struct umb_softc {
33427131187Sgerhard struct device sc_dev;
33527131187Sgerhard struct ifnet sc_if;
33627131187Sgerhard #define GET_IFP(sc) (&(sc)->sc_if)
33727131187Sgerhard struct usbd_device *sc_udev;
33827131187Sgerhard
33927131187Sgerhard int sc_ver_maj;
34027131187Sgerhard int sc_ver_min;
34127131187Sgerhard int sc_ctrl_len;
34227131187Sgerhard int sc_maxpktlen;
34327131187Sgerhard int sc_maxsessions;
34483adad25Spatrick unsigned int sc_ncm_supported_formats;
34583adad25Spatrick int sc_ncm_format;
34627131187Sgerhard
347ccb704bcSgerhard int sc_maxdgram;
348ccb704bcSgerhard int sc_align;
349ccb704bcSgerhard int sc_ndp_div;
350ccb704bcSgerhard int sc_ndp_remainder;
351ccb704bcSgerhard
352f892d520Sgerhard #define UMBFLG_FCC_AUTH_REQUIRED 0x0001
353e61a622dSgerhard #define UMBFLG_NO_INET6 0x0002
354e77540adSpatrick #define UMBFLG_NDP_AT_END 0x0004
355f892d520Sgerhard uint32_t sc_flags;
356f892d520Sgerhard int sc_cid;
357f892d520Sgerhard
35827131187Sgerhard struct usb_task sc_umb_task;
35927131187Sgerhard struct usb_task sc_get_response_task;
36027131187Sgerhard int sc_nresp;
36127131187Sgerhard struct timeout sc_statechg_timer;
36227131187Sgerhard
36327131187Sgerhard uint8_t sc_ctrl_ifaceno;
36427131187Sgerhard struct usbd_pipe *sc_ctrl_pipe;
36527131187Sgerhard struct usb_cdc_notification sc_intr_msg;
36627131187Sgerhard struct usbd_interface *sc_data_iface;
36727131187Sgerhard
36827131187Sgerhard void *sc_resp_buf;
36927131187Sgerhard void *sc_ctrl_msg;
37027131187Sgerhard
37127131187Sgerhard int sc_rx_ep;
37227131187Sgerhard struct usbd_xfer *sc_rx_xfer;
37327131187Sgerhard void *sc_rx_buf;
3741bfc9b14Sgerhard int sc_rx_bufsz;
37527131187Sgerhard struct usbd_pipe *sc_rx_pipe;
37627131187Sgerhard unsigned sc_rx_nerr;
37727131187Sgerhard
37827131187Sgerhard int sc_tx_ep;
37927131187Sgerhard struct usbd_xfer *sc_tx_xfer;
38027131187Sgerhard void *sc_tx_buf;
3811bfc9b14Sgerhard int sc_tx_bufsz;
38227131187Sgerhard struct usbd_pipe *sc_tx_pipe;
383ccb704bcSgerhard struct mbuf_list sc_tx_ml;
38427131187Sgerhard uint32_t sc_tx_seq;
38527131187Sgerhard
38627131187Sgerhard uint32_t sc_tid;
38727131187Sgerhard
38827131187Sgerhard #define sc_state sc_info.state
38927131187Sgerhard #define sc_roaming sc_info.enable_roaming
39027131187Sgerhard struct umb_info sc_info;
391*16cce00fSdlg
392*16cce00fSdlg struct rwlock sc_kstat_lock;
393*16cce00fSdlg struct kstat *sc_kstat_signal;
39427131187Sgerhard };
39527131187Sgerhard #endif /* _KERNEL */
396