xref: /OK3568_Linux_fs/app/forlinx/quectelCM/MPQMI.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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