/*
 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */
/*
 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/**
 *
   Airgo Networks, Inc proprietary.
   All Rights Reserved, Copyright 2005
   This program is the confidential and proprietary product of Airgo Networks Inc.
   Any Unauthorized use, reproduction or transfer of this program is strictly prohibited.


   pttMsgApi.h: Contains messages to PTT Module for physical layer testing
   Author:  Mark Nelson
   Date:    6/21/05

   History -
   Date        Modified by              Modification Information
  --------------------------------------------------------------------------

 */

#ifndef PTT_MSG_API_H
#define PTT_MSG_API_H

#include "halCompiler.h"
#include "wlan_nv.h"
#include "wlan_phy.h"
#include "pttFrameGen.h"
#include "pttModule.h"

#include "halLegacyPalTypes.h"

typedef tANI_U8 tQWPTT_U8;
typedef tANI_S8 tQWPTT_S8;

typedef tANI_U16 tQWPTT_U16;
typedef tANI_S16 tQWPTT_S16;

typedef tANI_U32 tQWPTT_U32;
typedef tANI_S32 tQWPTT_S32;

typedef tANI_U8 tQWPTT_BYTE;
typedef tANI_S9 tQWPTT_S9;

typedef tANI_U8 tQWPTT_BOOLEAN;

#define PTT_MEM_ACCESS_MAX_SIZE 256

//Messages to/from socket or pttApi.c
typedef enum {
   PTT_MSG_TYPES_BEGIN = 0x3000,

   // Init
   PTT_MSG_INIT = PTT_MSG_TYPES_BEGIN, //extra: internal only

//NV Service
   PTT_MSG_GET_TPC_CAL_STATE_OBSOLETE = 0x3011,
   PTT_MSG_RESET_TPC_CAL_STATE_OBSOLETE = 0x3012,

   PTT_MSG_SET_NV_CKSUM_OBSOLETE = 0x3013,
   PTT_MSG_GET_NV_CKSUM_OBSOLETE = 0x3014,
   PTT_MSG_GET_NV_TABLE = 0x3016,
   PTT_MSG_SET_NV_TABLE = 0x3017,
   PTT_MSG_SET_NV_IMAGE_OBSOLETE = 0x3018,
   PTT_MSG_BLANK_NV = 0x3019,
   PTT_MSG_GET_NV_IMAGE_OBSOLETE = 0x301E,
   PTT_MSG_DEL_NV_TABLE = 0x301F,
   PTT_MSG_GET_NV_FIELD = 0x3020,
   PTT_MSG_SET_NV_FIELD = 0x3021,
   PTT_MSG_STORE_NV_TABLE = 0x3022,
   PTT_MSG_SET_REG_DOMAIN = 0x3023,

//Device Register Access
   PTT_MSG_DBG_READ_REGISTER = 0x3040,
   PTT_MSG_DBG_WRITE_REGISTER = 0x3041,
   PTT_MSG_API_WRITE_REGISTER_OBSOLETE = 0x3042,
   PTT_MSG_API_READ_REGISTER_OBSOLETE = 0x3043,
   PTT_MSG_DBG_READ_MEMORY = 0x3044,
   PTT_MSG_DBG_WRITE_MEMORY = 0x3045,

//Device MAC Test Setup
   PTT_MSG_ENABLE_CHAINS = 0x304F,
   PTT_MSG_SET_CHANNEL = 0x3050,

//Tx Waveform Gen Service
   PTT_MSG_SET_WAVEFORM = 0x3071,
   PTT_MSG_SET_TX_WAVEFORM_GAIN = 0x3072,
   PTT_MSG_GET_WAVEFORM_POWER_ADC = 0x3073,
   PTT_MSG_START_WAVEFORM = 0x3074,
   PTT_MSG_STOP_WAVEFORM = 0x3075,
   PTT_MSG_SET_RX_WAVEFORM_GAIN = 0x3076,
   PTT_MSG_SET_TX_WAVEFORM_GAIN_PRIMA_V1 = 0x3077,

//Tx Frame Gen Service
   PTT_MSG_CONFIG_TX_PACKET_GEN = 0x3081,
   PTT_MSG_START_STOP_TX_PACKET_GEN = 0x3082,
   PTT_MSG_POLL_TX_PACKET_PROGRESS_OBSOLETE = 0x3083,
   PTT_MSG_FRAME_GEN_STOP_IND_OBSOLETE = 0x3088,
   PTT_MSG_QUERY_TX_STATUS = 0x3089,


//Tx Frame Power Service
   PTT_MSG_CLOSE_TPC_LOOP = 0x30A0,

//open loop service
   PTT_MSG_SET_PACKET_TX_GAIN_TABLE = 0x30A1,
   PTT_MSG_SET_PACKET_TX_GAIN_INDEX = 0x30A2,
   PTT_MSG_FORCE_PACKET_TX_GAIN = 0x30A3,

//closed loop(CLPC) service
   PTT_MSG_SET_PWR_INDEX_SOURCE = 0x30A4,
   PTT_MSG_SET_TX_POWER = 0x30A5,
   PTT_MSG_GET_TX_POWER_REPORT = 0x30A7,
   PTT_MSG_SAVE_TX_PWR_CAL_TABLE_OBSOLETE = 0x30A8,
   PTT_MSG_SET_POWER_LUT = 0x30A9,
   PTT_MSG_GET_POWER_LUT = 0x30AA,
   PTT_MSG_GET_PACKET_TX_GAIN_TABLE = 0x30AB,
   PTT_MSG_SAVE_TX_PWR_FREQ_TABLE_OBSOLETE = 0x30AC,
   PTT_MSG_CLPC_TEMP_COMPENSATION_OBSOLETE = 0x30AD,

//Rx Gain Service
   PTT_MSG_DISABLE_AGC_TABLES = 0x30D0,
   PTT_MSG_ENABLE_AGC_TABLES = 0x30D1,
   PTT_MSG_SET_AGC_TABLES_OBSOLETE = 0x30D2,
   PTT_MSG_GET_RX_RSSI = 0x30D3,
   PTT_MSG_GET_AGC_TABLE_OBSOLETE = 0x30D5,

//Rx Frame Catcher Service
   PTT_MSG_SET_RX_DISABLE_MODE = 0x30D4,
   PTT_MSG_GET_RX_PKT_COUNTS = 0x30E0,
   PTT_MSG_RESET_RX_PACKET_STATISTICS = 0x30E2,
   PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI = 0x30E3,
   PTT_MSG_GET_UNI_CAST_MAC_PKT_RX_RSSI_CONFIG = 0x30E4,

//Rx Symbol Service
   PTT_MSG_GRAB_RAM = 0x30F0,
   PTT_MSG_GRAB_RAM_ONE_CHAIN_OBSOLETE = 0x30F1,

//Phy Calibration Service
   PTT_MSG_RX_IQ_CAL = 0x3100,
   PTT_MSG_RX_DCO_CAL = 0x3101,
   PTT_MSG_TX_CARRIER_SUPPRESS_CAL = 0x3102,
   PTT_MSG_TX_IQ_CAL = 0x3103,
   PTT_MSG_EXECUTE_INITIAL_CALS = 0x3104,
   PTT_MSG_HDET_CAL = 0x3105,
   PTT_MSG_VCO_LINEARITY_CAL_OBSOLETE = 0x3106,

//Phy Calibration Override Service
   PTT_MSG_SET_TX_CARRIER_SUPPRESS_CORRECT = 0x3110,
   PTT_MSG_GET_TX_CARRIER_SUPPRESS_CORRECT = 0x3111,
   PTT_MSG_SET_TX_IQ_CORRECT = 0x3112,
   PTT_MSG_GET_TX_IQ_CORRECT = 0x3113,
   PTT_MSG_SET_RX_IQ_CORRECT = 0x3114,
   PTT_MSG_GET_RX_IQ_CORRECT = 0x3115,
   PTT_MSG_SET_RX_DCO_CORRECT = 0x3116,
   PTT_MSG_GET_RX_DCO_CORRECT = 0x3117,
   PTT_MSG_SET_TX_IQ_PHASE_NV_TABLE_OBSOLETE = 0x3118,
   PTT_MSG_GET_HDET_CORRECT_OBSOLETE = 0x3119,

//RF Chip Access
   PTT_MSG_GET_TEMP_ADC = 0x3202,
   PTT_MSG_READ_RF_REG = 0x3203,
   PTT_MSG_WRITE_RF_REG = 0x3204,
   PTT_MSG_GET_RF_VERSION = 0x3205,

//Deep sleep support
   PTT_MSG_DEEP_SLEEP = 0x3220,
   PTT_MSG_READ_SIF_BAR4_REGISTER = 0x3221,
   PTT_MSG_WRITE_SIF_BAR4_REGISTER = 0x3222,
   PTT_MSG_ENTER_FULL_POWER = 0x3223,

//Misc
   PTT_MSG_SYSTEM_RESET = 0x32A0,   //is there any meaning for this in Gen6?
   PTT_MSG_LOG_DUMP = 0x32A1,
   PTT_MSG_GET_BUILD_RELEASE_NUMBER = 0x32A2,


//Messages for Socket App
   PTT_MSG_ADAPTER_DISABLED_RSP_OBSOLETE = 0x32A3,
   PTT_MSG_ENABLE_ADAPTER = 0x32A4,
   PTT_MSG_DISABLE_ADAPTER = 0x32A5,
   PTT_MSG_PAUSE_RSP_OBSOLETE = 0x32A6,
   PTT_MSG_CONTINUE_RSP_OBSOLETE = 0x32A7,

   PTT_MSG_HALPHY_INIT = 0x32A8,
   PTT_MSG_TEST_RXIQ_CAL = 0x32A9,
   PTT_MSG_START_TONE_GEN = 0x32AA,
   PTT_MSG_STOP_TONE_GEN = 0x32AB,
   PTT_MSG_RX_IM2_CAL = 0x32AC,
   PTT_MSG_SET_RX_IM2_CORRECT = 0x31AD,
   PTT_MSG_GET_RX_IM2_CORRECT = 0x31AE,
   PTT_MSG_TEST_DPD_CAL = 0x32AF,  // not handle
   PTT_MSG_SET_CALCONTROL_BITMAP = 0x32B0,

//[RY] specific new messages for PRIMA
   PTT_MSG_START_WAVEFORM_RF = 0x32B1,
   PTT_MSG_STOP_WAVEFORM_RF = 0x32B2,
   PTT_MSG_HKDAC_TX_IQ_CAL = 0x32B3,
   PTT_MSG_SET_HKADC_TX_IQ_CORRECT = 0x32B4,
   PTT_MSG_GET_HKADC_TX_IQ_CORRECT = 0x32B5,
   PTT_MSG_SET_DPD_CORRECT = 0x32B6,
   PTT_MSG_GET_DPD_CORRECT = 0x32B7,
   PTT_MSG_SET_WAVEFORM_RF = 0x32B8,
   PTT_MSG_LNA_BAND_CAL = 0x32B9,
   PTT_MSG_GET_LNA_BAND_CORRECT = 0x32BA,
   PTT_MSG_SET_LNA_BAND_CORRECT = 0x32BB,
   PTT_MSG_DPD_CAL = 0x32BC,

// Suffix'ed Message ID to differential from existing Message name.
// ===============================================================
   PTT_MSG_GET_NV_TABLE_PRIMA_V1 = 0x32BD,
   PTT_MSG_SET_NV_TABLE_PRIMA_V1 = 0x32BE,
   PTT_MSG_RX_IQ_CAL_PRIMA_V1 = 0x32BF,
   PTT_MSG_TX_IQ_CAL_PRIMA_V1 = 0x32C0,
   PTT_MSG_SET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C1,
   PTT_MSG_GET_TX_IQ_CORRECT_PRIMA_V1 = 0x32C2,
   PTT_MSG_SET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C3,
   PTT_MSG_GET_RX_IQ_CORRECT_PRIMA_V1 = 0x32C4,
   PTT_MSG_START_WAVEFORM_PRIMA_V1 = 0x32C5,
   PTT_MSG_FORCE_PACKET_TX_GAIN_PRIMA_V1 = 0x32C6,
   PTT_MSG_CLPC_CAL_SETUP_PRIMA_V1 = 0x32C7,
   PTT_MSG_CLPC_CAL_RESTORE_PRIMA_V1 = 0x32C8,
   PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1 = 0x32C9,
   PTT_MSG_SW_CLPC_CAL_PRIMA_V1 = 0x32CA,
   PTT_MSG_CLPC_CAL_EXTRA_MEASUREMENT_PRIMA_V1 = 0x32CB,
   PTT_MSG_PRIMA_GENERIC_CMD = 0x32CC,
   PTT_MSG_DIGITAL_PIN_CONNECTIVITY_TEST_RES = 0X32CD,

   PTT_MSG_EXIT = 0x32ff,
   PTT_MAX_MSG_ID = PTT_MSG_EXIT
} ePttMsgId;

enum 
{
   PTT_MSG_PRIMA_GENERIC_CMD_FAST_SET_CHANNEL = 0x0,
};

#define PTT_MSG_TYPES_BEGIN_30          PTT_MSG_TYPES_BEGIN
#define PTT_MSG_TYPES_BEGIN_31          PTT_MSG_TYPES_BEGIN + 0x100
#define PTT_MSG_TYPES_BEGIN_32          PTT_MSG_TYPES_BEGIN + 0x200

// for FTM PER feature
enum {
Legacy_FTM = 0,
FTM_PER_TX = 1,
FTM_PER_RX = 2,
};

#ifndef tANI_BOOLEAN
#define tANI_BOOLEAN tANI_U8
#endif



/******************************************************************************************************************
    PTT MESSAGES
******************************************************************************************************************/
//Init
typedef PACKED_PRE struct PACKED_POST {
   tPttModuleVariables ptt;
} tMsgPttMsgInit;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 tableSize;
   tANI_U32 chunkSize;
   eNvTable nvTable;
} tMsgPttGetNvTable;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 tableSize;
   tANI_U32 chunkSize;
   eNvTable nvTable;
} tMsgPttSetNvTable;

typedef PACKED_PRE struct PACKED_POST {
   eNvTable nvTable;
} tMsgPttDelNvTable;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttBlankNv;

typedef PACKED_PRE struct PACKED_POST {
   eNvField nvField;
   uNvFields fieldData;
} tMsgPttGetNvField;

typedef PACKED_PRE struct PACKED_POST {
   eNvField nvField;
   uNvFields fieldData;
} tMsgPttSetNvField;

typedef PACKED_PRE struct PACKED_POST {
   eNvTable nvTable;
} tMsgPttStoreNvTable;

typedef PACKED_PRE struct PACKED_POST {
   eRegDomainId regDomainId;
} tMsgPttSetRegDomain;

//Device Register Access
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 regAddr;
   tANI_U32 regValue;
} tMsgPttDbgReadRegister;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 regAddr;
   tANI_U32 regValue;
} tMsgPttDbgWriteRegister;

#define PTT_READ_MEM_MAX 512
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 memAddr;
   tANI_U32 nBytes;
   tANI_U32 pMemBuf[PTT_READ_MEM_MAX]; //caller should allocate space
} tMsgPttDbgReadMemory;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 memAddr;
   tANI_U32 nBytes;
   tANI_U32 pMemBuf[PTT_READ_MEM_MAX];
} tMsgPttDbgWriteMemory;

//Device MAC Test Setup
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 chId;
   ePhyChanBondState cbState;
} tMsgPttSetChannel;

typedef PACKED_PRE struct PACKED_POST {
   ePhyChainSelect chainSelect;
} tMsgPttEnableChains;

typedef tIQSamples tWaveformSample;

//Tx Waveform Gen Service
typedef PACKED_PRE struct PACKED_POST {
   tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES];
   tANI_U16 numSamples;
   tANI_BOOLEAN clk80;
   tANI_U8 reserved[1];
} tMsgPttSetWaveform;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;
   tANI_U8 gain;
} tMsgPttSetTxWaveformGain;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;
   tANI_U32 gain;
} tMsgPttSetTxWaveformGain_PRIMA_V1;

typedef PACKED_PRE struct PACKED_POST {
   ePhyRxChains rxChain;
   tANI_U8 gain;
} tMsgPttSetRxWaveformGain;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsPowerAdcReadings txPowerAdc;
} tMsgPttGetWaveformPowerAdc;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttStopWaveform;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttClpcCalSetup_PRIMA_V1;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U16 setup_measure;
   tANI_U16 setup_txDmdPwrOffset;
   tANI_U16 measure_totalExtraPt;
   tANI_U16 measure_currentMeasurePtIdx;
   tANI_U8 plut[256];
} tMsgPttClpcCalExtraMeasurement_PRIMA_V1;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttClpcCalRestore_PRIMA_V1;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 startIndex;
   tANI_U32 numSamples;
} tMsgPttStartWaveform;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 startIndex;
   tANI_U32 numSamples;
} tMsgPttStartWaveform_PRIMA_V1;

// Added for PRIMA
typedef PACKED_PRE struct PACKED_POST {
   tWaveformSample waveform[MAX_TEST_WAVEFORM_SAMPLES];
   tANI_U16 numSamples;
   tANI_BOOLEAN clk80;
   tANI_U8 reserved[1];
} tMsgPttSetWaveformRF;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 startIndex;
   tANI_U32 numSamples;
} tMsgPttStartWaveformRF;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttStopWaveformRF;

//Tx Frame Gen Service
typedef PACKED_PRE struct PACKED_POST {
   sPttFrameGenParams frameParams;
} tMsgPttConfigTxPacketGen;

typedef PACKED_PRE struct PACKED_POST {
   tANI_BOOLEAN startStop;
   tANI_U8 reserved[3];
} tMsgPttStartStopTxPacketGen;

typedef PACKED_PRE struct PACKED_POST {
   sTxFrameCounters numFrames;
   tANI_BOOLEAN status;
   tANI_U8 reserved[3];
} tMsgPttQueryTxStatus;

//Tx Frame Power Service
typedef PACKED_PRE struct PACKED_POST {
   tANI_BOOLEAN tpcClose;
   tANI_U8 reserved[3];
} tMsgPttCloseTpcLoop;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 tpcClose;
} tMsgPttCloseTpcLoop_PRIMA_V1;


    //open loop service
typedef PACKED_PRE struct PACKED_POST {

   ePhyTxChains txChain;
   tANI_U8 minIndex;
   tANI_U8 maxIndex;
   tANI_U8 reserved[2];
   tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH];
} tMsgPttSetPacketTxGainTable;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;
   tANI_U8 gainTable[TPC_MEM_GAIN_LUT_DEPTH];
} tMsgPttGetPacketTxGainTable;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U8 index;
   tANI_U8 reserved[3];
} tMsgPttSetPacketTxGainIndex;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;
   tANI_U8 gain;
   tANI_U8 reserved[3];
} tMsgPttForcePacketTxGain;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;
   tANI_U32 gain;
} tMsgPttForcePacketTxGain_PRIMA_V1;


typedef PACKED_PRE struct PACKED_POST {
   ePowerTempIndexSource indexSource;
} tMsgPttSetPwrIndexSource;

typedef PACKED_PRE struct PACKED_POST {
   t2Decimal dbmPwr;
   tANI_U8 reserved[2];
} tMsgPttSetTxPower;

typedef tTxPowerReport tMsgPttGetTxPowerReport;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;

   tANI_U8 minIndex;
   tANI_U8 maxIndex;
   tANI_U8 reserved[2];

   tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH];
} tMsgPttSetPowerLut;

typedef PACKED_PRE struct PACKED_POST {
   ePhyTxChains txChain;

   tANI_U8 powerLut[TPC_MEM_POWER_LUT_DEPTH];
} tMsgPttGetPowerLut;


//Rx Gain Service
typedef PACKED_PRE struct PACKED_POST {
   sRxChainsAgcDisable gains;
} tMsgPttDisableAgcTables;


typedef PACKED_PRE struct PACKED_POST {
   sRxChainsAgcEnable enables;
} tMsgPttEnableAgcTables;

typedef PACKED_PRE struct PACKED_POST {
   sRxChainsRssi rssi;
} tMsgPttGetRxRssi;

typedef PACKED_PRE struct PACKED_POST {
    sRxChainsRssi rssi;
}tMsgPttGetUnicastMacPktRxRssi;

typedef PACKED_PRE struct PACKED_POST {
    tANI_U32 conf;
}tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1;

//Rx Frame Catcher Service
typedef PACKED_PRE struct PACKED_POST {
   sRxTypesDisabled disabled;
} tMsgPttSetRxDisableMode;

typedef PACKED_PRE struct PACKED_POST {
   sRxFrameCounters counters;
} tMsgPttGetRxPktCounts;


typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttResetRxPacketStatistics;





//ADC Sample Service
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 startSample;        //index of first requested sample, 0 causes new capture
   tANI_U32 numSamples;         //number of samples to transfer to host
   eGrabRamSampleType sampleType;
   tGrabRamSample grabRam[MAX_REQUESTED_GRAB_RAM_SAMPLES];
} tMsgPttGrabRam;


//Phy Calibration Service
typedef PACKED_PRE struct PACKED_POST {
   sRxChainsIQCalValues calValues;
   eGainSteps gain;
} tMsgPttRxIqCal;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsDcoCorrections calValues;
   tANI_U8 gain;
} tMsgPttRxDcoCal;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsIm2Corrections calValues;
   eGainSteps gain;
   tANI_U8 im2CalOnly;
} tMsgPttRxIm2Cal;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLoCorrections calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttTxCarrierSuppressCal;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsIQCalValues calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttTxIqCal;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsHKIQCalValues calValues;
   eGainSteps gain;
} tMsgPttHKdacTxIqCal;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 unused;
} tMsgPttExecuteInitialCals;

typedef PACKED_PRE struct PACKED_POST {
   sRfHdetCalValues hdetCalValues;
} tMsgPttHdetCal;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U16 clpcMode;
   tANI_U16 txCmdPwr;
   tANI_U16 pwrMax_pwrMin;
   tANI_U16 step;
   tANI_U8 plut[256];
} tMsgPttClpcSwCal_PRIMA_V1;


//Phy Calibration Override Service
typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLoCorrections calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttSetTxCarrierSuppressCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLoCorrections calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttGetTxCarrierSuppressCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsIQCalValues calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttSetTxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsIQCalValues calValues;
   tANI_U8 reserve[2];
   eGainSteps gain;
} tMsgPttGetTxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsHKIQCalValues calValues;
   eGainSteps gain;
} tMsgPttHKdacSetTxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsHKIQCalValues calValues;
   eGainSteps gain;
} tMsgPttHKdacGetTxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sRxChainsIQCalValues calValues;
   eGainSteps gain;
} tMsgPttSetRxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sRxChainsIQCalValues calValues;
   eGainSteps gain;
} tMsgPttGetRxIqCorrect;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsDcoCorrections calValues;
   tANI_U8 gain;
} tMsgPttSetRxDcoCorrect;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsDcoCorrections calValues;
   tANI_U8 gain;
} tMsgPttGetRxDcoCorrect;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsIm2Corrections calValues;
   tANI_U8 dummy;
} tMsgPttSetRxIm2Correct;

typedef PACKED_PRE struct PACKED_POST {
   tRxChainsIm2Corrections calValues;
   tANI_U8 dummy;
} tMsgPttGetRxIm2Correct;

typedef PACKED_PRE struct PACKED_POST {
   eRfTempSensor tempSensor;
   tTempADCVal tempAdc;
   tANI_U8 reserved[4 - sizeof(tTempADCVal)];
} tMsgPttGetTempAdc;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 addr;
   tANI_U32 mask;
   tANI_U32 shift;
   tANI_U32 value;
} tMsgPttReadRfField;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 addr;
   tANI_U32 mask;
   tANI_U32 shift;
   tANI_U32 value;
} tMsgPttWriteRfField;

//SIF bar4 Register Access
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 sifRegAddr;
   tANI_U32 sifRegValue;
} tMsgPttReadSifBar4Register;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 sifRegAddr;
   tANI_U32 sifRegValue;
} tMsgPttWriteSifBar4Register;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttDeepSleep;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttEnterFullPower;

//Misc.
typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 notUsed;
} tMsgPttSystemReset;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 cmd;
   tANI_U32 arg1;
   tANI_U32 arg2;
   tANI_U32 arg3;
   tANI_U32 arg4;
} tMsgPttLogDump;

typedef PACKED_PRE struct PACKED_POST {
   sBuildReleaseParams relParams;
} tMsgPttGetBuildReleaseNumber;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 revId;
} tMsgPttGetRFVersion;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 option;             //dummy variable
} tMsgPttCalControlBitmap;

//#ifdef VERIFY_HALPHY_SIMV_MODEL


typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 option;             //dummy variable
} tMsgPttHalPhyInit;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 option;             //dummy variable
} tMsgPttRxIQTest;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsDPDCalValues calValues;
   eGainSteps gain;
} tMsgPttDpdCal;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U8 lutIdx;
   tANI_U8 band;
} tMsgPttStartToneGen;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U32 option;             //dummy variable
} tMsgPttStopToneGen;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLnaBandCalValues calValues;
   eGainSteps gain;
} tMsgPttLnaBandCal;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLnaBandCalValues calValues;
   eGainSteps gain;
} tMsgPttGetLnaBandCalCorrect;

typedef PACKED_PRE struct PACKED_POST {
   sTxChainsLnaBandCalValues calValues;
   eGainSteps gain;
} tMsgPttSetLnaBandCalCorrect;

typedef PACKED_PRE struct PACKED_POST {
    sTxChainsDPDCalValues calValues;
    eGainSteps gain;
}tMsgPttSetDPDCorrect;

typedef PACKED_PRE struct PACKED_POST {
    sTxChainsDPDCalValues calValues;
    eGainSteps gain;
}tMsgPttGetDPDCorrect;

typedef PACKED_PRE struct PACKED_POST {
   tQWPTT_U32 cmdIdx;
   tQWPTT_U32 param1;
   tQWPTT_U32 param2;
   tQWPTT_U32 param3;
   tQWPTT_U32 param4;
} tMsgPttPrimaGenericCmd;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U16 testID;
   tANI_U16 result;
} tMsgPttPinConnTestRes;
//#endif

/******************************************************************************************************************
    END OF PTT MESSAGES
******************************************************************************************************************/

typedef PACKED_PRE union PACKED_POST pttMsgUnion{
//typedef union pttMsgUnion {
   tMsgPttMsgInit MsgInit;
   tMsgPttGetNvTable GetNvTable;
   tMsgPttSetNvTable SetNvTable;
   tMsgPttDelNvTable DelNvTable;
   tMsgPttBlankNv BlankNv;
   tMsgPttStoreNvTable StoreNvTable;
   tMsgPttSetRegDomain SetRegDomain;
   tMsgPttGetNvField GetNvField;
   tMsgPttSetNvField SetNvField;
   tMsgPttDbgReadRegister DbgReadRegister;
   tMsgPttDbgWriteRegister DbgWriteRegister;
   tMsgPttDbgReadMemory DbgReadMemory;
   tMsgPttDbgWriteMemory DbgWriteMemory;
   tMsgPttEnableChains EnableChains;
   tMsgPttSetChannel SetChannel;
   tMsgPttSetWaveform SetWaveform;
   tMsgPttSetTxWaveformGain SetTxWaveformGain;
   tMsgPttSetTxWaveformGain_PRIMA_V1 SetTxWaveformGain_PRIMA_V1;
   tMsgPttGetWaveformPowerAdc GetWaveformPowerAdc;
   tMsgPttStartWaveform StartWaveform;
   tMsgPttStartWaveform_PRIMA_V1 StartWaveform_PRIMA_V1;
   tMsgPttStopWaveform StopWaveform;
   tMsgPttSetRxWaveformGain SetRxWaveformGain;
   tMsgPttConfigTxPacketGen ConfigTxPacketGen;
   tMsgPttStartStopTxPacketGen StartStopTxPacketGen;
   tMsgPttQueryTxStatus QueryTxStatus;
   tMsgPttCloseTpcLoop CloseTpcLoop;
   tMsgPttCloseTpcLoop_PRIMA_V1 CloseTpcLoop_PRIMA_V1;
   tMsgPttSetPacketTxGainTable SetPacketTxGainTable;
   tMsgPttGetPacketTxGainTable GetPacketTxGainTable;
   tMsgPttSetPacketTxGainIndex SetPacketTxGainIndex;
   tMsgPttForcePacketTxGain ForcePacketTxGain;
   tMsgPttForcePacketTxGain_PRIMA_V1 ForcePacketTxGain_PRIMA_V1;
   tMsgPttSetPwrIndexSource SetPwrIndexSource;
   tMsgPttSetTxPower SetTxPower;
   tMsgPttGetTxPowerReport GetTxPowerReport;
   tMsgPttSetPowerLut SetPowerLut;
   tMsgPttGetPowerLut GetPowerLut;
   tMsgPttDisableAgcTables DisableAgcTables;
   tMsgPttEnableAgcTables EnableAgcTables;
   tMsgPttGetRxRssi GetRxRssi;
   tMsgPttGetUnicastMacPktRxRssi GetUnicastMacPktRxRssi;
   tMsgPttGetUnicastMacPktRxRssiConf_PRIMA_V1 GetUnicastMacPktRxRssiConf_PRIMA_V1;
   tMsgPttSetRxDisableMode SetRxDisableMode;
   tMsgPttGetRxPktCounts GetRxPktCounts;
   tMsgPttResetRxPacketStatistics ResetRxPacketStatistics;
   tMsgPttGrabRam GrabRam;
   tMsgPttRxIqCal RxIqCal;
   tMsgPttRxDcoCal RxDcoCal;
   tMsgPttRxIm2Cal RxIm2Cal;

   tMsgPttExecuteInitialCals ExecuteInitialCals;
   tMsgPttTxCarrierSuppressCal TxCarrierSuppressCal;
   tMsgPttTxIqCal TxIqCal;
   tMsgPttHKdacTxIqCal HKdacTxIqCal;
   tMsgPttClpcCalSetup_PRIMA_V1 ClpcCalSetup_PRIMA_V1;
   tMsgPttClpcCalRestore_PRIMA_V1 ClpcCalRestore_PRIMA_V1;
   tMsgPttHdetCal HdetCal;
   tMsgPttClpcSwCal_PRIMA_V1 ClpcSwCal_PRIMA_V1;
   tMsgPttClpcCalExtraMeasurement_PRIMA_V1 ClpcCalExtraMeasurement_PRIMA_V1;
   tMsgPttSetTxCarrierSuppressCorrect SetTxCarrierSuppressCorrect;
   tMsgPttGetTxCarrierSuppressCorrect GetTxCarrierSuppressCorrect;
   tMsgPttSetTxIqCorrect SetTxIqCorrect;
   tMsgPttGetTxIqCorrect GetTxIqCorrect;
   tMsgPttSetRxIqCorrect SetRxIqCorrect;
   tMsgPttGetRxIqCorrect GetRxIqCorrect;
   tMsgPttSetRxDcoCorrect SetRxDcoCorrect;
   tMsgPttGetRxDcoCorrect GetRxDcoCorrect;
   tMsgPttSetRxIm2Correct SetRxIm2Correct;
   tMsgPttGetRxIm2Correct GetRxIm2Correct;
   tMsgPttHKdacSetTxIqCorrect HKdacSetTxIqCorrect;
   tMsgPttHKdacGetTxIqCorrect HKdacGetTxIqCorrect;

   tMsgPttGetTempAdc GetTempAdc;
   tMsgPttReadRfField ReadRfField;
   tMsgPttWriteRfField WriteRfField;
   tMsgPttCalControlBitmap SetCalControlBitmap;

//#ifdef VERIFY_HALPHY_SIMV_MODEL

   tMsgPttHalPhyInit InitOption;
   tMsgPttRxIQTest RxIQTest;
   tMsgPttDpdCal DpdCal;
   tMsgPttStartToneGen StartToneGen;
   tMsgPttStopToneGen StopToneGen;
//#endif
   tMsgPttDeepSleep DeepSleep;
   tMsgPttReadSifBar4Register ReadSifBar4Register;
   tMsgPttWriteSifBar4Register WriteSifBar4Register;
   tMsgPttEnterFullPower EnterFullPower;
   tMsgPttSystemReset SystemReset;
   tMsgPttLogDump LogDump;
   tMsgPttGetBuildReleaseNumber GetBuildReleaseNumber;
   tMsgPttGetRFVersion GetRFVersion;

//[RY] added for PRIMA
   tMsgPttSetWaveformRF SetWaveformRF;
   tMsgPttStopWaveformRF StopWaveformRF;
   tMsgPttStartWaveformRF StartWaveformRF;
   tMsgPttLnaBandCal LnaBandCal;
   tMsgPttGetLnaBandCalCorrect GetLnaBandCalCorrect;
   tMsgPttSetLnaBandCalCorrect SetLnaBandCalCorrect;
   tMsgPttGetDPDCorrect GetDPDCorrect;
   tMsgPttSetDPDCorrect SetDPDCorrect;
   tMsgPttDpdCal DPDCal;
   tMsgPttPrimaGenericCmd PrimaGenericCmd;
   tMsgPttPinConnTestRes PinConnTestRes;
} uPttMsgs;

typedef PACKED_PRE struct PACKED_POST {
   tANI_U16 msgId;
   tANI_U16 msgBodyLength;      //actually, the length of all the fields in this structure
   eQWPttStatus msgResponse;
   uPttMsgs msgBody;
} tPttMsgbuffer, *tpPttMsgbuffer;


typedef PACKED_PRE struct PACKED_POST {
   /*
    * success or failure
    */
   tANI_U32 status;
   tPttMsgbuffer pttMsgBuffer;
} tProcessPttRspParams, *tpProcessPttRspParams;

/* End of Ptt Parameters */

#endif
