315 lines
8.9 KiB
C
315 lines
8.9 KiB
C
/*===========================================================================
|
|
FILE:
|
|
QMI.h
|
|
|
|
DESCRIPTION:
|
|
Qualcomm QMI driver header
|
|
|
|
FUNCTIONS:
|
|
Generic QMUX functions
|
|
ParseQMUX
|
|
FillQMUX
|
|
|
|
Generic QMI functions
|
|
GetTLV
|
|
ValidQMIMessage
|
|
GetQMIMessageID
|
|
|
|
Get sizes of buffers needed by QMI requests
|
|
QMUXHeaderSize
|
|
QMICTLGetClientIDReqSize
|
|
QMICTLReleaseClientIDReqSize
|
|
QMICTLReadyReqSize
|
|
QMIWDSSetEventReportReqSize
|
|
QMIWDSGetPKGSRVCStatusReqSize
|
|
QMIDMSGetMEIDReqSize
|
|
QMICTLSyncReqSize
|
|
|
|
Fill Buffers with QMI requests
|
|
QMICTLGetClientIDReq
|
|
QMICTLReleaseClientIDReq
|
|
QMICTLReadyReq
|
|
QMIWDSSetEventReportReq
|
|
QMIWDSGetPKGSRVCStatusReq
|
|
QMIDMSGetMEIDReq
|
|
QMICTLSetDataFormatReq
|
|
QMICTLSyncReq
|
|
|
|
Parse data from QMI responses
|
|
QMICTLGetClientIDResp
|
|
QMICTLReleaseClientIDResp
|
|
QMIWDSEventResp
|
|
QMIDMSGetMEIDResp
|
|
|
|
Copyright (c) 2011, Code Aurora Forum. All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
* Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
* Neither the name of Code Aurora Forum nor
|
|
the names of its contributors may be used to endorse or promote
|
|
products derived from this software without specific prior written
|
|
permission.
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
===========================================================================*/
|
|
|
|
#pragma once
|
|
|
|
/*=========================================================================*/
|
|
// Definitions
|
|
/*=========================================================================*/
|
|
|
|
extern int debug;
|
|
// DBG macro
|
|
#define DBG( format, arg... ) do { \
|
|
if (debug == 1)\
|
|
{ \
|
|
printk( KERN_INFO "GobiNet::%s " format, __FUNCTION__, ## arg ); \
|
|
} }while(0)
|
|
|
|
#if 0
|
|
#define VDBG( format, arg... ) do { \
|
|
if (debug == 1)\
|
|
{ \
|
|
printk( KERN_INFO "GobiNet::%s " format, __FUNCTION__, ## arg ); \
|
|
} } while(0)
|
|
#else
|
|
#define VDBG( format, arg... ) do { } while(0)
|
|
#endif
|
|
|
|
// QMI Service Types
|
|
#define QMICTL 0
|
|
#define QMIWDS 1
|
|
#define QMIDMS 2
|
|
#define QMIWDA 0x1A
|
|
|
|
#define u8 unsigned char
|
|
#define u16 unsigned short
|
|
#define u32 unsigned int
|
|
#define u64 unsigned long long
|
|
|
|
#define bool u8
|
|
#define true 1
|
|
#define false 0
|
|
|
|
#define ENOMEM 12
|
|
#define EFAULT 14
|
|
#define EINVAL 22
|
|
#ifndef ENOMSG
|
|
#define ENOMSG 42
|
|
#endif
|
|
#define ENODATA 61
|
|
|
|
#define TLV_TYPE_LINK_PROTO 0x10
|
|
|
|
/*=========================================================================*/
|
|
// Struct sQMUX
|
|
//
|
|
// Structure that defines a QMUX header
|
|
/*=========================================================================*/
|
|
typedef struct sQMUX
|
|
{
|
|
/* T\F, always 1 */
|
|
u8 mTF;
|
|
|
|
/* Size of message */
|
|
u16 mLength;
|
|
|
|
/* Control flag */
|
|
u8 mCtrlFlag;
|
|
|
|
/* Service Type */
|
|
u8 mQMIService;
|
|
|
|
/* Client ID */
|
|
u8 mQMIClientID;
|
|
|
|
}__attribute__((__packed__)) sQMUX;
|
|
|
|
/*=========================================================================*/
|
|
// Generic QMUX functions
|
|
/*=========================================================================*/
|
|
|
|
// Remove QMUX headers from a buffer
|
|
int ParseQMUX(
|
|
u16 * pClientID,
|
|
void * pBuffer,
|
|
u16 buffSize );
|
|
|
|
// Fill buffer with QMUX headers
|
|
int FillQMUX(
|
|
u16 clientID,
|
|
void * pBuffer,
|
|
u16 buffSize );
|
|
|
|
/*=========================================================================*/
|
|
// Generic QMI functions
|
|
/*=========================================================================*/
|
|
|
|
// Get data buffer of a specified TLV from a QMI message
|
|
int GetTLV(
|
|
void * pQMIMessage,
|
|
u16 messageLen,
|
|
u8 type,
|
|
void * pOutDataBuf,
|
|
u16 bufferLen );
|
|
|
|
// Check mandatory TLV in a QMI message
|
|
int ValidQMIMessage(
|
|
void * pQMIMessage,
|
|
u16 messageLen );
|
|
|
|
// Get the message ID of a QMI message
|
|
int GetQMIMessageID(
|
|
void * pQMIMessage,
|
|
u16 messageLen );
|
|
|
|
/*=========================================================================*/
|
|
// Get sizes of buffers needed by QMI requests
|
|
/*=========================================================================*/
|
|
|
|
// Get size of buffer needed for QMUX
|
|
u16 QMUXHeaderSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMICTLGetClientIDReq
|
|
u16 QMICTLGetClientIDReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMICTLReleaseClientIDReq
|
|
u16 QMICTLReleaseClientIDReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMICTLReadyReq
|
|
u16 QMICTLReadyReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMIWDSSetEventReportReq
|
|
u16 QMIWDSSetEventReportReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMIWDSGetPKGSRVCStatusReq
|
|
u16 QMIWDSGetPKGSRVCStatusReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMIDMSGetMEIDReq
|
|
u16 QMIDMSGetMEIDReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMIWDASetDataFormatReq
|
|
u16 QMIWDASetDataFormatReqSize( void );
|
|
|
|
// Get size of buffer needed for QMUX + QMICTLSyncReq
|
|
u16 QMICTLSyncReqSize( void );
|
|
|
|
/*=========================================================================*/
|
|
// Fill Buffers with QMI requests
|
|
/*=========================================================================*/
|
|
|
|
// Fill buffer with QMI CTL Get Client ID Request
|
|
int QMICTLGetClientIDReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u8 transactionID,
|
|
u8 serviceType );
|
|
|
|
// Fill buffer with QMI CTL Release Client ID Request
|
|
int QMICTLReleaseClientIDReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u8 transactionID,
|
|
u16 clientID );
|
|
|
|
// Fill buffer with QMI CTL Get Version Info Request
|
|
int QMICTLReadyReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u8 transactionID );
|
|
|
|
// Fill buffer with QMI WDS Set Event Report Request
|
|
int QMIWDSSetEventReportReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 transactionID );
|
|
|
|
// Fill buffer with QMI WDS Get PKG SRVC Status Request
|
|
int QMIWDSGetPKGSRVCStatusReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 transactionID );
|
|
|
|
// Fill buffer with QMI DMS Get Serial Numbers Request
|
|
int QMIDMSGetMEIDReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 transactionID );
|
|
|
|
// Fill buffer with QMI WDA Set Data Format Request
|
|
int QMIWDASetDataFormatReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 transactionID );
|
|
|
|
int QMICTLSyncReq(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 transactionID );
|
|
|
|
/*=========================================================================*/
|
|
// Parse data from QMI responses
|
|
/*=========================================================================*/
|
|
|
|
// Parse the QMI CTL Get Client ID Resp
|
|
int QMICTLGetClientIDResp(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u16 * pClientID );
|
|
|
|
// Verify the QMI CTL Release Client ID Resp is valid
|
|
int QMICTLReleaseClientIDResp(
|
|
void * pBuffer,
|
|
u16 buffSize );
|
|
|
|
// Parse the QMI WDS Set Event Report Resp/Indication or
|
|
// QMI WDS Get PKG SRVC Status Resp/Indication
|
|
int QMIWDSEventResp(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
u32 * pTXOk,
|
|
u32 * pRXOk,
|
|
u32 * pTXErr,
|
|
u32 * pRXErr,
|
|
u32 * pTXOfl,
|
|
u32 * pRXOfl,
|
|
u64 * pTXBytesOk,
|
|
u64 * pRXBytesOk,
|
|
bool * pbLinkState,
|
|
bool * pbReconfigure );
|
|
|
|
// Parse the QMI DMS Get Serial Numbers Resp
|
|
int QMIDMSGetMEIDResp(
|
|
void * pBuffer,
|
|
u16 buffSize,
|
|
char * pMEID,
|
|
int meidSize );
|
|
|
|
// Parse the QMI DMS Get Serial Numbers Resp
|
|
int QMIWDASetDataFormatResp(
|
|
void * pBuffer,
|
|
u16 buffSize );
|
|
|
|
// Pasre the QMI CTL Sync Response
|
|
int QMICTLSyncResp(
|
|
void *pBuffer,
|
|
u16 buffSize );
|
|
|