698 lines
17 KiB
C
698 lines
17 KiB
C
/* $OpenBSD: mbim.h,v 1.4 2017/04/18 13:27:55 gerhard Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 2016 genua mbH
|
|
* All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
/*
|
|
* Mobile Broadband Interface Model
|
|
* http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
|
|
*/
|
|
#ifndef _MBIM_H_
|
|
#define _MBIM_H_
|
|
|
|
#define UDESCSUB_MBIM 27
|
|
#define MBIM_INTERFACE_ALTSETTING 1
|
|
|
|
#define MBIM_RESET_FUNCTION 0x05
|
|
|
|
/*
|
|
* Registration state (MBIM_REGISTER_STATE)
|
|
*/
|
|
#define MBIM_REGSTATE_UNKNOWN 0
|
|
#define MBIM_REGSTATE_DEREGISTERED 1
|
|
#define MBIM_REGSTATE_SEARCHING 2
|
|
#define MBIM_REGSTATE_HOME 3
|
|
#define MBIM_REGSTATE_ROAMING 4
|
|
#define MBIM_REGSTATE_PARTNER 5
|
|
#define MBIM_REGSTATE_DENIED 6
|
|
|
|
/*
|
|
* Data classes mask (MBIM_DATA_CLASS)
|
|
*/
|
|
#define MBIM_DATACLASS_NONE 0x00000000
|
|
#define MBIM_DATACLASS_GPRS 0x00000001
|
|
#define MBIM_DATACLASS_EDGE 0x00000002
|
|
#define MBIM_DATACLASS_UMTS 0x00000004
|
|
#define MBIM_DATACLASS_HSDPA 0x00000008
|
|
#define MBIM_DATACLASS_HSUPA 0x00000010
|
|
#define MBIM_DATACLASS_LTE 0x00000020
|
|
#define MBIM_DATACLASS_1XRTT 0x00010000
|
|
#define MBIM_DATACLASS_1XEVDO 0x00020000
|
|
#define MBIM_DATACLASS_1XEVDO_REV_A 0x00040000
|
|
#define MBIM_DATACLASS_1XEVDV 0x00080000
|
|
#define MBIM_DATACLASS_3XRTT 0x00100000
|
|
#define MBIM_DATACLASS_1XEVDO_REV_B 0x00200000
|
|
#define MBIM_DATACLASS_UMB 0x00400000
|
|
#define MBIM_DATACLASS_CUSTOM 0x80000000
|
|
|
|
/*
|
|
* Cell classes mask (MBIM_CELLULAR_CLASS)
|
|
*/
|
|
#define MBIM_CELLCLASS_GSM 0x00000001
|
|
#define MBIM_CELLCLASS_CDMA 0x00000002
|
|
|
|
/*
|
|
* UUIDs
|
|
*/
|
|
#define MBIM_UUID_LEN 16
|
|
|
|
#define MBIM_UUID_BASIC_CONNECT { \
|
|
0xa2, 0x89, 0xcc, 0x33, 0xbc, 0xbb, 0x8b, 0x4f, \
|
|
0xb6, 0xb0, 0x13, 0x3e, 0xc2, 0xaa, 0xe6, 0xdf \
|
|
}
|
|
|
|
#define MBIM_UUID_CONTEXT_INTERNET { \
|
|
0x7e, 0x5e, 0x2a, 0x7e, 0x4e, 0x6f, 0x72, 0x72, \
|
|
0x73, 0x6b, 0x65, 0x6e, 0x7e, 0x5e, 0x2a, 0x7e \
|
|
}
|
|
|
|
#define MBIM_UUID_CONTEXT_VPN { \
|
|
0x9b, 0x9f, 0x7b, 0xbe, 0x89, 0x52, 0x44, 0xb7, \
|
|
0x83, 0xac, 0xca, 0x41, 0x31, 0x8d, 0xf7, 0xa0 \
|
|
}
|
|
|
|
#define MBIM_UUID_QMI_MBIM { \
|
|
0xd1, 0xa3, 0x0b, 0xc2, 0xf9, 0x7a, 0x6e, 0x43, \
|
|
0xbf, 0x65, 0xc7, 0xe2, 0x4f, 0xb0, 0xf0, 0xd3 \
|
|
}
|
|
|
|
#define MBIM_CTRLMSG_MINLEN 64
|
|
#define MBIM_CTRLMSG_MAXLEN (4 * 1204)
|
|
|
|
#define MBIM_MAXSEGSZ_MINVAL (2 * 1024)
|
|
|
|
/*
|
|
* Control messages (host to function)
|
|
*/
|
|
#define MBIM_OPEN_MSG 1U
|
|
#define MBIM_CLOSE_MSG 2U
|
|
#define MBIM_COMMAND_MSG 3U
|
|
#define MBIM_HOST_ERROR_MSG 4U
|
|
|
|
/*
|
|
* Control messages (function to host)
|
|
*/
|
|
#define MBIM_OPEN_DONE 0x80000001U
|
|
#define MBIM_CLOSE_DONE 0x80000002U
|
|
#define MBIM_COMMAND_DONE 0x80000003U
|
|
#define MBIM_FUNCTION_ERROR_MSG 0x80000004U
|
|
#define MBIM_INDICATE_STATUS_MSG 0x80000007U
|
|
|
|
/*
|
|
* Generic status codes
|
|
*/
|
|
#define MBIM_STATUS_SUCCESS 0
|
|
#define MBIM_STATUS_BUSY 1
|
|
#define MBIM_STATUS_FAILURE 2
|
|
#define MBIM_STATUS_SIM_NOT_INSERTED 3
|
|
#define MBIM_STATUS_BAD_SIM 4
|
|
#define MBIM_STATUS_PIN_REQUIRED 5
|
|
#define MBIM_STATUS_PIN_DISABLED 6
|
|
#define MBIM_STATUS_NOT_REGISTERED 7
|
|
#define MBIM_STATUS_PROVIDERS_NOT_FOUND 8
|
|
#define MBIM_STATUS_NO_DEVICE_SUPPORT 9
|
|
#define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10
|
|
#define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11
|
|
#define MBIM_STATUS_PACKET_SERVICE_DETACHED 12
|
|
#define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13
|
|
#define MBIM_STATUS_NOT_INITIALIZED 14
|
|
#define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15
|
|
#define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16
|
|
#define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17
|
|
#define MBIM_STATUS_INVALID_ACCESS_STRING 18
|
|
#define MBIM_STATUS_INVALID_USER_NAME_PWD 19
|
|
#define MBIM_STATUS_RADIO_POWER_OFF 20
|
|
#define MBIM_STATUS_INVALID_PARAMETERS 21
|
|
#define MBIM_STATUS_READ_FAILURE 22
|
|
#define MBIM_STATUS_WRITE_FAILURE 23
|
|
#define MBIM_STATUS_NO_PHONEBOOK 25
|
|
#define MBIM_STATUS_PARAMETER_TOO_LONG 26
|
|
#define MBIM_STATUS_STK_BUSY 27
|
|
#define MBIM_STATUS_OPERATION_NOT_ALLOWED 28
|
|
#define MBIM_STATUS_MEMORY_FAILURE 29
|
|
#define MBIM_STATUS_INVALID_MEMORY_INDEX 30
|
|
#define MBIM_STATUS_MEMORY_FULL 31
|
|
#define MBIM_STATUS_FILTER_NOT_SUPPORTED 32
|
|
#define MBIM_STATUS_DSS_INSTANCE_LIMIT 33
|
|
#define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34
|
|
#define MBIM_STATUS_AUTH_INCORRECT_AUTN 35
|
|
#define MBIM_STATUS_AUTH_SYNC_FAILURE 36
|
|
#define MBIM_STATUS_AUTH_AMF_NOT_SET 37
|
|
#define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38
|
|
#define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100
|
|
#define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101
|
|
#define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102
|
|
#define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103
|
|
#define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104
|
|
|
|
/*
|
|
* Message formats
|
|
*/
|
|
struct mbim_msghdr {
|
|
/* Msg header */
|
|
uint32_t type; /* message type */
|
|
uint32_t len; /* message length */
|
|
uint32_t tid; /* transaction id */
|
|
} __packed;
|
|
|
|
struct mbim_fraghdr {
|
|
uint32_t nfrag; /* total # of fragments */
|
|
uint32_t currfrag; /* current fragment */
|
|
} __packed;
|
|
|
|
struct mbim_fragmented_msg_hdr {
|
|
struct mbim_msghdr hdr;
|
|
struct mbim_fraghdr frag;
|
|
} __packed;
|
|
|
|
struct mbim_h2f_openmsg {
|
|
struct mbim_msghdr hdr;
|
|
uint32_t maxlen;
|
|
} __packed;
|
|
|
|
struct mbim_h2f_closemsg {
|
|
struct mbim_msghdr hdr;
|
|
} __packed;
|
|
|
|
struct mbim_h2f_cmd {
|
|
struct mbim_msghdr hdr;
|
|
struct mbim_fraghdr frag;
|
|
uint8_t devid[MBIM_UUID_LEN];
|
|
uint32_t cid; /* command id */
|
|
#define MBIM_CMDOP_QRY 0
|
|
#define MBIM_CMDOP_SET 1
|
|
uint32_t op;
|
|
uint32_t infolen;
|
|
uint8_t info[];
|
|
} __packed;
|
|
|
|
struct mbim_f2h_indicate_status {
|
|
struct mbim_msghdr hdr;
|
|
struct mbim_fraghdr frag;
|
|
uint8_t devid[MBIM_UUID_LEN];
|
|
uint32_t cid; /* command id */
|
|
uint32_t infolen;
|
|
uint8_t info[];
|
|
} __packed;
|
|
|
|
struct mbim_f2h_hosterr {
|
|
struct mbim_msghdr hdr;
|
|
|
|
#define MBIM_ERROR_TIMEOUT_FRAGMENT 1
|
|
#define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2
|
|
#define MBIM_ERROR_LENGTH_MISMATCH 3
|
|
#define MBIM_ERROR_DUPLICATED_TID 4
|
|
#define MBIM_ERROR_NOT_OPENED 5
|
|
#define MBIM_ERROR_UNKNOWN 6
|
|
#define MBIM_ERROR_CANCEL 7
|
|
#define MBIM_ERROR_MAX_TRANSFER 8
|
|
uint32_t err;
|
|
} __packed;
|
|
|
|
struct mbim_f2h_openclosedone {
|
|
struct mbim_msghdr hdr;
|
|
int32_t status;
|
|
} __packed;
|
|
|
|
struct mbim_f2h_cmddone {
|
|
struct mbim_msghdr hdr;
|
|
struct mbim_fraghdr frag;
|
|
uint8_t devid[MBIM_UUID_LEN];
|
|
uint32_t cid; /* command id */
|
|
int32_t status;
|
|
uint32_t infolen;
|
|
uint8_t info[];
|
|
} __packed;
|
|
|
|
/*
|
|
* Messages and commands for MBIM_UUID_BASIC_CONNECT
|
|
*/
|
|
#define MBIM_CID_DEVICE_CAPS 1
|
|
#define MBIM_CID_SUBSCRIBER_READY_STATUS 2
|
|
#define MBIM_CID_RADIO_STATE 3
|
|
#define MBIM_CID_PIN 4
|
|
#define MBIM_CID_PIN_LIST 5
|
|
#define MBIM_CID_HOME_PROVIDER 6
|
|
#define MBIM_CID_PREFERRED_PROVIDERS 7
|
|
#define MBIM_CID_VISIBLE_PROVIDERS 8
|
|
#define MBIM_CID_REGISTER_STATE 9
|
|
#define MBIM_CID_PACKET_SERVICE 10
|
|
#define MBIM_CID_SIGNAL_STATE 11
|
|
#define MBIM_CID_CONNECT 12
|
|
#define MBIM_CID_PROVISIONED_CONTEXTS 13
|
|
#define MBIM_CID_SERVICE_ACTIVATION 14
|
|
#define MBIM_CID_IP_CONFIGURATION 15
|
|
#define MBIM_CID_DEVICE_SERVICES 16
|
|
#define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19
|
|
#define MBIM_CID_PACKET_STATISTICS 20
|
|
#define MBIM_CID_NETWORK_IDLE_HINT 21
|
|
#define MBIM_CID_EMERGENCY_MODE 22
|
|
#define MBIM_CID_IP_PACKET_FILTERS 23
|
|
#define MBIM_CID_MULTICARRIER_PROVIDERS 24
|
|
|
|
struct mbim_cid_subscriber_ready_info {
|
|
#define MBIM_SIMSTATE_NOTINITIALIZED 0
|
|
#define MBIM_SIMSTATE_INITIALIZED 1
|
|
#define MBIM_SIMSTATE_NOTINSERTED 2
|
|
#define MBIM_SIMSTATE_BADSIM 3
|
|
#define MBIM_SIMSTATE_FAILURE 4
|
|
#define MBIM_SIMSTATE_NOTACTIVATED 5
|
|
#define MBIM_SIMSTATE_LOCKED 6
|
|
uint32_t ready;
|
|
|
|
uint32_t sid_offs;
|
|
uint32_t sid_size;
|
|
|
|
uint32_t icc_offs;
|
|
uint32_t icc_size;
|
|
|
|
#define MBIM_SIMUNIQEID_NONE 0
|
|
#define MBIM_SIMUNIQEID_PROTECT 1
|
|
uint32_t info;
|
|
|
|
uint32_t no_pn;
|
|
struct {
|
|
uint32_t offs;
|
|
uint32_t size;
|
|
}
|
|
pn[];
|
|
} __packed;
|
|
|
|
struct mbim_cid_radio_state {
|
|
#define MBIM_RADIO_STATE_OFF 0
|
|
#define MBIM_RADIO_STATE_ON 1
|
|
uint32_t state;
|
|
} __packed;
|
|
|
|
struct mbim_cid_radio_state_info {
|
|
uint32_t hw_state;
|
|
uint32_t sw_state;
|
|
} __packed;
|
|
|
|
struct mbim_cid_pin {
|
|
#define MBIM_PIN_TYPE_NONE 0
|
|
#define MBIM_PIN_TYPE_CUSTOM 1
|
|
#define MBIM_PIN_TYPE_PIN1 2
|
|
#define MBIM_PIN_TYPE_PIN2 3
|
|
#define MBIM_PIN_TYPE_DEV_SIM_PIN 4
|
|
#define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5
|
|
#define MBIM_PIN_TYPE_NETWORK_PIN 6
|
|
#define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7
|
|
#define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8
|
|
#define MBIM_PIN_TYPE_CORPORATE_PIN 9
|
|
#define MBIM_PIN_TYPE_SUBSIDY_LOCK 10
|
|
#define MBIM_PIN_TYPE_PUK1 11
|
|
#define MBIM_PIN_TYPE_PUK2 12
|
|
#define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13
|
|
#define MBIM_PIN_TYPE_NETWORK_PUK 14
|
|
#define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15
|
|
#define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16
|
|
#define MBIM_PIN_TYPE_CORPORATE_PUK 17
|
|
uint32_t type;
|
|
|
|
#define MBIM_PIN_OP_ENTER 0
|
|
#define MBIM_PIN_OP_ENABLE 1
|
|
#define MBIM_PIN_OP_DISABLE 2
|
|
#define MBIM_PIN_OP_CHANGE 3
|
|
uint32_t op;
|
|
uint32_t pin_offs;
|
|
uint32_t pin_size;
|
|
uint32_t newpin_offs;
|
|
uint32_t newpin_size;
|
|
#define MBIM_PIN_MAXLEN 32
|
|
uint8_t data[2 * MBIM_PIN_MAXLEN];
|
|
} __packed;
|
|
|
|
struct mbim_cid_pin_info {
|
|
uint32_t type;
|
|
|
|
#define MBIM_PIN_STATE_UNLOCKED 0
|
|
#define MBIM_PIN_STATE_LOCKED 1
|
|
uint32_t state;
|
|
uint32_t remaining_attempts;
|
|
} __packed;
|
|
|
|
struct mbim_cid_pin_list_info {
|
|
struct mbim_pin_desc {
|
|
|
|
#define MBIM_PINMODE_NOTSUPPORTED 0
|
|
#define MBIM_PINMODE_ENABLED 1
|
|
#define MBIM_PINMODE_DISABLED 2
|
|
uint32_t mode;
|
|
|
|
#define MBIM_PINFORMAT_UNKNOWN 0
|
|
#define MBIM_PINFORMAT_NUMERIC 1
|
|
#define MBIM_PINFORMAT_ALPHANUMERIC 2
|
|
uint32_t format;
|
|
|
|
uint32_t minlen;
|
|
uint32_t maxlen;
|
|
}
|
|
pin1,
|
|
pin2,
|
|
dev_sim_pin,
|
|
first_dev_sim_pin,
|
|
net_pin,
|
|
net_sub_pin,
|
|
svp_pin,
|
|
corp_pin,
|
|
subsidy_lock,
|
|
custom;
|
|
} __packed;
|
|
|
|
struct mbim_cid_device_caps {
|
|
#define MBIM_DEVTYPE_UNKNOWN 0
|
|
#define MBIM_DEVTYPE_EMBEDDED 1
|
|
#define MBIM_DEVTYPE_REMOVABLE 2
|
|
#define MBIM_DEVTYPE_REMOTE 3
|
|
uint32_t devtype;
|
|
|
|
uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */
|
|
uint32_t voiceclass;
|
|
uint32_t simclass;
|
|
uint32_t dataclass; /* values: MBIM_DATA_CLASS */
|
|
uint32_t smscaps;
|
|
uint32_t cntrlcaps;
|
|
uint32_t max_sessions;
|
|
|
|
uint32_t custdataclass_offs;
|
|
uint32_t custdataclass_size;
|
|
|
|
uint32_t devid_offs;
|
|
uint32_t devid_size;
|
|
|
|
uint32_t fwinfo_offs;
|
|
uint32_t fwinfo_size;
|
|
|
|
uint32_t hwinfo_offs;
|
|
uint32_t hwinfo_size;
|
|
|
|
uint32_t data[];
|
|
} __packed;
|
|
|
|
struct mbim_cid_registration_state {
|
|
uint32_t provid_offs;
|
|
uint32_t provid_size;
|
|
|
|
#define MBIM_REGACTION_AUTOMATIC 0
|
|
#define MBIM_REGACTION_MANUAL 1
|
|
uint32_t regaction;
|
|
uint32_t data_class;
|
|
|
|
uint32_t data[];
|
|
} __packed;
|
|
|
|
struct mbim_cid_registration_state_info {
|
|
uint32_t nwerror;
|
|
|
|
uint32_t regstate; /* values: MBIM_REGISTER_STATE */
|
|
|
|
#define MBIM_REGMODE_UNKNOWN 0
|
|
#define MBIM_REGMODE_AUTOMATIC 1
|
|
#define MBIM_REGMODE_MANUAL 2
|
|
uint32_t regmode;
|
|
|
|
uint32_t availclasses; /* values: MBIM_DATA_CLASS */
|
|
uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */
|
|
|
|
uint32_t provid_offs;
|
|
uint32_t provid_size;
|
|
|
|
uint32_t provname_offs;
|
|
uint32_t provname_size;
|
|
|
|
uint32_t roamingtxt_offs;
|
|
uint32_t roamingtxt_size;
|
|
|
|
#define MBIM_REGFLAGS_NONE 0
|
|
#define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1
|
|
#define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2
|
|
uint32_t regflag;
|
|
|
|
uint32_t data[];
|
|
} __packed;
|
|
|
|
struct mbim_cid_packet_service {
|
|
#define MBIM_PKTSERVICE_ACTION_ATTACH 0
|
|
#define MBIM_PKTSERVICE_ACTION_DETACH 1
|
|
uint32_t action;
|
|
} __packed;
|
|
|
|
struct mbim_cid_packet_service_info {
|
|
uint32_t nwerror;
|
|
|
|
#define MBIM_PKTSERVICE_STATE_UNKNOWN 0
|
|
#define MBIM_PKTSERVICE_STATE_ATTACHING 1
|
|
#define MBIM_PKTSERVICE_STATE_ATTACHED 2
|
|
#define MBIM_PKTSERVICE_STATE_DETACHING 3
|
|
#define MBIM_PKTSERVICE_STATE_DETACHED 4
|
|
uint32_t state;
|
|
|
|
uint32_t highest_dataclass;
|
|
uint64_t uplink_speed;
|
|
uint64_t downlink_speed;
|
|
} __packed;
|
|
|
|
struct mbim_cid_signal_state {
|
|
uint32_t rssi;
|
|
uint32_t err_rate;
|
|
uint32_t ss_intvl;
|
|
uint32_t rssi_thr;
|
|
uint32_t err_thr;
|
|
} __packed;
|
|
|
|
struct mbim_cid_connect {
|
|
uint32_t sessionid;
|
|
|
|
#define MBIM_CONNECT_DEACTIVATE 0
|
|
#define MBIM_CONNECT_ACTIVATE 1
|
|
uint32_t command;
|
|
|
|
#define MBIM_ACCESS_MAXLEN 200
|
|
uint32_t access_offs;
|
|
uint32_t access_size;
|
|
|
|
#define MBIM_USER_MAXLEN 510
|
|
uint32_t user_offs;
|
|
uint32_t user_size;
|
|
|
|
#define MBIM_PASSWD_MAXLEN 510
|
|
uint32_t passwd_offs;
|
|
uint32_t passwd_size;
|
|
|
|
#define MBIM_COMPRESSION_NONE 0
|
|
#define MBIM_COMPRESSION_ENABLE 1
|
|
uint32_t compression;
|
|
|
|
#define MBIM_AUTHPROT_NONE 0
|
|
#define MBIM_AUTHPROT_PAP 1
|
|
#define MBIM_AUTHPROT_CHAP 2
|
|
#define MBIM_AUTHPROT_MSCHAP 3
|
|
uint32_t authprot;
|
|
|
|
#define MBIM_CONTEXT_IPTYPE_DEFAULT 0
|
|
#define MBIM_CONTEXT_IPTYPE_IPV4 1
|
|
#define MBIM_CONTEXT_IPTYPE_IPV6 2
|
|
#define MBIM_CONTEXT_IPTYPE_IPV4V6 3
|
|
#define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4
|
|
uint32_t iptype;
|
|
|
|
uint8_t context[MBIM_UUID_LEN];
|
|
|
|
uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN +
|
|
MBIM_PASSWD_MAXLEN];
|
|
|
|
} __packed;
|
|
|
|
struct mbim_cid_connect_info {
|
|
uint32_t sessionid;
|
|
|
|
#define MBIM_ACTIVATION_STATE_UNKNOWN 0
|
|
#define MBIM_ACTIVATION_STATE_ACTIVATED 1
|
|
#define MBIM_ACTIVATION_STATE_ACTIVATING 2
|
|
#define MBIM_ACTIVATION_STATE_DEACTIVATED 3
|
|
#define MBIM_ACTIVATION_STATE_DEACTIVATING 4
|
|
uint32_t activation;
|
|
|
|
uint32_t voice;
|
|
uint32_t iptype;
|
|
uint8_t context[MBIM_UUID_LEN];
|
|
uint32_t nwerror;
|
|
} __packed;
|
|
|
|
struct mbim_cid_ipv4_element {
|
|
uint32_t prefixlen;
|
|
uint32_t addr;
|
|
} __packed;
|
|
|
|
struct mbim_cid_ipv6_element {
|
|
uint32_t prefixlen;
|
|
uint8_t addr[16];
|
|
} __packed;
|
|
|
|
struct mbim_cid_ip_configuration_info {
|
|
uint32_t sessionid;
|
|
|
|
#define MBIM_IPCONF_HAS_ADDRINFO 0x0001
|
|
#define MBIM_IPCONF_HAS_GWINFO 0x0002
|
|
#define MBIM_IPCONF_HAS_DNSINFO 0x0004
|
|
#define MBIM_IPCONF_HAS_MTUINFO 0x0008
|
|
uint32_t ipv4_available;
|
|
uint32_t ipv6_available;
|
|
|
|
uint32_t ipv4_naddr;
|
|
uint32_t ipv4_addroffs;
|
|
uint32_t ipv6_naddr;
|
|
uint32_t ipv6_addroffs;
|
|
|
|
uint32_t ipv4_gwoffs;
|
|
uint32_t ipv6_gwoffs;
|
|
|
|
uint32_t ipv4_ndnssrv;
|
|
uint32_t ipv4_dnssrvoffs;
|
|
uint32_t ipv6_ndnssrv;
|
|
uint32_t ipv6_dnssrvoffs;
|
|
|
|
uint32_t ipv4_mtu;
|
|
uint32_t ipv6_mtu;
|
|
|
|
uint32_t data[];
|
|
} __packed;
|
|
|
|
struct mbim_cid_packet_statistics_info {
|
|
uint32_t in_discards;
|
|
uint32_t in_errors;
|
|
uint64_t in_octets;
|
|
uint64_t in_packets;
|
|
uint64_t out_octets;
|
|
uint64_t out_packets;
|
|
uint32_t out_errors;
|
|
uint32_t out_discards;
|
|
} __packed;
|
|
|
|
|
|
#ifdef _KERNEL
|
|
|
|
struct mbim_descriptor {
|
|
uByte bLength;
|
|
uByte bDescriptorType;
|
|
uByte bDescriptorSubtype;
|
|
#define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f)
|
|
#define MBIM_VER_MINOR(v) ((v) & 0x0f)
|
|
uWord bcdMBIMVersion;
|
|
uWord wMaxControlMessage;
|
|
uByte bNumberFilters;
|
|
uByte bMaxFilterSize;
|
|
uWord wMaxSegmentSize;
|
|
uByte bmNetworkCapabilities;
|
|
} __packed;
|
|
|
|
/*
|
|
* NCM Parameters
|
|
*/
|
|
#define NCM_GET_NTB_PARAMETERS 0x80
|
|
|
|
struct ncm_ntb_parameters {
|
|
uWord wLength;
|
|
uWord bmNtbFormatsSupported;
|
|
#define NCM_FORMAT_NTB16 0x0001
|
|
#define NCM_FORMAT_NTB32 0x0002
|
|
uDWord dwNtbInMaxSize;
|
|
uWord wNtbInDivisor;
|
|
uWord wNtbInPayloadRemainder;
|
|
uWord wNtbInAlignment;
|
|
uWord wReserved1;
|
|
uDWord dwNtbOutMaxSize;
|
|
uWord wNtbOutDivisor;
|
|
uWord wNtbOutPayloadRemainder;
|
|
uWord wNtbOutAlignment;
|
|
uWord wNtbOutMaxDatagrams;
|
|
} __packed;
|
|
|
|
/*
|
|
* NCM Encoding
|
|
*/
|
|
#define MBIM_HDR16_LEN \
|
|
(sizeof(struct ncm_header16) + sizeof(struct ncm_pointer16))
|
|
#define MBIM_HDR32_LEN \
|
|
(sizeof(struct ncm_header32) + sizeof(struct ncm_pointer32))
|
|
|
|
struct ncm_header16 {
|
|
#define NCM_HDR16_SIG 0x484d434e
|
|
uDWord dwSignature;
|
|
uWord wHeaderLength;
|
|
uWord wSequence;
|
|
uWord wBlockLength;
|
|
uWord wNdpIndex;
|
|
} __packed;
|
|
|
|
struct ncm_header32 {
|
|
#define NCM_HDR32_SIG 0x686d636e
|
|
uDWord dwSignature;
|
|
uWord wHeaderLength;
|
|
uWord wSequence;
|
|
uDWord dwBlockLength;
|
|
uDWord dwNdpIndex;
|
|
} __packed;
|
|
|
|
|
|
#define MBIM_NCM_NTH_SIDSHIFT 24
|
|
#define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff)
|
|
|
|
struct ncm_pointer16_dgram {
|
|
uWord wDatagramIndex;
|
|
uWord wDatagramLen;
|
|
} __packed;
|
|
|
|
struct ncm_pointer16 {
|
|
#define MBIM_NCM_NTH16_IPS 0x00535049
|
|
#define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS)
|
|
#define MBIM_NCM_NTH16_SIG(s) \
|
|
((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS)
|
|
uDWord dwSignature;
|
|
uWord wLength;
|
|
uWord wNextNdpIndex;
|
|
|
|
/* Minimum is two datagrams, but can be more */
|
|
struct ncm_pointer16_dgram dgram[2];
|
|
} __packed;
|
|
|
|
struct ncm_pointer32_dgram {
|
|
uDWord dwDatagramIndex;
|
|
uDWord dwDatagramLen;
|
|
} __packed;
|
|
|
|
struct ncm_pointer32 {
|
|
#define MBIM_NCM_NTH32_IPS 0x00737069
|
|
#define MBIM_NCM_NTH32_ISISG(s) \
|
|
(((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS)
|
|
#define MBIM_NCM_NTH32_SIG(s) \
|
|
((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS)
|
|
uDWord dwSignature;
|
|
uWord wLength;
|
|
uWord wReserved6;
|
|
uDWord dwNextNdpIndex;
|
|
uDWord dwReserved12;
|
|
|
|
/* Minimum is two datagrams, but can be more */
|
|
struct ncm_pointer32_dgram dgram[2];
|
|
} __packed;
|
|
|
|
#endif /* _KERNEL */
|
|
|
|
#endif /* _MBIM_H_ */
|