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