1*4882a593Smuzhiyun /*=========================================================================== 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun M P Q M I. H 4*4882a593Smuzhiyun DESCRIPTION: 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun This module contains forward references to the QMI module. 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun INITIALIZATION AND SEQUENCING REQUIREMENTS: 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun Copyright (C) 2011 by Qualcomm Technologies, Incorporated. All Rights Reserved. 11*4882a593Smuzhiyun ===========================================================================*/ 12*4882a593Smuzhiyun /*=========================================================================== 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun EDIT HISTORY FOR FILE 15*4882a593Smuzhiyun $Header: //depot/QMI/win/qcdrivers/ndis/MPQMI.h#3 $ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun when who what, where, why 18*4882a593Smuzhiyun -------- --- ---------------------------------------------------------- 19*4882a593Smuzhiyun 11/20/04 hg Initial version. 20*4882a593Smuzhiyun ===========================================================================*/ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #ifndef USBQMI_H 23*4882a593Smuzhiyun #define USBQMI_H 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun typedef signed char CHAR; 26*4882a593Smuzhiyun typedef unsigned char UCHAR; 27*4882a593Smuzhiyun typedef short SHORT; 28*4882a593Smuzhiyun typedef unsigned short USHORT; 29*4882a593Smuzhiyun typedef int INT; 30*4882a593Smuzhiyun typedef unsigned int UINT; 31*4882a593Smuzhiyun typedef long LONG; 32*4882a593Smuzhiyun typedef unsigned int ULONG; 33*4882a593Smuzhiyun typedef unsigned long long ULONG64; 34*4882a593Smuzhiyun typedef signed char *PCHAR; 35*4882a593Smuzhiyun typedef unsigned char *PUCHAR; 36*4882a593Smuzhiyun typedef int *PINT; 37*4882a593Smuzhiyun typedef int BOOL; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define TRUE (1 == 1) 40*4882a593Smuzhiyun #define FALSE (1 != 1) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define QMICTL_SUPPORTED_MAJOR_VERSION 1 43*4882a593Smuzhiyun #define QMICTL_SUPPORTED_MINOR_VERSION 0 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #pragma pack(push, 1) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun // ========= USB Control Message ========== 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define USB_CTL_MSG_TYPE_QMI 0x01 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun // USB Control Message 52*4882a593Smuzhiyun typedef struct _QCUSB_CTL_MSG_HDR 53*4882a593Smuzhiyun { 54*4882a593Smuzhiyun UCHAR IFType; 55*4882a593Smuzhiyun } __attribute__ ((packed)) QCUSB_CTL_MSG_HDR, *PQCUSB_CTL_MSG_HDR; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define QCUSB_CTL_MSG_HDR_SIZE sizeof(QCUSB_CTL_MSG_HDR) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun typedef struct _QCUSB_CTL_MSG 60*4882a593Smuzhiyun { 61*4882a593Smuzhiyun UCHAR IFType; 62*4882a593Smuzhiyun UCHAR Message; 63*4882a593Smuzhiyun } __attribute__ ((packed)) QCUSB_CTL_MSG, *PQCUSB_CTL_MSG; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun #define QCTLV_TYPE_REQUIRED_PARAMETER 0x01 66*4882a593Smuzhiyun #define QCTLV_TYPE_RESULT_CODE 0x02 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun // ================= QMI ================== 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun // Define QMI Type 71*4882a593Smuzhiyun typedef enum _QMI_SERVICE_TYPE 72*4882a593Smuzhiyun { 73*4882a593Smuzhiyun QMUX_TYPE_CTL = 0x00, 74*4882a593Smuzhiyun QMUX_TYPE_WDS = 0x01, 75*4882a593Smuzhiyun QMUX_TYPE_DMS = 0x02, 76*4882a593Smuzhiyun QMUX_TYPE_NAS = 0x03, 77*4882a593Smuzhiyun QMUX_TYPE_QOS = 0x04, 78*4882a593Smuzhiyun QMUX_TYPE_WMS = 0x05, 79*4882a593Smuzhiyun QMUX_TYPE_PDS = 0x06, 80*4882a593Smuzhiyun QMUX_TYPE_UIM = 0x0B, 81*4882a593Smuzhiyun QMUX_TYPE_WDS_IPV6 = 0x11, 82*4882a593Smuzhiyun QMUX_TYPE_WDS_ADMIN = 0x1A, 83*4882a593Smuzhiyun QMUX_TYPE_MAX = 0xFF, 84*4882a593Smuzhiyun QMUX_TYPE_ALL = 0xFF 85*4882a593Smuzhiyun } QMI_SERVICE_TYPE; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun typedef enum _QMI_RESULT_CODE_TYPE 88*4882a593Smuzhiyun { 89*4882a593Smuzhiyun QMI_RESULT_SUCCESS = 0x0000, 90*4882a593Smuzhiyun QMI_RESULT_FAILURE = 0x0001 91*4882a593Smuzhiyun } QMI_RESULT_CODE_TYPE; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun typedef enum _QMI_ERROR_CODE_TYPE 94*4882a593Smuzhiyun { 95*4882a593Smuzhiyun QMI_ERR_NONE = 0x0000 96*4882a593Smuzhiyun ,QMI_ERR_MALFORMED_MSG = 0x0001 97*4882a593Smuzhiyun ,QMI_ERR_NO_MEMORY = 0x0002 98*4882a593Smuzhiyun ,QMI_ERR_INTERNAL = 0x0003 99*4882a593Smuzhiyun ,QMI_ERR_ABORTED = 0x0004 100*4882a593Smuzhiyun ,QMI_ERR_CLIENT_IDS_EXHAUSTED = 0x0005 101*4882a593Smuzhiyun ,QMI_ERR_UNABORTABLE_TRANSACTION = 0x0006 102*4882a593Smuzhiyun ,QMI_ERR_INVALID_CLIENT_ID = 0x0007 103*4882a593Smuzhiyun ,QMI_ERR_NO_THRESHOLDS = 0x0008 104*4882a593Smuzhiyun ,QMI_ERR_INVALID_HANDLE = 0x0009 105*4882a593Smuzhiyun ,QMI_ERR_INVALID_PROFILE = 0x000A 106*4882a593Smuzhiyun ,QMI_ERR_INVALID_PINID = 0x000B 107*4882a593Smuzhiyun ,QMI_ERR_INCORRECT_PIN = 0x000C 108*4882a593Smuzhiyun ,QMI_ERR_NO_NETWORK_FOUND = 0x000D 109*4882a593Smuzhiyun ,QMI_ERR_CALL_FAILED = 0x000E 110*4882a593Smuzhiyun ,QMI_ERR_OUT_OF_CALL = 0x000F 111*4882a593Smuzhiyun ,QMI_ERR_NOT_PROVISIONED = 0x0010 112*4882a593Smuzhiyun ,QMI_ERR_MISSING_ARG = 0x0011 113*4882a593Smuzhiyun ,QMI_ERR_ARG_TOO_LONG = 0x0013 114*4882a593Smuzhiyun ,QMI_ERR_INVALID_TX_ID = 0x0016 115*4882a593Smuzhiyun ,QMI_ERR_DEVICE_IN_USE = 0x0017 116*4882a593Smuzhiyun ,QMI_ERR_OP_NETWORK_UNSUPPORTED = 0x0018 117*4882a593Smuzhiyun ,QMI_ERR_OP_DEVICE_UNSUPPORTED = 0x0019 118*4882a593Smuzhiyun ,QMI_ERR_NO_EFFECT = 0x001A 119*4882a593Smuzhiyun ,QMI_ERR_NO_FREE_PROFILE = 0x001B 120*4882a593Smuzhiyun ,QMI_ERR_INVALID_PDP_TYPE = 0x001C 121*4882a593Smuzhiyun ,QMI_ERR_INVALID_TECH_PREF = 0x001D 122*4882a593Smuzhiyun ,QMI_ERR_INVALID_PROFILE_TYPE = 0x001E 123*4882a593Smuzhiyun ,QMI_ERR_INVALID_SERVICE_TYPE = 0x001F 124*4882a593Smuzhiyun ,QMI_ERR_INVALID_REGISTER_ACTION = 0x0020 125*4882a593Smuzhiyun ,QMI_ERR_INVALID_PS_ATTACH_ACTION = 0x0021 126*4882a593Smuzhiyun ,QMI_ERR_AUTHENTICATION_FAILED = 0x0022 127*4882a593Smuzhiyun ,QMI_ERR_PIN_BLOCKED = 0x0023 128*4882a593Smuzhiyun ,QMI_ERR_PIN_PERM_BLOCKED = 0x0024 129*4882a593Smuzhiyun ,QMI_ERR_SIM_NOT_INITIALIZED = 0x0025 130*4882a593Smuzhiyun ,QMI_ERR_MAX_QOS_REQUESTS_IN_USE = 0x0026 131*4882a593Smuzhiyun ,QMI_ERR_INCORRECT_FLOW_FILTER = 0x0027 132*4882a593Smuzhiyun ,QMI_ERR_NETWORK_QOS_UNAWARE = 0x0028 133*4882a593Smuzhiyun ,QMI_ERR_INVALID_QOS_ID = 0x0029 134*4882a593Smuzhiyun ,QMI_ERR_INVALID_ID = 0x0029 135*4882a593Smuzhiyun ,QMI_ERR_REQUESTED_NUM_UNSUPPORTED = 0x002A 136*4882a593Smuzhiyun ,QMI_ERR_INTERFACE_NOT_FOUND = 0x002B 137*4882a593Smuzhiyun ,QMI_ERR_FLOW_SUSPENDED = 0x002C 138*4882a593Smuzhiyun ,QMI_ERR_INVALID_DATA_FORMAT = 0x002D 139*4882a593Smuzhiyun ,QMI_ERR_GENERAL = 0x002E 140*4882a593Smuzhiyun ,QMI_ERR_UNKNOWN = 0x002F 141*4882a593Smuzhiyun ,QMI_ERR_INVALID_ARG = 0x0030 142*4882a593Smuzhiyun ,QMI_ERR_INVALID_INDEX = 0x0031 143*4882a593Smuzhiyun ,QMI_ERR_NO_ENTRY = 0x0032 144*4882a593Smuzhiyun ,QMI_ERR_DEVICE_STORAGE_FULL = 0x0033 145*4882a593Smuzhiyun ,QMI_ERR_DEVICE_NOT_READY = 0x0034 146*4882a593Smuzhiyun ,QMI_ERR_NETWORK_NOT_READY = 0x0035 147*4882a593Smuzhiyun ,QMI_ERR_CAUSE_CODE = 0x0036 148*4882a593Smuzhiyun ,QMI_ERR_MESSAGE_NOT_SENT = 0x0037 149*4882a593Smuzhiyun ,QMI_ERR_MESSAGE_DELIVERY_FAILURE = 0x0038 150*4882a593Smuzhiyun ,QMI_ERR_INVALID_MESSAGE_ID = 0x0039 151*4882a593Smuzhiyun ,QMI_ERR_ENCODING = 0x003A 152*4882a593Smuzhiyun ,QMI_ERR_AUTHENTICATION_LOCK = 0x003B 153*4882a593Smuzhiyun ,QMI_ERR_INVALID_TRANSITION = 0x003C 154*4882a593Smuzhiyun ,QMI_ERR_NOT_A_MCAST_IFACE = 0x003D 155*4882a593Smuzhiyun ,QMI_ERR_MAX_MCAST_REQUESTS_IN_USE = 0x003E 156*4882a593Smuzhiyun ,QMI_ERR_INVALID_MCAST_HANDLE = 0x003F 157*4882a593Smuzhiyun ,QMI_ERR_INVALID_IP_FAMILY_PREF = 0x0040 158*4882a593Smuzhiyun ,QMI_ERR_SESSION_INACTIVE = 0x0041 159*4882a593Smuzhiyun ,QMI_ERR_SESSION_INVALID = 0x0042 160*4882a593Smuzhiyun ,QMI_ERR_SESSION_OWNERSHIP = 0x0043 161*4882a593Smuzhiyun ,QMI_ERR_INSUFFICIENT_RESOURCES = 0x0044 162*4882a593Smuzhiyun ,QMI_ERR_DISABLED = 0x0045 163*4882a593Smuzhiyun ,QMI_ERR_INVALID_OPERATION = 0x0046 164*4882a593Smuzhiyun ,QMI_ERR_INVALID_QMI_CMD = 0x0047 165*4882a593Smuzhiyun ,QMI_ERR_TPDU_TYPE = 0x0048 166*4882a593Smuzhiyun ,QMI_ERR_SMSC_ADDR = 0x0049 167*4882a593Smuzhiyun ,QMI_ERR_INFO_UNAVAILABLE = 0x004A 168*4882a593Smuzhiyun ,QMI_ERR_SEGMENT_TOO_LONG = 0x004B 169*4882a593Smuzhiyun ,QMI_ERR_SEGMENT_ORDER = 0x004C 170*4882a593Smuzhiyun ,QMI_ERR_BUNDLING_NOT_SUPPORTED = 0x004D 171*4882a593Smuzhiyun ,QMI_ERR_OP_PARTIAL_FAILURE = 0x004E 172*4882a593Smuzhiyun ,QMI_ERR_POLICY_MISMATCH = 0x004F 173*4882a593Smuzhiyun ,QMI_ERR_SIM_FILE_NOT_FOUND = 0x0050 174*4882a593Smuzhiyun ,QMI_ERR_EXTENDED_INTERNAL = 0x0051 175*4882a593Smuzhiyun ,QMI_ERR_ACCESS_DENIED = 0x0052 176*4882a593Smuzhiyun ,QMI_ERR_HARDWARE_RESTRICTED = 0x0053 177*4882a593Smuzhiyun ,QMI_ERR_ACK_NOT_SENT = 0x0054 178*4882a593Smuzhiyun ,QMI_ERR_INJECT_TIMEOUT = 0x0055 179*4882a593Smuzhiyun ,QMI_ERR_INCOMPATIBLE_STATE = 0x005A 180*4882a593Smuzhiyun ,QMI_ERR_FDN_RESTRICT = 0x005B 181*4882a593Smuzhiyun ,QMI_ERR_SUPS_FAILURE_CAUSE = 0x005C 182*4882a593Smuzhiyun ,QMI_ERR_NO_RADIO = 0x005D 183*4882a593Smuzhiyun ,QMI_ERR_NOT_SUPPORTED = 0x005E 184*4882a593Smuzhiyun ,QMI_ERR_NO_SUBSCRIPTION = 0x005F 185*4882a593Smuzhiyun ,QMI_ERR_CARD_CALL_CONTROL_FAILED = 0x0060 186*4882a593Smuzhiyun ,QMI_ERR_NETWORK_ABORTED = 0x0061 187*4882a593Smuzhiyun ,QMI_ERR_MSG_BLOCKED = 0x0062 188*4882a593Smuzhiyun ,QMI_ERR_INVALID_SESSION_TYPE = 0x0064 189*4882a593Smuzhiyun ,QMI_ERR_INVALID_PB_TYPE = 0x0065 190*4882a593Smuzhiyun ,QMI_ERR_NO_SIM = 0x0066 191*4882a593Smuzhiyun ,QMI_ERR_PB_NOT_READY = 0x0067 192*4882a593Smuzhiyun ,QMI_ERR_PIN_RESTRICTION = 0x0068 193*4882a593Smuzhiyun ,QMI_ERR_PIN2_RESTRICTION = 0x0069 194*4882a593Smuzhiyun ,QMI_ERR_PUK_RESTRICTION = 0x006A 195*4882a593Smuzhiyun ,QMI_ERR_PUK2_RESTRICTION = 0x006B 196*4882a593Smuzhiyun ,QMI_ERR_PB_ACCESS_RESTRICTED = 0x006C 197*4882a593Smuzhiyun ,QMI_ERR_PB_DELETE_IN_PROG = 0x006D 198*4882a593Smuzhiyun ,QMI_ERR_PB_TEXT_TOO_LONG = 0x006E 199*4882a593Smuzhiyun ,QMI_ERR_PB_NUMBER_TOO_LONG = 0x006F 200*4882a593Smuzhiyun ,QMI_ERR_PB_HIDDEN_KEY_RESTRICTION = 0x0070 201*4882a593Smuzhiyun } QMI_ERROR_CODE_TYPE; 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun #define QCQMI_CTL_FLAG_SERVICE 0x80 204*4882a593Smuzhiyun #define QCQMI_CTL_FLAG_CTL_POINT 0x00 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun typedef struct _QCQMI_HDR 207*4882a593Smuzhiyun { 208*4882a593Smuzhiyun UCHAR IFType; 209*4882a593Smuzhiyun USHORT Length; 210*4882a593Smuzhiyun UCHAR CtlFlags; // reserved 211*4882a593Smuzhiyun UCHAR QMIType; 212*4882a593Smuzhiyun UCHAR ClientId; 213*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMI_HDR, *PQCQMI_HDR; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define QCQMI_HDR_SIZE (sizeof(QCQMI_HDR)-1) 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun typedef struct _QCQMI 218*4882a593Smuzhiyun { 219*4882a593Smuzhiyun UCHAR IFType; 220*4882a593Smuzhiyun USHORT Length; 221*4882a593Smuzhiyun UCHAR CtlFlags; // reserved 222*4882a593Smuzhiyun UCHAR QMIType; 223*4882a593Smuzhiyun UCHAR ClientId; 224*4882a593Smuzhiyun UCHAR SDU; 225*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMI, *PQCQMI; 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun typedef struct _QMI_SERVICE_VERSION 228*4882a593Smuzhiyun { 229*4882a593Smuzhiyun USHORT Major; 230*4882a593Smuzhiyun USHORT Minor; 231*4882a593Smuzhiyun USHORT AddendumMajor; 232*4882a593Smuzhiyun USHORT AddendumMinor; 233*4882a593Smuzhiyun } __attribute__ ((packed)) QMI_SERVICE_VERSION, *PQMI_SERVICE_VERSION; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun // ================= QMUX ================== 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun #define QMUX_MSG_OVERHEAD_BYTES 4 // Type(USHORT) Length(USHORT) -- header 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun #define QMUX_BROADCAST_CID 0xFF 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun typedef struct _QCQMUX_HDR 242*4882a593Smuzhiyun { 243*4882a593Smuzhiyun UCHAR CtlFlags; // 0: single QMUX Msg; 1: 244*4882a593Smuzhiyun USHORT TransactionId; 245*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMUX_HDR, *PQCQMUX_HDR; 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun typedef struct _QCQMUX 248*4882a593Smuzhiyun { 249*4882a593Smuzhiyun UCHAR CtlFlags; // 0: single QMUX Msg; 1: 250*4882a593Smuzhiyun USHORT TransactionId; 251*4882a593Smuzhiyun UCHAR Message; // Type(2), Length(2), Value 252*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMUX, *PQCQMUX; 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun #define QCQMUX_HDR_SIZE sizeof(QCQMUX_HDR) 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun typedef struct _QCQMUX_MSG_HDR 257*4882a593Smuzhiyun { 258*4882a593Smuzhiyun USHORT Type; 259*4882a593Smuzhiyun USHORT Length; 260*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMUX_MSG_HDR, *PQCQMUX_MSG_HDR; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define QCQMUX_MSG_HDR_SIZE sizeof(QCQMUX_MSG_HDR) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun typedef struct _QCQMUX_MSG_HDR_RESP 265*4882a593Smuzhiyun { 266*4882a593Smuzhiyun USHORT Type; 267*4882a593Smuzhiyun USHORT Length; 268*4882a593Smuzhiyun UCHAR TLVType; // 0x02 - result code 269*4882a593Smuzhiyun USHORT TLVLength; // 4 270*4882a593Smuzhiyun USHORT QMUXResult; // QMI_RESULT_SUCCESS 271*4882a593Smuzhiyun // QMI_RESULT_FAILURE 272*4882a593Smuzhiyun USHORT QMUXError; // QMI_ERR_INVALID_ARG 273*4882a593Smuzhiyun // QMI_ERR_NO_MEMORY 274*4882a593Smuzhiyun // QMI_ERR_INTERNAL 275*4882a593Smuzhiyun // QMI_ERR_FAULT 276*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMUX_MSG_HDR_RESP, *PQCQMUX_MSG_HDR_RESP; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun typedef struct _QCQMUX_TLV 279*4882a593Smuzhiyun { 280*4882a593Smuzhiyun UCHAR Type; 281*4882a593Smuzhiyun USHORT Length; 282*4882a593Smuzhiyun UCHAR Value; 283*4882a593Smuzhiyun } __attribute__ ((packed)) QCQMUX_TLV, *PQCQMUX_TLV; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun typedef struct _QMI_TLV_HDR 286*4882a593Smuzhiyun { 287*4882a593Smuzhiyun UCHAR TLVType; 288*4882a593Smuzhiyun USHORT TLVLength; 289*4882a593Smuzhiyun } __attribute__ ((packed)) QMI_TLV_HDR, *PQMI_TLV_HDR; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun // QMUX Message Definitions -- QMI SDU 292*4882a593Smuzhiyun #define QMUX_CTL_FLAG_SINGLE_MSG 0x00 293*4882a593Smuzhiyun #define QMUX_CTL_FLAG_COMPOUND_MSG 0x01 294*4882a593Smuzhiyun #define QMUX_CTL_FLAG_TYPE_CMD 0x00 295*4882a593Smuzhiyun #define QMUX_CTL_FLAG_TYPE_RSP 0x02 296*4882a593Smuzhiyun #define QMUX_CTL_FLAG_TYPE_IND 0x04 297*4882a593Smuzhiyun #define QMUX_CTL_FLAG_MASK_COMPOUND 0x01 298*4882a593Smuzhiyun #define QMUX_CTL_FLAG_MASK_TYPE 0x06 // 00-cmd, 01-rsp, 10-ind 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun #pragma pack(pop) 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun #endif // USBQMI_H 303