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