xref: /OK3568_Linux_fs/kernel/drivers/net/usb/GobiNet/QMI.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*===========================================================================
2 FILE:
3    QMI.h
4 
5 DESCRIPTION:
6    Qualcomm QMI driver header
7 
8 FUNCTIONS:
9    Generic QMUX functions
10       ParseQMUX
11       FillQMUX
12 
13    Generic QMI functions
14       GetTLV
15       ValidQMIMessage
16       GetQMIMessageID
17 
18    Get sizes of buffers needed by QMI requests
19       QMUXHeaderSize
20       QMICTLGetClientIDReqSize
21       QMICTLReleaseClientIDReqSize
22       QMICTLReadyReqSize
23       QMIWDSSetEventReportReqSize
24       QMIWDSGetPKGSRVCStatusReqSize
25       QMIDMSGetMEIDReqSize
26       QMICTLSyncReqSize
27 
28    Fill Buffers with QMI requests
29       QMICTLGetClientIDReq
30       QMICTLReleaseClientIDReq
31       QMICTLReadyReq
32       QMIWDSSetEventReportReq
33       QMIWDSGetPKGSRVCStatusReq
34       QMIDMSGetMEIDReq
35       QMICTLSetDataFormatReq
36       QMICTLSyncReq
37 
38    Parse data from QMI responses
39       QMICTLGetClientIDResp
40       QMICTLReleaseClientIDResp
41       QMIWDSEventResp
42       QMIDMSGetMEIDResp
43 
44 Copyright (c) 2011, Code Aurora Forum. All rights reserved.
45 
46 Redistribution and use in source and binary forms, with or without
47 modification, are permitted provided that the following conditions are met:
48     * Redistributions of source code must retain the above copyright
49       notice, this list of conditions and the following disclaimer.
50     * Redistributions in binary form must reproduce the above copyright
51       notice, this list of conditions and the following disclaimer in the
52       documentation and/or other materials provided with the distribution.
53     * Neither the name of Code Aurora Forum nor
54       the names of its contributors may be used to endorse or promote
55       products derived from this software without specific prior written
56       permission.
57 
58 
59 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
60 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
61 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
62 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
63 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
64 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
65 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
66 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
67 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
68 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
69 POSSIBILITY OF SUCH DAMAGE.
70 ===========================================================================*/
71 
72 #pragma once
73 
74 /*=========================================================================*/
75 // Definitions
76 /*=========================================================================*/
77 
78 extern int quec_debug;
79 // DBG macro
80 #define DBG( format, arg... ) do { \
81    if (quec_debug == 1)\
82    { \
83       printk( KERN_INFO "GobiNet::%s " format, __FUNCTION__, ## arg ); \
84    } }while(0)
85 
86 #if 0
87 #define VDBG( format, arg... ) do { \
88    if (debug == 1)\
89    { \
90       printk( KERN_INFO "GobiNet::%s " format, __FUNCTION__, ## arg ); \
91    } } while(0)
92 #else
93 #define VDBG( format, arg... ) do { } while(0)
94 #endif
95 
96 #define INFO( format, arg... ) do { \
97       printk( KERN_INFO "GobiNet::%s " format, __FUNCTION__, ## arg ); \
98    }while(0)
99 
100 // QMI Service Types
101 #define QMICTL 0
102 #define QMIWDS 1
103 #define QMIDMS 2
104 #define QMINAS 3
105 #define QMIUIM 11
106 #define QMIWDA 0x1A
107 
108 #define u8        unsigned char
109 #define u16       unsigned short
110 #define u32       unsigned int
111 #define u64       unsigned long long
112 
113 #define bool      u8
114 #define true      1
115 #define false     0
116 
117 #define ENOMEM    12
118 #define EFAULT    14
119 #define EINVAL    22
120 #ifndef ENOMSG
121 #define ENOMSG    42
122 #endif
123 #define ENODATA   61
124 
125 #define TLV_TYPE_LINK_PROTO 0x10
126 
127 /*=========================================================================*/
128 // Struct sQMUX
129 //
130 //    Structure that defines a QMUX header
131 /*=========================================================================*/
132 typedef struct sQMUX
133 {
134    /* T\F, always 1 */
135    u8         mTF;
136 
137    /* Size of message */
138    u16        mLength;
139 
140    /* Control flag */
141    u8         mCtrlFlag;
142 
143    /* Service Type */
144    u8         mQMIService;
145 
146    /* Client ID */
147    u8         mQMIClientID;
148 
149 }__attribute__((__packed__)) sQMUX;
150 
151 #if 0
152 /*=========================================================================*/
153 // Generic QMUX functions
154 /*=========================================================================*/
155 
156 // Remove QMUX headers from a buffer
157 int ParseQMUX(
158    u16 *    pClientID,
159    void *   pBuffer,
160    u16      buffSize );
161 
162 // Fill buffer with QMUX headers
163 int FillQMUX(
164    u16      clientID,
165    void *   pBuffer,
166    u16      buffSize );
167 
168 /*=========================================================================*/
169 // Generic QMI functions
170 /*=========================================================================*/
171 
172 // Get data buffer of a specified TLV from a QMI message
173 int GetTLV(
174    void *   pQMIMessage,
175    u16      messageLen,
176    u8       type,
177    void *   pOutDataBuf,
178    u16      bufferLen );
179 
180 // Check mandatory TLV in a QMI message
181 int ValidQMIMessage(
182    void *   pQMIMessage,
183    u16      messageLen );
184 
185 // Get the message ID of a QMI message
186 int GetQMIMessageID(
187    void *   pQMIMessage,
188    u16      messageLen );
189 
190 /*=========================================================================*/
191 // Get sizes of buffers needed by QMI requests
192 /*=========================================================================*/
193 
194 // Get size of buffer needed for QMUX
195 u16 QMUXHeaderSize( void );
196 
197 // Get size of buffer needed for QMUX + QMICTLGetClientIDReq
198 u16 QMICTLGetClientIDReqSize( void );
199 
200 // Get size of buffer needed for QMUX + QMICTLReleaseClientIDReq
201 u16 QMICTLReleaseClientIDReqSize( void );
202 
203 // Get size of buffer needed for QMUX + QMICTLReadyReq
204 u16 QMICTLReadyReqSize( void );
205 
206 // Get size of buffer needed for QMUX + QMIWDSSetEventReportReq
207 u16 QMIWDSSetEventReportReqSize( void );
208 
209 // Get size of buffer needed for QMUX + QMIWDSGetPKGSRVCStatusReq
210 u16 QMIWDSGetPKGSRVCStatusReqSize( void );
211 
212 u16 QMIWDSSetQMUXBindMuxDataPortSize( void );
213 
214 // Get size of buffer needed for QMUX + QMIDMSGetMEIDReq
215 u16 QMIDMSGetMEIDReqSize( void );
216 
217 // Get size of buffer needed for QMUX + QMIWDASetDataFormatReq
218 u16 QMIWDASetDataFormatReqSize( int qmap_mode );
219 
220 // Get size of buffer needed for QMUX + QMICTLSyncReq
221 u16 QMICTLSyncReqSize( void );
222 
223 /*=========================================================================*/
224 // Fill Buffers with QMI requests
225 /*=========================================================================*/
226 
227 // Fill buffer with QMI CTL Get Client ID Request
228 int QMICTLGetClientIDReq(
229    void *   pBuffer,
230    u16      buffSize,
231    u8       transactionID,
232    u8       serviceType );
233 
234 // Fill buffer with QMI CTL Release Client ID Request
235 int QMICTLReleaseClientIDReq(
236    void *   pBuffer,
237    u16      buffSize,
238    u8       transactionID,
239    u16      clientID );
240 
241 // Fill buffer with QMI CTL Get Version Info Request
242 int QMICTLReadyReq(
243    void *   pBuffer,
244    u16      buffSize,
245    u8       transactionID );
246 
247 // Fill buffer with QMI WDS Set Event Report Request
248 int QMIWDSSetEventReportReq(
249    void *   pBuffer,
250    u16      buffSize,
251    u16      transactionID );
252 
253 // Fill buffer with QMI WDS Get PKG SRVC Status Request
254 int QMIWDSGetPKGSRVCStatusReq(
255    void *   pBuffer,
256    u16      buffSize,
257    u16      transactionID );
258 
259 u16 QMIWDSSetQMUXBindMuxDataPortReq(
260    void *   pBuffer,
261    u16      buffSize,
262    u8 MuxId,
263    u16      transactionID );
264 
265 // Fill buffer with QMI DMS Get Serial Numbers Request
266 int QMIDMSGetMEIDReq(
267    void *   pBuffer,
268    u16      buffSize,
269    u16      transactionID );
270 
271 // Fill buffer with QMI WDA Set Data Format Request
272 int QMIWDASetDataFormatReq(
273    void *   pBuffer,
274    u16      buffSize,
275    bool     bRawIPMode, int qmap_mode, u32 rx_size,
276    u16      transactionID );
277 
278 #if 0
279 int QMIWDASetDataQmapReq(
280 		void *   pBuffer,
281 		u16      buffSize,
282 		u16      transactionID );
283 #endif
284 
285 int QMICTLSyncReq(
286    void *   pBuffer,
287    u16      buffSize,
288    u16      transactionID );
289 
290 /*=========================================================================*/
291 // Parse data from QMI responses
292 /*=========================================================================*/
293 
294 // Parse the QMI CTL Get Client ID Resp
295 int QMICTLGetClientIDResp(
296    void * pBuffer,
297    u16    buffSize,
298    u16 *  pClientID );
299 
300 // Verify the QMI CTL Release Client ID Resp is valid
301 int QMICTLReleaseClientIDResp(
302    void *   pBuffer,
303    u16      buffSize );
304 
305 // Parse the QMI WDS Set Event Report Resp/Indication or
306 //    QMI WDS Get PKG SRVC Status Resp/Indication
307 int QMIWDSEventResp(
308    void *   pBuffer,
309    u16      buffSize,
310    u32 *    pTXOk,
311    u32 *    pRXOk,
312    u32 *    pTXErr,
313    u32 *    pRXErr,
314    u32 *    pTXOfl,
315    u32 *    pRXOfl,
316    u64 *    pTXBytesOk,
317    u64 *    pRXBytesOk,
318    bool *   pbLinkState,
319    bool *   pbReconfigure );
320 
321 // Parse the QMI DMS Get Serial Numbers Resp
322 int QMIDMSGetMEIDResp(
323    void *   pBuffer,
324    u16      buffSize,
325    char *   pMEID,
326    int      meidSize );
327 
328 // Parse the QMI DMS Get Serial Numbers Resp
329 int QMIWDASetDataFormatResp(
330    void *   pBuffer,
331    u16      buffSize, bool bRawIPMode, int *qmap_enabled, int *rx_size, int *tx_size);
332 
333 // Pasre the QMI CTL Sync Response
334 int QMICTLSyncResp(
335    void *pBuffer,
336    u16  buffSize );
337 #endif
338