1*0f1bf1c2SAdrian Chadd /*- 2*0f1bf1c2SAdrian Chadd * SPDX-License-Identifier: BSD-3-Clause 3*0f1bf1c2SAdrian Chadd * 4*0f1bf1c2SAdrian Chadd * Original copyright (c) 2016 genua mbH (OpenBSD version) 5*0f1bf1c2SAdrian Chadd * 6*0f1bf1c2SAdrian Chadd * Permission to use, copy, modify, and distribute this software for any 7*0f1bf1c2SAdrian Chadd * purpose with or without fee is hereby granted, provided that the above 8*0f1bf1c2SAdrian Chadd * copyright notice and this permission notice appear in all copies. 9*0f1bf1c2SAdrian Chadd * 10*0f1bf1c2SAdrian Chadd * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11*0f1bf1c2SAdrian Chadd * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12*0f1bf1c2SAdrian Chadd * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13*0f1bf1c2SAdrian Chadd * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14*0f1bf1c2SAdrian Chadd * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15*0f1bf1c2SAdrian Chadd * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16*0f1bf1c2SAdrian Chadd * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17*0f1bf1c2SAdrian Chadd * 18*0f1bf1c2SAdrian Chadd * Copyright (c) 2022 ADISTA SAS (re-write for FreeBSD) 19*0f1bf1c2SAdrian Chadd * 20*0f1bf1c2SAdrian Chadd * Re-write for FreeBSD by Pierre Pronchery <pierre@defora.net> 21*0f1bf1c2SAdrian Chadd * 22*0f1bf1c2SAdrian Chadd * Redistribution and use in source and binary forms, with or without 23*0f1bf1c2SAdrian Chadd * modification, are permitted provided that the following conditions are met: 24*0f1bf1c2SAdrian Chadd * 25*0f1bf1c2SAdrian Chadd * - Redistributions of source code must retain the above copyright notice, 26*0f1bf1c2SAdrian Chadd * this list of conditions and the following disclaimer. 27*0f1bf1c2SAdrian Chadd * - Redistributions in binary form must reproduce the above copyright notice, 28*0f1bf1c2SAdrian Chadd * this list of conditions and the following disclaimer in the documentation 29*0f1bf1c2SAdrian Chadd * and/or other materials provided with the distribution. 30*0f1bf1c2SAdrian Chadd * - Neither the name of the copyright holder nor the names of its contributors 31*0f1bf1c2SAdrian Chadd * may be used to endorse or promote products derived from this software 32*0f1bf1c2SAdrian Chadd * without specific prior written permission. 33*0f1bf1c2SAdrian Chadd * 34*0f1bf1c2SAdrian Chadd * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 35*0f1bf1c2SAdrian Chadd * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 36*0f1bf1c2SAdrian Chadd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 37*0f1bf1c2SAdrian Chadd * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 38*0f1bf1c2SAdrian Chadd * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 39*0f1bf1c2SAdrian Chadd * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 40*0f1bf1c2SAdrian Chadd * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 41*0f1bf1c2SAdrian Chadd * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 42*0f1bf1c2SAdrian Chadd * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 43*0f1bf1c2SAdrian Chadd * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 44*0f1bf1c2SAdrian Chadd * POSSIBILITY OF SUCH DAMAGE. 45*0f1bf1c2SAdrian Chadd * 46*0f1bf1c2SAdrian Chadd * $OpenBSD: mbim.h,v 1.4 2017/04/18 13:27:55 gerhard Exp $ 47*0f1bf1c2SAdrian Chadd */ 48*0f1bf1c2SAdrian Chadd 49*0f1bf1c2SAdrian Chadd /* 50*0f1bf1c2SAdrian Chadd * Mobile Broadband Interface Model 51*0f1bf1c2SAdrian Chadd * http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf 52*0f1bf1c2SAdrian Chadd */ 53*0f1bf1c2SAdrian Chadd 54*0f1bf1c2SAdrian Chadd #ifndef _MBIM_H_ 55*0f1bf1c2SAdrian Chadd #define _MBIM_H_ 56*0f1bf1c2SAdrian Chadd 57*0f1bf1c2SAdrian Chadd #define UDESCSUB_MBIM 27 58*0f1bf1c2SAdrian Chadd #define MBIM_INTERFACE_ALTSETTING 1 59*0f1bf1c2SAdrian Chadd 60*0f1bf1c2SAdrian Chadd #define MBIM_RESET_FUNCTION 0x05 61*0f1bf1c2SAdrian Chadd 62*0f1bf1c2SAdrian Chadd /* 63*0f1bf1c2SAdrian Chadd * Registration state (MBIM_REGISTER_STATE) 64*0f1bf1c2SAdrian Chadd */ 65*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_UNKNOWN 0 66*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_DEREGISTERED 1 67*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_SEARCHING 2 68*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_HOME 3 69*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_ROAMING 4 70*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_PARTNER 5 71*0f1bf1c2SAdrian Chadd #define MBIM_REGSTATE_DENIED 6 72*0f1bf1c2SAdrian Chadd 73*0f1bf1c2SAdrian Chadd /* 74*0f1bf1c2SAdrian Chadd * Data classes mask (MBIM_DATA_CLASS) 75*0f1bf1c2SAdrian Chadd */ 76*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_NONE 0x00000000 77*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_GPRS 0x00000001 78*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_EDGE 0x00000002 79*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_UMTS 0x00000004 80*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_HSDPA 0x00000008 81*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_HSUPA 0x00000010 82*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_LTE 0x00000020 83*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_1XRTT 0x00010000 84*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_1XEVDO 0x00020000 85*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_1XEVDO_REV_A 0x00040000 86*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_1XEVDV 0x00080000 87*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_3XRTT 0x00100000 88*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_1XEVDO_REV_B 0x00200000 89*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_UMB 0x00400000 90*0f1bf1c2SAdrian Chadd #define MBIM_DATACLASS_CUSTOM 0x80000000 91*0f1bf1c2SAdrian Chadd 92*0f1bf1c2SAdrian Chadd /* 93*0f1bf1c2SAdrian Chadd * Cell classes mask (MBIM_CELLULAR_CLASS) 94*0f1bf1c2SAdrian Chadd */ 95*0f1bf1c2SAdrian Chadd #define MBIM_CELLCLASS_GSM 0x00000001 96*0f1bf1c2SAdrian Chadd #define MBIM_CELLCLASS_CDMA 0x00000002 97*0f1bf1c2SAdrian Chadd 98*0f1bf1c2SAdrian Chadd /* 99*0f1bf1c2SAdrian Chadd * UUIDs 100*0f1bf1c2SAdrian Chadd */ 101*0f1bf1c2SAdrian Chadd #define MBIM_UUID_LEN 16 102*0f1bf1c2SAdrian Chadd 103*0f1bf1c2SAdrian Chadd #define MBIM_UUID_BASIC_CONNECT { \ 104*0f1bf1c2SAdrian Chadd 0xa2, 0x89, 0xcc, 0x33, 0xbc, 0xbb, 0x8b, 0x4f, \ 105*0f1bf1c2SAdrian Chadd 0xb6, 0xb0, 0x13, 0x3e, 0xc2, 0xaa, 0xe6, 0xdf \ 106*0f1bf1c2SAdrian Chadd } 107*0f1bf1c2SAdrian Chadd 108*0f1bf1c2SAdrian Chadd #define MBIM_UUID_CONTEXT_INTERNET { \ 109*0f1bf1c2SAdrian Chadd 0x7e, 0x5e, 0x2a, 0x7e, 0x4e, 0x6f, 0x72, 0x72, \ 110*0f1bf1c2SAdrian Chadd 0x73, 0x6b, 0x65, 0x6e, 0x7e, 0x5e, 0x2a, 0x7e \ 111*0f1bf1c2SAdrian Chadd } 112*0f1bf1c2SAdrian Chadd 113*0f1bf1c2SAdrian Chadd #define MBIM_UUID_CONTEXT_VPN { \ 114*0f1bf1c2SAdrian Chadd 0x9b, 0x9f, 0x7b, 0xbe, 0x89, 0x52, 0x44, 0xb7, \ 115*0f1bf1c2SAdrian Chadd 0x83, 0xac, 0xca, 0x41, 0x31, 0x8d, 0xf7, 0xa0 \ 116*0f1bf1c2SAdrian Chadd } 117*0f1bf1c2SAdrian Chadd 118*0f1bf1c2SAdrian Chadd #define MBIM_UUID_QMI_MBIM { \ 119*0f1bf1c2SAdrian Chadd 0xd1, 0xa3, 0x0b, 0xc2, 0xf9, 0x7a, 0x6e, 0x43, \ 120*0f1bf1c2SAdrian Chadd 0xbf, 0x65, 0xc7, 0xe2, 0x4f, 0xb0, 0xf0, 0xd3 \ 121*0f1bf1c2SAdrian Chadd } 122*0f1bf1c2SAdrian Chadd 123*0f1bf1c2SAdrian Chadd #define MBIM_CTRLMSG_MINLEN 64 124*0f1bf1c2SAdrian Chadd #define MBIM_CTRLMSG_MAXLEN (4 * 1204) 125*0f1bf1c2SAdrian Chadd 126*0f1bf1c2SAdrian Chadd #define MBIM_MAXSEGSZ_MINVAL (2 * 1024) 127*0f1bf1c2SAdrian Chadd 128*0f1bf1c2SAdrian Chadd /* 129*0f1bf1c2SAdrian Chadd * Control messages (host to function) 130*0f1bf1c2SAdrian Chadd */ 131*0f1bf1c2SAdrian Chadd #define MBIM_OPEN_MSG 1U 132*0f1bf1c2SAdrian Chadd #define MBIM_CLOSE_MSG 2U 133*0f1bf1c2SAdrian Chadd #define MBIM_COMMAND_MSG 3U 134*0f1bf1c2SAdrian Chadd #define MBIM_HOST_ERROR_MSG 4U 135*0f1bf1c2SAdrian Chadd 136*0f1bf1c2SAdrian Chadd /* 137*0f1bf1c2SAdrian Chadd * Control messages (function to host) 138*0f1bf1c2SAdrian Chadd */ 139*0f1bf1c2SAdrian Chadd #define MBIM_OPEN_DONE 0x80000001U 140*0f1bf1c2SAdrian Chadd #define MBIM_CLOSE_DONE 0x80000002U 141*0f1bf1c2SAdrian Chadd #define MBIM_COMMAND_DONE 0x80000003U 142*0f1bf1c2SAdrian Chadd #define MBIM_FUNCTION_ERROR_MSG 0x80000004U 143*0f1bf1c2SAdrian Chadd #define MBIM_INDICATE_STATUS_MSG 0x80000007U 144*0f1bf1c2SAdrian Chadd 145*0f1bf1c2SAdrian Chadd /* 146*0f1bf1c2SAdrian Chadd * Generic status codes 147*0f1bf1c2SAdrian Chadd */ 148*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SUCCESS 0 149*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_BUSY 1 150*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_FAILURE 2 151*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SIM_NOT_INSERTED 3 152*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_BAD_SIM 4 153*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PIN_REQUIRED 5 154*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PIN_DISABLED 6 155*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_NOT_REGISTERED 7 156*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PROVIDERS_NOT_FOUND 8 157*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_NO_DEVICE_SUPPORT 9 158*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PROVIDER_NOT_VISIBLE 10 159*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_DATA_CLASS_NOT_AVAILABLE 11 160*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PACKET_SERVICE_DETACHED 12 161*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_MAX_ACTIVATED_CONTEXTS 13 162*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_NOT_INITIALIZED 14 163*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_VOICE_CALL_IN_PROGRESS 15 164*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_CONTEXT_NOT_ACTIVATED 16 165*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SERVICE_NOT_ACTIVATED 17 166*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_INVALID_ACCESS_STRING 18 167*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_INVALID_USER_NAME_PWD 19 168*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_RADIO_POWER_OFF 20 169*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_INVALID_PARAMETERS 21 170*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_READ_FAILURE 22 171*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_WRITE_FAILURE 23 172*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_NO_PHONEBOOK 25 173*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_PARAMETER_TOO_LONG 26 174*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_STK_BUSY 27 175*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_OPERATION_NOT_ALLOWED 28 176*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_MEMORY_FAILURE 29 177*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_INVALID_MEMORY_INDEX 30 178*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_MEMORY_FULL 31 179*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_FILTER_NOT_SUPPORTED 32 180*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_DSS_INSTANCE_LIMIT 33 181*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_INVALID_DEVICE_SERVICE_OPERATION 34 182*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_AUTH_INCORRECT_AUTN 35 183*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_AUTH_SYNC_FAILURE 36 184*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_AUTH_AMF_NOT_SET 37 185*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_CONTEXT_NOT_SUPPORTED 38 186*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SMS_UNKNOWN_SMSC_ADDRESS 100 187*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SMS_NETWORK_TIMEOUT 101 188*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SMS_LANG_NOT_SUPPORTED 102 189*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SMS_ENCODING_NOT_SUPPORTED 103 190*0f1bf1c2SAdrian Chadd #define MBIM_STATUS_SMS_FORMAT_NOT_SUPPORTED 104 191*0f1bf1c2SAdrian Chadd 192*0f1bf1c2SAdrian Chadd /* 193*0f1bf1c2SAdrian Chadd * Message formats 194*0f1bf1c2SAdrian Chadd */ 195*0f1bf1c2SAdrian Chadd struct mbim_msghdr { 196*0f1bf1c2SAdrian Chadd /* Msg header */ 197*0f1bf1c2SAdrian Chadd uint32_t type; /* message type */ 198*0f1bf1c2SAdrian Chadd uint32_t len; /* message length */ 199*0f1bf1c2SAdrian Chadd uint32_t tid; /* transaction id */ 200*0f1bf1c2SAdrian Chadd } __packed; 201*0f1bf1c2SAdrian Chadd 202*0f1bf1c2SAdrian Chadd struct mbim_fraghdr { 203*0f1bf1c2SAdrian Chadd uint32_t nfrag; /* total # of fragments */ 204*0f1bf1c2SAdrian Chadd uint32_t currfrag; /* current fragment */ 205*0f1bf1c2SAdrian Chadd } __packed; 206*0f1bf1c2SAdrian Chadd 207*0f1bf1c2SAdrian Chadd struct mbim_fragmented_msg_hdr { 208*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 209*0f1bf1c2SAdrian Chadd struct mbim_fraghdr frag; 210*0f1bf1c2SAdrian Chadd } __packed; 211*0f1bf1c2SAdrian Chadd 212*0f1bf1c2SAdrian Chadd struct mbim_h2f_openmsg { 213*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 214*0f1bf1c2SAdrian Chadd uint32_t maxlen; 215*0f1bf1c2SAdrian Chadd } __packed; 216*0f1bf1c2SAdrian Chadd 217*0f1bf1c2SAdrian Chadd struct mbim_h2f_closemsg { 218*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 219*0f1bf1c2SAdrian Chadd } __packed; 220*0f1bf1c2SAdrian Chadd 221*0f1bf1c2SAdrian Chadd struct mbim_h2f_cmd { 222*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 223*0f1bf1c2SAdrian Chadd struct mbim_fraghdr frag; 224*0f1bf1c2SAdrian Chadd uint8_t devid[MBIM_UUID_LEN]; 225*0f1bf1c2SAdrian Chadd uint32_t cid; /* command id */ 226*0f1bf1c2SAdrian Chadd #define MBIM_CMDOP_QRY 0 227*0f1bf1c2SAdrian Chadd #define MBIM_CMDOP_SET 1 228*0f1bf1c2SAdrian Chadd uint32_t op; 229*0f1bf1c2SAdrian Chadd uint32_t infolen; 230*0f1bf1c2SAdrian Chadd uint8_t info[]; 231*0f1bf1c2SAdrian Chadd } __packed; 232*0f1bf1c2SAdrian Chadd 233*0f1bf1c2SAdrian Chadd struct mbim_f2h_indicate_status { 234*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 235*0f1bf1c2SAdrian Chadd struct mbim_fraghdr frag; 236*0f1bf1c2SAdrian Chadd uint8_t devid[MBIM_UUID_LEN]; 237*0f1bf1c2SAdrian Chadd uint32_t cid; /* command id */ 238*0f1bf1c2SAdrian Chadd uint32_t infolen; 239*0f1bf1c2SAdrian Chadd uint8_t info[]; 240*0f1bf1c2SAdrian Chadd } __packed; 241*0f1bf1c2SAdrian Chadd 242*0f1bf1c2SAdrian Chadd struct mbim_f2h_hosterr { 243*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 244*0f1bf1c2SAdrian Chadd 245*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_TIMEOUT_FRAGMENT 1 246*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_FRAGMENT_OUT_OF_SEQUENCE 2 247*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_LENGTH_MISMATCH 3 248*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_DUPLICATED_TID 4 249*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_NOT_OPENED 5 250*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_UNKNOWN 6 251*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_CANCEL 7 252*0f1bf1c2SAdrian Chadd #define MBIM_ERROR_MAX_TRANSFER 8 253*0f1bf1c2SAdrian Chadd uint32_t err; 254*0f1bf1c2SAdrian Chadd } __packed; 255*0f1bf1c2SAdrian Chadd 256*0f1bf1c2SAdrian Chadd struct mbim_f2h_openclosedone { 257*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 258*0f1bf1c2SAdrian Chadd int32_t status; 259*0f1bf1c2SAdrian Chadd } __packed; 260*0f1bf1c2SAdrian Chadd 261*0f1bf1c2SAdrian Chadd struct mbim_f2h_cmddone { 262*0f1bf1c2SAdrian Chadd struct mbim_msghdr hdr; 263*0f1bf1c2SAdrian Chadd struct mbim_fraghdr frag; 264*0f1bf1c2SAdrian Chadd uint8_t devid[MBIM_UUID_LEN]; 265*0f1bf1c2SAdrian Chadd uint32_t cid; /* command id */ 266*0f1bf1c2SAdrian Chadd int32_t status; 267*0f1bf1c2SAdrian Chadd uint32_t infolen; 268*0f1bf1c2SAdrian Chadd uint8_t info[]; 269*0f1bf1c2SAdrian Chadd } __packed; 270*0f1bf1c2SAdrian Chadd 271*0f1bf1c2SAdrian Chadd /* 272*0f1bf1c2SAdrian Chadd * Messages and commands for MBIM_UUID_BASIC_CONNECT 273*0f1bf1c2SAdrian Chadd */ 274*0f1bf1c2SAdrian Chadd #define MBIM_CID_DEVICE_CAPS 1 275*0f1bf1c2SAdrian Chadd #define MBIM_CID_SUBSCRIBER_READY_STATUS 2 276*0f1bf1c2SAdrian Chadd #define MBIM_CID_RADIO_STATE 3 277*0f1bf1c2SAdrian Chadd #define MBIM_CID_PIN 4 278*0f1bf1c2SAdrian Chadd #define MBIM_CID_PIN_LIST 5 279*0f1bf1c2SAdrian Chadd #define MBIM_CID_HOME_PROVIDER 6 280*0f1bf1c2SAdrian Chadd #define MBIM_CID_PREFERRED_PROVIDERS 7 281*0f1bf1c2SAdrian Chadd #define MBIM_CID_VISIBLE_PROVIDERS 8 282*0f1bf1c2SAdrian Chadd #define MBIM_CID_REGISTER_STATE 9 283*0f1bf1c2SAdrian Chadd #define MBIM_CID_PACKET_SERVICE 10 284*0f1bf1c2SAdrian Chadd #define MBIM_CID_SIGNAL_STATE 11 285*0f1bf1c2SAdrian Chadd #define MBIM_CID_CONNECT 12 286*0f1bf1c2SAdrian Chadd #define MBIM_CID_PROVISIONED_CONTEXTS 13 287*0f1bf1c2SAdrian Chadd #define MBIM_CID_SERVICE_ACTIVATION 14 288*0f1bf1c2SAdrian Chadd #define MBIM_CID_IP_CONFIGURATION 15 289*0f1bf1c2SAdrian Chadd #define MBIM_CID_DEVICE_SERVICES 16 290*0f1bf1c2SAdrian Chadd #define MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST 19 291*0f1bf1c2SAdrian Chadd #define MBIM_CID_PACKET_STATISTICS 20 292*0f1bf1c2SAdrian Chadd #define MBIM_CID_NETWORK_IDLE_HINT 21 293*0f1bf1c2SAdrian Chadd #define MBIM_CID_EMERGENCY_MODE 22 294*0f1bf1c2SAdrian Chadd #define MBIM_CID_IP_PACKET_FILTERS 23 295*0f1bf1c2SAdrian Chadd #define MBIM_CID_MULTICARRIER_PROVIDERS 24 296*0f1bf1c2SAdrian Chadd 297*0f1bf1c2SAdrian Chadd struct mbim_cid_subscriber_ready_info { 298*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_NOTINITIALIZED 0 299*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_INITIALIZED 1 300*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_NOTINSERTED 2 301*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_BADSIM 3 302*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_FAILURE 4 303*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_NOTACTIVATED 5 304*0f1bf1c2SAdrian Chadd #define MBIM_SIMSTATE_LOCKED 6 305*0f1bf1c2SAdrian Chadd uint32_t ready; 306*0f1bf1c2SAdrian Chadd 307*0f1bf1c2SAdrian Chadd uint32_t sid_offs; 308*0f1bf1c2SAdrian Chadd uint32_t sid_size; 309*0f1bf1c2SAdrian Chadd 310*0f1bf1c2SAdrian Chadd uint32_t icc_offs; 311*0f1bf1c2SAdrian Chadd uint32_t icc_size; 312*0f1bf1c2SAdrian Chadd 313*0f1bf1c2SAdrian Chadd #define MBIM_SIMUNIQEID_NONE 0 314*0f1bf1c2SAdrian Chadd #define MBIM_SIMUNIQEID_PROTECT 1 315*0f1bf1c2SAdrian Chadd uint32_t info; 316*0f1bf1c2SAdrian Chadd 317*0f1bf1c2SAdrian Chadd uint32_t no_pn; 318*0f1bf1c2SAdrian Chadd struct { 319*0f1bf1c2SAdrian Chadd uint32_t offs; 320*0f1bf1c2SAdrian Chadd uint32_t size; 321*0f1bf1c2SAdrian Chadd } 322*0f1bf1c2SAdrian Chadd pn[]; 323*0f1bf1c2SAdrian Chadd } __packed; 324*0f1bf1c2SAdrian Chadd 325*0f1bf1c2SAdrian Chadd struct mbim_cid_radio_state { 326*0f1bf1c2SAdrian Chadd #define MBIM_RADIO_STATE_OFF 0 327*0f1bf1c2SAdrian Chadd #define MBIM_RADIO_STATE_ON 1 328*0f1bf1c2SAdrian Chadd uint32_t state; 329*0f1bf1c2SAdrian Chadd } __packed; 330*0f1bf1c2SAdrian Chadd 331*0f1bf1c2SAdrian Chadd struct mbim_cid_radio_state_info { 332*0f1bf1c2SAdrian Chadd uint32_t hw_state; 333*0f1bf1c2SAdrian Chadd uint32_t sw_state; 334*0f1bf1c2SAdrian Chadd } __packed; 335*0f1bf1c2SAdrian Chadd 336*0f1bf1c2SAdrian Chadd struct mbim_cid_pin { 337*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_NONE 0 338*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_CUSTOM 1 339*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_PIN1 2 340*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_PIN2 3 341*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_DEV_SIM_PIN 4 342*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PIN 5 343*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_NETWORK_PIN 6 344*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_NETWORK_SUBSET_PIN 7 345*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PIN 8 346*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_CORPORATE_PIN 9 347*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_SUBSIDY_LOCK 10 348*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_PUK1 11 349*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_PUK2 12 350*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_DEV_FIRST_SIM_PUK 13 351*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_NETWORK_PUK 14 352*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_NETWORK_SUBSET_PUK 15 353*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_SERVICE_PROVIDER_PUK 16 354*0f1bf1c2SAdrian Chadd #define MBIM_PIN_TYPE_CORPORATE_PUK 17 355*0f1bf1c2SAdrian Chadd uint32_t type; 356*0f1bf1c2SAdrian Chadd 357*0f1bf1c2SAdrian Chadd #define MBIM_PIN_OP_ENTER 0 358*0f1bf1c2SAdrian Chadd #define MBIM_PIN_OP_ENABLE 1 359*0f1bf1c2SAdrian Chadd #define MBIM_PIN_OP_DISABLE 2 360*0f1bf1c2SAdrian Chadd #define MBIM_PIN_OP_CHANGE 3 361*0f1bf1c2SAdrian Chadd uint32_t op; 362*0f1bf1c2SAdrian Chadd uint32_t pin_offs; 363*0f1bf1c2SAdrian Chadd uint32_t pin_size; 364*0f1bf1c2SAdrian Chadd uint32_t newpin_offs; 365*0f1bf1c2SAdrian Chadd uint32_t newpin_size; 366*0f1bf1c2SAdrian Chadd #define MBIM_PIN_MAXLEN 32 367*0f1bf1c2SAdrian Chadd uint8_t data[2 * MBIM_PIN_MAXLEN]; 368*0f1bf1c2SAdrian Chadd } __packed; 369*0f1bf1c2SAdrian Chadd 370*0f1bf1c2SAdrian Chadd struct mbim_cid_pin_info { 371*0f1bf1c2SAdrian Chadd uint32_t type; 372*0f1bf1c2SAdrian Chadd 373*0f1bf1c2SAdrian Chadd #define MBIM_PIN_STATE_UNLOCKED 0 374*0f1bf1c2SAdrian Chadd #define MBIM_PIN_STATE_LOCKED 1 375*0f1bf1c2SAdrian Chadd uint32_t state; 376*0f1bf1c2SAdrian Chadd uint32_t remaining_attempts; 377*0f1bf1c2SAdrian Chadd } __packed; 378*0f1bf1c2SAdrian Chadd 379*0f1bf1c2SAdrian Chadd struct mbim_cid_pin_list_info { 380*0f1bf1c2SAdrian Chadd struct mbim_pin_desc { 381*0f1bf1c2SAdrian Chadd 382*0f1bf1c2SAdrian Chadd #define MBIM_PINMODE_NOTSUPPORTED 0 383*0f1bf1c2SAdrian Chadd #define MBIM_PINMODE_ENABLED 1 384*0f1bf1c2SAdrian Chadd #define MBIM_PINMODE_DISABLED 2 385*0f1bf1c2SAdrian Chadd uint32_t mode; 386*0f1bf1c2SAdrian Chadd 387*0f1bf1c2SAdrian Chadd #define MBIM_PINFORMAT_UNKNOWN 0 388*0f1bf1c2SAdrian Chadd #define MBIM_PINFORMAT_NUMERIC 1 389*0f1bf1c2SAdrian Chadd #define MBIM_PINFORMAT_ALPHANUMERIC 2 390*0f1bf1c2SAdrian Chadd uint32_t format; 391*0f1bf1c2SAdrian Chadd 392*0f1bf1c2SAdrian Chadd uint32_t minlen; 393*0f1bf1c2SAdrian Chadd uint32_t maxlen; 394*0f1bf1c2SAdrian Chadd } 395*0f1bf1c2SAdrian Chadd pin1, 396*0f1bf1c2SAdrian Chadd pin2, 397*0f1bf1c2SAdrian Chadd dev_sim_pin, 398*0f1bf1c2SAdrian Chadd first_dev_sim_pin, 399*0f1bf1c2SAdrian Chadd net_pin, 400*0f1bf1c2SAdrian Chadd net_sub_pin, 401*0f1bf1c2SAdrian Chadd svp_pin, 402*0f1bf1c2SAdrian Chadd corp_pin, 403*0f1bf1c2SAdrian Chadd subsidy_lock, 404*0f1bf1c2SAdrian Chadd custom; 405*0f1bf1c2SAdrian Chadd } __packed; 406*0f1bf1c2SAdrian Chadd 407*0f1bf1c2SAdrian Chadd struct mbim_cid_device_caps { 408*0f1bf1c2SAdrian Chadd #define MBIM_DEVTYPE_UNKNOWN 0 409*0f1bf1c2SAdrian Chadd #define MBIM_DEVTYPE_EMBEDDED 1 410*0f1bf1c2SAdrian Chadd #define MBIM_DEVTYPE_REMOVABLE 2 411*0f1bf1c2SAdrian Chadd #define MBIM_DEVTYPE_REMOTE 3 412*0f1bf1c2SAdrian Chadd uint32_t devtype; 413*0f1bf1c2SAdrian Chadd 414*0f1bf1c2SAdrian Chadd uint32_t cellclass; /* values: MBIM_CELLULAR_CLASS */ 415*0f1bf1c2SAdrian Chadd uint32_t voiceclass; 416*0f1bf1c2SAdrian Chadd uint32_t simclass; 417*0f1bf1c2SAdrian Chadd uint32_t dataclass; /* values: MBIM_DATA_CLASS */ 418*0f1bf1c2SAdrian Chadd uint32_t smscaps; 419*0f1bf1c2SAdrian Chadd uint32_t cntrlcaps; 420*0f1bf1c2SAdrian Chadd uint32_t max_sessions; 421*0f1bf1c2SAdrian Chadd 422*0f1bf1c2SAdrian Chadd uint32_t custdataclass_offs; 423*0f1bf1c2SAdrian Chadd uint32_t custdataclass_size; 424*0f1bf1c2SAdrian Chadd 425*0f1bf1c2SAdrian Chadd uint32_t devid_offs; 426*0f1bf1c2SAdrian Chadd uint32_t devid_size; 427*0f1bf1c2SAdrian Chadd 428*0f1bf1c2SAdrian Chadd uint32_t fwinfo_offs; 429*0f1bf1c2SAdrian Chadd uint32_t fwinfo_size; 430*0f1bf1c2SAdrian Chadd 431*0f1bf1c2SAdrian Chadd uint32_t hwinfo_offs; 432*0f1bf1c2SAdrian Chadd uint32_t hwinfo_size; 433*0f1bf1c2SAdrian Chadd 434*0f1bf1c2SAdrian Chadd uint32_t data[]; 435*0f1bf1c2SAdrian Chadd } __packed; 436*0f1bf1c2SAdrian Chadd 437*0f1bf1c2SAdrian Chadd struct mbim_cid_registration_state { 438*0f1bf1c2SAdrian Chadd uint32_t provid_offs; 439*0f1bf1c2SAdrian Chadd uint32_t provid_size; 440*0f1bf1c2SAdrian Chadd 441*0f1bf1c2SAdrian Chadd #define MBIM_REGACTION_AUTOMATIC 0 442*0f1bf1c2SAdrian Chadd #define MBIM_REGACTION_MANUAL 1 443*0f1bf1c2SAdrian Chadd uint32_t regaction; 444*0f1bf1c2SAdrian Chadd uint32_t data_class; 445*0f1bf1c2SAdrian Chadd 446*0f1bf1c2SAdrian Chadd uint32_t data[]; 447*0f1bf1c2SAdrian Chadd } __packed; 448*0f1bf1c2SAdrian Chadd 449*0f1bf1c2SAdrian Chadd struct mbim_cid_registration_state_info { 450*0f1bf1c2SAdrian Chadd uint32_t nwerror; 451*0f1bf1c2SAdrian Chadd 452*0f1bf1c2SAdrian Chadd uint32_t regstate; /* values: MBIM_REGISTER_STATE */ 453*0f1bf1c2SAdrian Chadd 454*0f1bf1c2SAdrian Chadd #define MBIM_REGMODE_UNKNOWN 0 455*0f1bf1c2SAdrian Chadd #define MBIM_REGMODE_AUTOMATIC 1 456*0f1bf1c2SAdrian Chadd #define MBIM_REGMODE_MANUAL 2 457*0f1bf1c2SAdrian Chadd uint32_t regmode; 458*0f1bf1c2SAdrian Chadd 459*0f1bf1c2SAdrian Chadd uint32_t availclasses; /* values: MBIM_DATA_CLASS */ 460*0f1bf1c2SAdrian Chadd uint32_t curcellclass; /* values: MBIM_CELLULAR_CLASS */ 461*0f1bf1c2SAdrian Chadd 462*0f1bf1c2SAdrian Chadd uint32_t provid_offs; 463*0f1bf1c2SAdrian Chadd uint32_t provid_size; 464*0f1bf1c2SAdrian Chadd 465*0f1bf1c2SAdrian Chadd uint32_t provname_offs; 466*0f1bf1c2SAdrian Chadd uint32_t provname_size; 467*0f1bf1c2SAdrian Chadd 468*0f1bf1c2SAdrian Chadd uint32_t roamingtxt_offs; 469*0f1bf1c2SAdrian Chadd uint32_t roamingtxt_size; 470*0f1bf1c2SAdrian Chadd 471*0f1bf1c2SAdrian Chadd #define MBIM_REGFLAGS_NONE 0 472*0f1bf1c2SAdrian Chadd #define MBIM_REGFLAGS_MANUAL_NOT_AVAILABLE 1 473*0f1bf1c2SAdrian Chadd #define MBIM_REGFLAGS_PACKETSERVICE_AUTOATTACH 2 474*0f1bf1c2SAdrian Chadd uint32_t regflag; 475*0f1bf1c2SAdrian Chadd 476*0f1bf1c2SAdrian Chadd uint32_t data[]; 477*0f1bf1c2SAdrian Chadd } __packed; 478*0f1bf1c2SAdrian Chadd 479*0f1bf1c2SAdrian Chadd struct mbim_cid_packet_service { 480*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_ACTION_ATTACH 0 481*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_ACTION_DETACH 1 482*0f1bf1c2SAdrian Chadd uint32_t action; 483*0f1bf1c2SAdrian Chadd } __packed; 484*0f1bf1c2SAdrian Chadd 485*0f1bf1c2SAdrian Chadd struct mbim_cid_packet_service_info { 486*0f1bf1c2SAdrian Chadd uint32_t nwerror; 487*0f1bf1c2SAdrian Chadd 488*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_STATE_UNKNOWN 0 489*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_STATE_ATTACHING 1 490*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_STATE_ATTACHED 2 491*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_STATE_DETACHING 3 492*0f1bf1c2SAdrian Chadd #define MBIM_PKTSERVICE_STATE_DETACHED 4 493*0f1bf1c2SAdrian Chadd uint32_t state; 494*0f1bf1c2SAdrian Chadd 495*0f1bf1c2SAdrian Chadd uint32_t highest_dataclass; 496*0f1bf1c2SAdrian Chadd uint64_t uplink_speed; 497*0f1bf1c2SAdrian Chadd uint64_t downlink_speed; 498*0f1bf1c2SAdrian Chadd } __packed; 499*0f1bf1c2SAdrian Chadd 500*0f1bf1c2SAdrian Chadd struct mbim_cid_signal_state { 501*0f1bf1c2SAdrian Chadd uint32_t rssi; 502*0f1bf1c2SAdrian Chadd uint32_t err_rate; 503*0f1bf1c2SAdrian Chadd uint32_t ss_intvl; 504*0f1bf1c2SAdrian Chadd uint32_t rssi_thr; 505*0f1bf1c2SAdrian Chadd uint32_t err_thr; 506*0f1bf1c2SAdrian Chadd } __packed; 507*0f1bf1c2SAdrian Chadd 508*0f1bf1c2SAdrian Chadd struct mbim_cid_connect { 509*0f1bf1c2SAdrian Chadd uint32_t sessionid; 510*0f1bf1c2SAdrian Chadd 511*0f1bf1c2SAdrian Chadd #define MBIM_CONNECT_DEACTIVATE 0 512*0f1bf1c2SAdrian Chadd #define MBIM_CONNECT_ACTIVATE 1 513*0f1bf1c2SAdrian Chadd uint32_t command; 514*0f1bf1c2SAdrian Chadd 515*0f1bf1c2SAdrian Chadd #define MBIM_ACCESS_MAXLEN 200 516*0f1bf1c2SAdrian Chadd uint32_t access_offs; 517*0f1bf1c2SAdrian Chadd uint32_t access_size; 518*0f1bf1c2SAdrian Chadd 519*0f1bf1c2SAdrian Chadd #define MBIM_USER_MAXLEN 510 520*0f1bf1c2SAdrian Chadd uint32_t user_offs; 521*0f1bf1c2SAdrian Chadd uint32_t user_size; 522*0f1bf1c2SAdrian Chadd 523*0f1bf1c2SAdrian Chadd #define MBIM_PASSWD_MAXLEN 510 524*0f1bf1c2SAdrian Chadd uint32_t passwd_offs; 525*0f1bf1c2SAdrian Chadd uint32_t passwd_size; 526*0f1bf1c2SAdrian Chadd 527*0f1bf1c2SAdrian Chadd #define MBIM_COMPRESSION_NONE 0 528*0f1bf1c2SAdrian Chadd #define MBIM_COMPRESSION_ENABLE 1 529*0f1bf1c2SAdrian Chadd uint32_t compression; 530*0f1bf1c2SAdrian Chadd 531*0f1bf1c2SAdrian Chadd #define MBIM_AUTHPROT_NONE 0 532*0f1bf1c2SAdrian Chadd #define MBIM_AUTHPROT_PAP 1 533*0f1bf1c2SAdrian Chadd #define MBIM_AUTHPROT_CHAP 2 534*0f1bf1c2SAdrian Chadd #define MBIM_AUTHPROT_MSCHAP 3 535*0f1bf1c2SAdrian Chadd uint32_t authprot; 536*0f1bf1c2SAdrian Chadd 537*0f1bf1c2SAdrian Chadd #define MBIM_CONTEXT_IPTYPE_DEFAULT 0 538*0f1bf1c2SAdrian Chadd #define MBIM_CONTEXT_IPTYPE_IPV4 1 539*0f1bf1c2SAdrian Chadd #define MBIM_CONTEXT_IPTYPE_IPV6 2 540*0f1bf1c2SAdrian Chadd #define MBIM_CONTEXT_IPTYPE_IPV4V6 3 541*0f1bf1c2SAdrian Chadd #define MBIM_CONTEXT_IPTYPE_IPV4ANDV6 4 542*0f1bf1c2SAdrian Chadd uint32_t iptype; 543*0f1bf1c2SAdrian Chadd 544*0f1bf1c2SAdrian Chadd uint8_t context[MBIM_UUID_LEN]; 545*0f1bf1c2SAdrian Chadd 546*0f1bf1c2SAdrian Chadd uint8_t data[MBIM_ACCESS_MAXLEN + MBIM_USER_MAXLEN + 547*0f1bf1c2SAdrian Chadd MBIM_PASSWD_MAXLEN]; 548*0f1bf1c2SAdrian Chadd 549*0f1bf1c2SAdrian Chadd } __packed; 550*0f1bf1c2SAdrian Chadd 551*0f1bf1c2SAdrian Chadd struct mbim_cid_connect_info { 552*0f1bf1c2SAdrian Chadd uint32_t sessionid; 553*0f1bf1c2SAdrian Chadd 554*0f1bf1c2SAdrian Chadd #define MBIM_ACTIVATION_STATE_UNKNOWN 0 555*0f1bf1c2SAdrian Chadd #define MBIM_ACTIVATION_STATE_ACTIVATED 1 556*0f1bf1c2SAdrian Chadd #define MBIM_ACTIVATION_STATE_ACTIVATING 2 557*0f1bf1c2SAdrian Chadd #define MBIM_ACTIVATION_STATE_DEACTIVATED 3 558*0f1bf1c2SAdrian Chadd #define MBIM_ACTIVATION_STATE_DEACTIVATING 4 559*0f1bf1c2SAdrian Chadd uint32_t activation; 560*0f1bf1c2SAdrian Chadd 561*0f1bf1c2SAdrian Chadd uint32_t voice; 562*0f1bf1c2SAdrian Chadd uint32_t iptype; 563*0f1bf1c2SAdrian Chadd uint8_t context[MBIM_UUID_LEN]; 564*0f1bf1c2SAdrian Chadd uint32_t nwerror; 565*0f1bf1c2SAdrian Chadd } __packed; 566*0f1bf1c2SAdrian Chadd 567*0f1bf1c2SAdrian Chadd struct mbim_cid_ipv4_element { 568*0f1bf1c2SAdrian Chadd uint32_t prefixlen; 569*0f1bf1c2SAdrian Chadd uint32_t addr; 570*0f1bf1c2SAdrian Chadd } __packed; 571*0f1bf1c2SAdrian Chadd 572*0f1bf1c2SAdrian Chadd struct mbim_cid_ipv6_element { 573*0f1bf1c2SAdrian Chadd uint32_t prefixlen; 574*0f1bf1c2SAdrian Chadd uint8_t addr[16]; 575*0f1bf1c2SAdrian Chadd } __packed; 576*0f1bf1c2SAdrian Chadd 577*0f1bf1c2SAdrian Chadd struct mbim_cid_ip_configuration_info { 578*0f1bf1c2SAdrian Chadd uint32_t sessionid; 579*0f1bf1c2SAdrian Chadd 580*0f1bf1c2SAdrian Chadd #define MBIM_IPCONF_HAS_ADDRINFO 0x0001 581*0f1bf1c2SAdrian Chadd #define MBIM_IPCONF_HAS_GWINFO 0x0002 582*0f1bf1c2SAdrian Chadd #define MBIM_IPCONF_HAS_DNSINFO 0x0004 583*0f1bf1c2SAdrian Chadd #define MBIM_IPCONF_HAS_MTUINFO 0x0008 584*0f1bf1c2SAdrian Chadd uint32_t ipv4_available; 585*0f1bf1c2SAdrian Chadd uint32_t ipv6_available; 586*0f1bf1c2SAdrian Chadd 587*0f1bf1c2SAdrian Chadd uint32_t ipv4_naddr; 588*0f1bf1c2SAdrian Chadd uint32_t ipv4_addroffs; 589*0f1bf1c2SAdrian Chadd uint32_t ipv6_naddr; 590*0f1bf1c2SAdrian Chadd uint32_t ipv6_addroffs; 591*0f1bf1c2SAdrian Chadd 592*0f1bf1c2SAdrian Chadd uint32_t ipv4_gwoffs; 593*0f1bf1c2SAdrian Chadd uint32_t ipv6_gwoffs; 594*0f1bf1c2SAdrian Chadd 595*0f1bf1c2SAdrian Chadd uint32_t ipv4_ndnssrv; 596*0f1bf1c2SAdrian Chadd uint32_t ipv4_dnssrvoffs; 597*0f1bf1c2SAdrian Chadd uint32_t ipv6_ndnssrv; 598*0f1bf1c2SAdrian Chadd uint32_t ipv6_dnssrvoffs; 599*0f1bf1c2SAdrian Chadd 600*0f1bf1c2SAdrian Chadd uint32_t ipv4_mtu; 601*0f1bf1c2SAdrian Chadd uint32_t ipv6_mtu; 602*0f1bf1c2SAdrian Chadd 603*0f1bf1c2SAdrian Chadd uint32_t data[]; 604*0f1bf1c2SAdrian Chadd } __packed; 605*0f1bf1c2SAdrian Chadd 606*0f1bf1c2SAdrian Chadd struct mbim_cid_packet_statistics_info { 607*0f1bf1c2SAdrian Chadd uint32_t in_discards; 608*0f1bf1c2SAdrian Chadd uint32_t in_errors; 609*0f1bf1c2SAdrian Chadd uint64_t in_octets; 610*0f1bf1c2SAdrian Chadd uint64_t in_packets; 611*0f1bf1c2SAdrian Chadd uint64_t out_octets; 612*0f1bf1c2SAdrian Chadd uint64_t out_packets; 613*0f1bf1c2SAdrian Chadd uint32_t out_errors; 614*0f1bf1c2SAdrian Chadd uint32_t out_discards; 615*0f1bf1c2SAdrian Chadd } __packed; 616*0f1bf1c2SAdrian Chadd 617*0f1bf1c2SAdrian Chadd 618*0f1bf1c2SAdrian Chadd #ifdef _KERNEL 619*0f1bf1c2SAdrian Chadd 620*0f1bf1c2SAdrian Chadd struct mbim_descriptor { 621*0f1bf1c2SAdrian Chadd uByte bLength; 622*0f1bf1c2SAdrian Chadd uByte bDescriptorType; 623*0f1bf1c2SAdrian Chadd uByte bDescriptorSubtype; 624*0f1bf1c2SAdrian Chadd #define MBIM_VER_MAJOR(v) (((v) >> 8) & 0x0f) 625*0f1bf1c2SAdrian Chadd #define MBIM_VER_MINOR(v) ((v) & 0x0f) 626*0f1bf1c2SAdrian Chadd uWord bcdMBIMVersion; 627*0f1bf1c2SAdrian Chadd uWord wMaxControlMessage; 628*0f1bf1c2SAdrian Chadd uByte bNumberFilters; 629*0f1bf1c2SAdrian Chadd uByte bMaxFilterSize; 630*0f1bf1c2SAdrian Chadd uWord wMaxSegmentSize; 631*0f1bf1c2SAdrian Chadd uByte bmNetworkCapabilities; 632*0f1bf1c2SAdrian Chadd } __packed; 633*0f1bf1c2SAdrian Chadd 634*0f1bf1c2SAdrian Chadd /* 635*0f1bf1c2SAdrian Chadd * NCM Parameters 636*0f1bf1c2SAdrian Chadd */ 637*0f1bf1c2SAdrian Chadd #define NCM_GET_NTB_PARAMETERS 0x80 638*0f1bf1c2SAdrian Chadd 639*0f1bf1c2SAdrian Chadd struct ncm_ntb_parameters { 640*0f1bf1c2SAdrian Chadd uWord wLength; 641*0f1bf1c2SAdrian Chadd uWord bmNtbFormatsSupported; 642*0f1bf1c2SAdrian Chadd #define NCM_FORMAT_NTB16 0x0001 643*0f1bf1c2SAdrian Chadd #define NCM_FORMAT_NTB32 0x0002 644*0f1bf1c2SAdrian Chadd uDWord dwNtbInMaxSize; 645*0f1bf1c2SAdrian Chadd uWord wNdpInDivisor; 646*0f1bf1c2SAdrian Chadd uWord wNdpInPayloadRemainder; 647*0f1bf1c2SAdrian Chadd uWord wNdpInAlignment; 648*0f1bf1c2SAdrian Chadd uWord wReserved1; 649*0f1bf1c2SAdrian Chadd uDWord dwNtbOutMaxSize; 650*0f1bf1c2SAdrian Chadd uWord wNdpOutDivisor; 651*0f1bf1c2SAdrian Chadd uWord wNdpOutPayloadRemainder; 652*0f1bf1c2SAdrian Chadd uWord wNdpOutAlignment; 653*0f1bf1c2SAdrian Chadd uWord wNtbOutMaxDatagrams; 654*0f1bf1c2SAdrian Chadd } __packed; 655*0f1bf1c2SAdrian Chadd 656*0f1bf1c2SAdrian Chadd /* 657*0f1bf1c2SAdrian Chadd * NCM Encoding 658*0f1bf1c2SAdrian Chadd */ 659*0f1bf1c2SAdrian Chadd #define MBIM_HDR16_LEN \ 660*0f1bf1c2SAdrian Chadd (sizeof(struct ncm_header16) + sizeof(struct ncm_pointer16)) 661*0f1bf1c2SAdrian Chadd #define MBIM_HDR32_LEN \ 662*0f1bf1c2SAdrian Chadd (sizeof(struct ncm_header32) + sizeof(struct ncm_pointer32)) 663*0f1bf1c2SAdrian Chadd 664*0f1bf1c2SAdrian Chadd struct ncm_header16 { 665*0f1bf1c2SAdrian Chadd #define NCM_HDR16_SIG 0x484d434e 666*0f1bf1c2SAdrian Chadd uDWord dwSignature; 667*0f1bf1c2SAdrian Chadd uWord wHeaderLength; 668*0f1bf1c2SAdrian Chadd uWord wSequence; 669*0f1bf1c2SAdrian Chadd uWord wBlockLength; 670*0f1bf1c2SAdrian Chadd uWord wNdpIndex; 671*0f1bf1c2SAdrian Chadd } __packed; 672*0f1bf1c2SAdrian Chadd 673*0f1bf1c2SAdrian Chadd struct ncm_header32 { 674*0f1bf1c2SAdrian Chadd #define NCM_HDR32_SIG 0x686d636e 675*0f1bf1c2SAdrian Chadd uDWord dwSignature; 676*0f1bf1c2SAdrian Chadd uWord wHeaderLength; 677*0f1bf1c2SAdrian Chadd uWord wSequence; 678*0f1bf1c2SAdrian Chadd uDWord dwBlockLength; 679*0f1bf1c2SAdrian Chadd uDWord dwNdpIndex; 680*0f1bf1c2SAdrian Chadd } __packed; 681*0f1bf1c2SAdrian Chadd 682*0f1bf1c2SAdrian Chadd 683*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH_SIDSHIFT 24 684*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH_GETSID(s) (((s) > MBIM_NCM_NTH_SIDSHIFT) & 0xff) 685*0f1bf1c2SAdrian Chadd 686*0f1bf1c2SAdrian Chadd struct ncm_pointer16_dgram { 687*0f1bf1c2SAdrian Chadd uWord wDatagramIndex; 688*0f1bf1c2SAdrian Chadd uWord wDatagramLen; 689*0f1bf1c2SAdrian Chadd } __packed; 690*0f1bf1c2SAdrian Chadd 691*0f1bf1c2SAdrian Chadd struct ncm_pointer16 { 692*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH16_IPS 0x00535049 693*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH16_ISISG(s) (((s) & 0x00ffffff) == MBIM_NCM_NTH16_IPS) 694*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH16_SIG(s) \ 695*0f1bf1c2SAdrian Chadd ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH16_IPS) 696*0f1bf1c2SAdrian Chadd uDWord dwSignature; 697*0f1bf1c2SAdrian Chadd uWord wLength; 698*0f1bf1c2SAdrian Chadd uWord wNextNdpIndex; 699*0f1bf1c2SAdrian Chadd 700*0f1bf1c2SAdrian Chadd /* Minimum is two datagrams, but can be more */ 701*0f1bf1c2SAdrian Chadd struct ncm_pointer16_dgram dgram[2]; 702*0f1bf1c2SAdrian Chadd } __packed; 703*0f1bf1c2SAdrian Chadd 704*0f1bf1c2SAdrian Chadd struct ncm_pointer32_dgram { 705*0f1bf1c2SAdrian Chadd uDWord dwDatagramIndex; 706*0f1bf1c2SAdrian Chadd uDWord dwDatagramLen; 707*0f1bf1c2SAdrian Chadd } __packed; 708*0f1bf1c2SAdrian Chadd 709*0f1bf1c2SAdrian Chadd struct ncm_pointer32 { 710*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH32_IPS 0x00737069 711*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH32_ISISG(s) \ 712*0f1bf1c2SAdrian Chadd (((s) & 0x00ffffff) == MBIM_NCM_NTH32_IPS) 713*0f1bf1c2SAdrian Chadd #define MBIM_NCM_NTH32_SIG(s) \ 714*0f1bf1c2SAdrian Chadd ((((s) & 0xff) << MBIM_NCM_NTH_SIDSHIFT) | MBIM_NCM_NTH32_IPS) 715*0f1bf1c2SAdrian Chadd uDWord dwSignature; 716*0f1bf1c2SAdrian Chadd uWord wLength; 717*0f1bf1c2SAdrian Chadd uWord wReserved6; 718*0f1bf1c2SAdrian Chadd uDWord dwNextNdpIndex; 719*0f1bf1c2SAdrian Chadd uDWord dwReserved12; 720*0f1bf1c2SAdrian Chadd 721*0f1bf1c2SAdrian Chadd /* Minimum is two datagrams, but can be more */ 722*0f1bf1c2SAdrian Chadd struct ncm_pointer32_dgram dgram[2]; 723*0f1bf1c2SAdrian Chadd } __packed; 724*0f1bf1c2SAdrian Chadd 725*0f1bf1c2SAdrian Chadd #endif /* _KERNEL */ 726*0f1bf1c2SAdrian Chadd 727*0f1bf1c2SAdrian Chadd #endif /* _MBIM_H_ */ 728