/*=========================================================================== M P Q C T L. H DESCRIPTION: This module contains QMI QCTL module. INITIALIZATION AND SEQUENCING REQUIREMENTS: Copyright (C) 2011 by Qualcomm Technologies, Incorporated. All Rights Reserved. ===========================================================================*/ #ifndef MPQCTL_H #define MPQCTL_H #include "MPQMI.h" #pragma pack(push, 1) // ================= QMICTL ================== // QMICTL Control Flags #define QMICTL_CTL_FLAG_CMD 0x00 #define QMICTL_CTL_FLAG_RSP 0x01 #define QMICTL_CTL_FLAG_IND 0x02 #if 0 typedef struct _QMICTL_TRANSACTION_ITEM { LIST_ENTRY List; UCHAR TransactionId; // QMICTL transaction id PVOID Context; // Adapter or IocDev PIRP Irp; } QMICTL_TRANSACTION_ITEM, *PQMICTL_TRANSACTION_ITEM; #endif typedef struct _QCQMICTL_MSG_HDR { UCHAR CtlFlags; // 00-cmd, 01-rsp, 10-ind UCHAR TransactionId; USHORT QMICTLType; USHORT Length; } __attribute__ ((packed)) QCQMICTL_MSG_HDR, *PQCQMICTL_MSG_HDR; #define QCQMICTL_MSG_HDR_SIZE sizeof(QCQMICTL_MSG_HDR) typedef struct _QCQMICTL_MSG_HDR_RESP { UCHAR CtlFlags; // 00-cmd, 01-rsp, 10-ind UCHAR TransactionId; USHORT QMICTLType; USHORT Length; UCHAR TLVType; // 0x02 - result code USHORT TLVLength; // 4 USHORT QMUXResult; // QMI_RESULT_SUCCESS // QMI_RESULT_FAILURE USHORT QMUXError; // QMI_ERR_INVALID_ARG // QMI_ERR_NO_MEMORY // QMI_ERR_INTERNAL // QMI_ERR_FAULT } __attribute__ ((packed)) QCQMICTL_MSG_HDR_RESP, *PQCQMICTL_MSG_HDR_RESP; typedef struct _QCQMICTL_MSG { UCHAR CtlFlags; // 00-cmd, 01-rsp, 10-ind UCHAR TransactionId; USHORT QMICTLType; USHORT Length; UCHAR Payload; } __attribute__ ((packed)) QCQMICTL_MSG, *PQCQMICTL_MSG; // TLV Header typedef struct _QCQMICTL_TLV_HDR { UCHAR TLVType; USHORT TLVLength; } __attribute__ ((packed)) QCQMICTL_TLV_HDR, *PQCQMICTL_TLV_HDR; #define QCQMICTL_TLV_HDR_SIZE sizeof(QCQMICTL_TLV_HDR) // QMICTL Type #define QMICTL_SET_INSTANCE_ID_REQ 0x0020 #define QMICTL_SET_INSTANCE_ID_RESP 0x0020 #define QMICTL_GET_VERSION_REQ 0x0021 #define QMICTL_GET_VERSION_RESP 0x0021 #define QMICTL_GET_CLIENT_ID_REQ 0x0022 #define QMICTL_GET_CLIENT_ID_RESP 0x0022 #define QMICTL_RELEASE_CLIENT_ID_REQ 0x0023 #define QMICTL_RELEASE_CLIENT_ID_RESP 0x0023 #define QMICTL_REVOKE_CLIENT_ID_IND 0x0024 #define QMICTL_INVALID_CLIENT_ID_IND 0x0025 #define QMICTL_SET_DATA_FORMAT_REQ 0x0026 #define QMICTL_SET_DATA_FORMAT_RESP 0x0026 #define QMICTL_SYNC_REQ 0x0027 #define QMICTL_SYNC_RESP 0x0027 #define QMICTL_SYNC_IND 0x0027 #define QMICTL_FLAG_REQUEST 0x00 #define QMICTL_FLAG_RESPONSE 0x01 #define QMICTL_FLAG_INDICATION 0x02 // QMICTL Message Definitions typedef struct _QMICTL_SET_INSTANCE_ID_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_SET_INSTANCE_ID_REQ USHORT Length; // 4 UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 1 UCHAR Value; // Host-unique QMI instance for this device driver } __attribute__ ((packed)) QMICTL_SET_INSTANCE_ID_REQ_MSG, *PQMICTL_SET_INSTANCE_ID_REQ_MSG; typedef struct _QMICTL_SET_INSTANCE_ID_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_SET_INSTANCE_ID_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; USHORT QMIError; UCHAR TLV2Type; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLV2Length; // 0x0002 USHORT QMI_ID; // Upper byte is assigned by MSM, // lower assigned by host } __attribute__ ((packed)) QMICTL_SET_INSTANCE_ID_RESP_MSG, *PQMICTL_SET_INSTANCE_ID_RESP_MSG; typedef struct _QMICTL_GET_VERSION_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_GET_VERSION_REQ USHORT Length; // 0 UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // var UCHAR QMUXTypes; // List of one byte QMUX_TYPE values // 0xFF returns a list of versions for all // QMUX_TYPEs implemented on the device } __attribute__ ((packed)) QMICTL_GET_VERSION_REQ_MSG, *PQMICTL_GET_VERSION_REQ_MSG; typedef struct _QMUX_TYPE_VERSION_STRUCT { UCHAR QMUXType; USHORT MajorVersion; USHORT MinorVersion; } __attribute__ ((packed)) QMUX_TYPE_VERSION_STRUCT, *PQMUX_TYPE_VERSION_STRUCT; typedef struct _ADDENDUM_VERSION_PREAMBLE { UCHAR LabelLength; UCHAR Label; } __attribute__ ((packed)) ADDENDUM_VERSION_PREAMBLE, *PADDENDUM_VERSION_PREAMBLE; #define QMICTL_GET_VERSION_RSP_TLV_TYPE_VERSION 0x01 #define QMICTL_GET_VERSION_RSP_TLV_TYPE_ADD_VERSION 0x10 typedef struct _QMICTL_GET_VERSION_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_GET_VERSION_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; USHORT QMIError; UCHAR TLV2Type; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLV2Length; // var UCHAR NumElements; // Num of QMUX_TYPE_VERSION_STRUCT QMUX_TYPE_VERSION_STRUCT TypeVersion[0]; } __attribute__ ((packed)) QMICTL_GET_VERSION_RESP_MSG, *PQMICTL_GET_VERSION_RESP_MSG; typedef struct _QMICTL_GET_CLIENT_ID_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_GET_CLIENT_ID_REQ USHORT Length; UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 1 UCHAR QMIType; // QMUX type } __attribute__ ((packed)) QMICTL_GET_CLIENT_ID_REQ_MSG, *PQMICTL_GET_CLIENT_ID_REQ_MSG; typedef struct _QMICTL_GET_CLIENT_ID_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_GET_CLIENT_ID_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; // result code USHORT QMIError; // error code UCHAR TLV2Type; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLV2Length; // 2 UCHAR QMIType; UCHAR ClientId; } __attribute__ ((packed)) QMICTL_GET_CLIENT_ID_RESP_MSG, *PQMICTL_GET_CLIENT_ID_RESP_MSG; typedef struct _QMICTL_RELEASE_CLIENT_ID_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_RELEASE_CLIENT_ID_REQ USHORT Length; UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 0x0002 UCHAR QMIType; UCHAR ClientId; } __attribute__ ((packed)) QMICTL_RELEASE_CLIENT_ID_REQ_MSG, *PQMICTL_RELEASE_CLIENT_ID_REQ_MSG; typedef struct _QMICTL_RELEASE_CLIENT_ID_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_RELEASE_CLIENT_ID_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; // result code USHORT QMIError; // error code UCHAR TLV2Type; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLV2Length; // 2 UCHAR QMIType; UCHAR ClientId; } __attribute__ ((packed)) QMICTL_RELEASE_CLIENT_ID_RESP_MSG, *PQMICTL_RELEASE_CLIENT_ID_RESP_MSG; typedef struct _QMICTL_REVOKE_CLIENT_ID_IND_MSG { UCHAR CtlFlags; // QMICTL_FLAG_INDICATION UCHAR TransactionId; USHORT QMICTLType; // QMICTL_REVOKE_CLIENT_ID_IND USHORT Length; UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 0x0002 UCHAR QMIType; UCHAR ClientId; } __attribute__ ((packed)) QMICTL_REVOKE_CLIENT_ID_IND_MSG, *PQMICTL_REVOKE_CLIENT_ID_IND_MSG; typedef struct _QMICTL_INVALID_CLIENT_ID_IND_MSG { UCHAR CtlFlags; // QMICTL_FLAG_INDICATION UCHAR TransactionId; USHORT QMICTLType; // QMICTL_REVOKE_CLIENT_ID_IND USHORT Length; UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 0x0002 UCHAR QMIType; UCHAR ClientId; } __attribute__ ((packed)) QMICTL_INVALID_CLIENT_ID_IND_MSG, *PQMICTL_INVALID_CLIENT_ID_IND_MSG; typedef struct _QMICTL_SET_DATA_FORMAT_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_SET_DATA_FORMAT_REQ USHORT Length; UCHAR TLVType; // QCTLV_TYPE_REQUIRED_PARAMETER USHORT TLVLength; // 1 UCHAR DataFormat; // 0-default; 1-QoS hdr present } __attribute__ ((packed)) QMICTL_SET_DATA_FORMAT_REQ_MSG, *PQMICTL_SET_DATA_FORMAT_REQ_MSG; #ifdef QC_IP_MODE #define SET_DATA_FORMAT_TLV_TYPE_LINK_PROTO 0x10 #define SET_DATA_FORMAT_LINK_PROTO_ETH 0x0001 #define SET_DATA_FORMAT_LINK_PROTO_IP 0x0002 typedef struct _QMICTL_SET_DATA_FORMAT_TLV_LINK_PROT { UCHAR TLVType; // Link-Layer Protocol USHORT TLVLength; // 2 USHORT LinkProt; // 0x1: ETH; 0x2: IP } QMICTL_SET_DATA_FORMAT_TLV_LINK_PROT, *PQMICTL_SET_DATA_FORMAT_TLV_LINK_PROT; #ifdef QCMP_UL_TLP #define SET_DATA_FORMAT_TLV_TYPE_UL_TLP 0x11 typedef struct _QMICTL_SET_DATA_FORMAT_TLV_UL_TLP { UCHAR TLVType; // 0x11, Uplink TLP Setting USHORT TLVLength; // 1 UCHAR UlTlpSetting; // 0x0: Disable; 0x01: Enable } QMICTL_SET_DATA_FORMAT_TLV_UL_TLP, *PQMICTL_SET_DATA_FORMAT_TLV_UL_TLP; #endif // QCMP_UL_TLP #ifdef QCMP_DL_TLP #define SET_DATA_FORMAT_TLV_TYPE_DL_TLP 0x13 typedef struct _QMICTL_SET_DATA_FORMAT_TLV_DL_TLP { UCHAR TLVType; // 0x11, Uplink TLP Setting USHORT TLVLength; // 1 UCHAR DlTlpSetting; // 0x0: Disable; 0x01: Enable } QMICTL_SET_DATA_FORMAT_TLV_DL_TLP, *PQMICTL_SET_DATA_FORMAT_TLV_DL_TLP; #endif // QCMP_DL_TLP #endif // QC_IP_MODE #ifdef MP_QCQOS_ENABLED #define SET_DATA_FORMAT_TLV_TYPE_QOS_SETTING 0x12 typedef struct _QMICTL_SET_DATA_FORMAT_TLV_QOS_SETTING { UCHAR TLVType; // 0x12, QoS setting USHORT TLVLength; // 1 UCHAR QosSetting; // 0x0: Disable; 0x01: Enable } QMICTL_SET_DATA_FORMAT_TLV_QOS_SETTING, *PQMICTL_SET_DATA_FORMAT_TLV_QOS_SETTING; #endif // MP_QCQOS_ENABLED typedef struct _QMICTL_SET_DATA_FORMAT_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_SET_DATA_FORMAT_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; // result code USHORT QMIError; // error code } __attribute__ ((packed)) QMICTL_SET_DATA_FORMAT_RESP_MSG, *PQMICTL_SET_DATA_FORMAT_RESP_MSG; typedef struct _QMICTL_SYNC_REQ_MSG { UCHAR CtlFlags; // QMICTL_FLAG_REQUEST UCHAR TransactionId; USHORT QMICTLType; // QMICTL_CTL_SYNC_REQ USHORT Length; // 0 } __attribute__ ((packed)) QMICTL_SYNC_REQ_MSG, *PQMICTL_SYNC_REQ_MSG; typedef struct _QMICTL_SYNC_RESP_MSG { UCHAR CtlFlags; // QMICTL_FLAG_RESPONSE UCHAR TransactionId; USHORT QMICTLType; // QMICTL_CTL_SYNC_RESP USHORT Length; UCHAR TLVType; // QCTLV_TYPE_RESULT_CODE USHORT TLVLength; // 0x0004 USHORT QMIResult; USHORT QMIError; } __attribute__ ((packed)) QMICTL_SYNC_RESP_MSG, *PQMICTL_SYNC_RESP_MSG; typedef struct _QMICTL_SYNC_IND_MSG { UCHAR CtlFlags; // QMICTL_FLAG_INDICATION UCHAR TransactionId; USHORT QMICTLType; // QMICTL_REVOKE_CLIENT_ID_IND USHORT Length; } __attribute__ ((packed)) QMICTL_SYNC_IND_MSG, *PQMICTL_SYNC_IND_MSG; typedef struct _QMICTL_MSG { union { // Message Header QCQMICTL_MSG_HDR QMICTLMsgHdr; QCQMICTL_MSG_HDR_RESP QMICTLMsgHdrRsp; // QMICTL Message QMICTL_SET_INSTANCE_ID_REQ_MSG SetInstanceIdReq; QMICTL_SET_INSTANCE_ID_RESP_MSG SetInstanceIdRsp; QMICTL_GET_VERSION_REQ_MSG GetVersionReq; QMICTL_GET_VERSION_RESP_MSG GetVersionRsp; QMICTL_GET_CLIENT_ID_REQ_MSG GetClientIdReq; QMICTL_GET_CLIENT_ID_RESP_MSG GetClientIdRsp; QMICTL_RELEASE_CLIENT_ID_REQ_MSG ReleaseClientIdReq; QMICTL_RELEASE_CLIENT_ID_RESP_MSG ReleaseClientIdRsp; QMICTL_REVOKE_CLIENT_ID_IND_MSG RevokeClientIdInd; QMICTL_INVALID_CLIENT_ID_IND_MSG InvalidClientIdInd; QMICTL_SET_DATA_FORMAT_REQ_MSG SetDataFormatReq; QMICTL_SET_DATA_FORMAT_RESP_MSG SetDataFormatRsp; QMICTL_SYNC_REQ_MSG SyncReq; QMICTL_SYNC_RESP_MSG SyncRsp; QMICTL_SYNC_IND_MSG SyncInd; }; } __attribute__ ((packed)) QMICTL_MSG, *PQMICTL_MSG; #endif // MPQCTL_H