/*
 * 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.
 */

#ifndef WLAN_PHY_H
#define WLAN_PHY_H
/*============================================================================ 
@file wlan_phy.h 

Contains definitions of all PHY related structures that aree needed by FTM/PTT

Copyright (c) 2007 Qualcomm Technologies, Inc. All Rights Reserved. 
Qualcomm Technologies Proprietary and Confidential

============================================================================*/
#include <wlan_nv.h>
 
/* Currently this structure holds the information about the current calibration mode.
In future, if anymore info is needed, that can be added here */
typedef PACKED_PRE struct PACKED_POST
{
    tANI_U8 currentCalibration;
} sCalibrationInfo;

typedef PACKED_PRE struct PACKED_POST {
    tANI_S16 I;   //ADC sample of PHY_I_RAIL
    tANI_S16 Q;   //ADC sample of PHY_Q_RAIL
}tIQSamples;

typedef tIQSamples tIQAdc;
typedef tIQSamples tIQDac;

typedef PACKED_PRE struct PACKED_POST
{
    tANI_U8 maxGainIndex;
    tANI_U8 topGainDb;
    tANI_U8 bottomGainDb;
    tANI_U8 unused[1];
}tAsicAgc;

#define TXFIR_MEM                           QWLAN_TXFIR_TXCAL_MEM0_MREG
#define TXFIR_MEM_GAIN_MULT                 (16)    //bytes per gain
#define TXFIR_MEM_PER_CHAIN                 (16 * TXFIR_MEM_GAIN_MULT)    //# of gains per chain * bytes per gain

typedef tIQAdc tTxCarrierError;

#define ONE_MICROSECOND             (160)
#define DEFAULT_INTERFRAME_SPACE    (ONE_MICROSECOND * 10)  //10 microseconds

typedef enum {
   PHYDBG_TX_IDLE = 0,
   PHYDBG_TX_START = 1,
   PHYDBG_TX_WARMUP = 2,
   PHYDBG_TX_INFD = 3,
   PHYDBG_TX_CMD = 4,
   PHYDBG_TX_SVC = 5,
   PHYDBG_TX_PYLDF = 6,
   PHYDBG_TX_PYLDR = 7,
   PHYDBG_TX_CRC = 8,
   PHYDBG_TX_FLUSH = 9,
   PHYDBG_TX_TXDONEWAIT = 10,
   PHYDBG_TX_TIFWAIT = 11
} ePhyDbgTxStatus;

typedef enum {
   PHYDBG_PREAMBLE_OFDM,
   PHYDBG_PREAMBLE_GREENFIELD,
   PHYDBG_PREAMBLE_MIXED,
   PHYDBG_PREAMBLE_SHORTB,
   PHYDBG_PREAMBLE_LONGB,

   PHYDBG_LDPC_PREAMBLE_OFDM = 0x10,
   PHYDBG_LDPC_PREAMBLE_GREENFIELD = 0x11,
   PHYDBG_LDPC_PREAMBLE_MIXED = 0x12
} ePhyDbgPreamble;


//grab ram
#ifdef VERIFY_HALPHY_SIMV_MODEL
#define GRAB_RAM_DBLOCK_SIZE  (256) //number of samples in full capture
#else
#define GRAB_RAM_DBLOCK_SIZE         (1024)  //number of samples in full capture
#endif

#define MAX_REQUESTED_GRAB_RAM_SAMPLES 256    //only allow 256 samples at a time
#define GRAB_RAM_BUFFER_DEPTH       (4*1024)   //maximum grab ram size in full capture
#define LAST_GRAB_RAM_SAMPLE_INDEX (GRAB_RAM_BUFFER_DEPTH - 1)


typedef PACKED_PRE struct PACKED_POST {
   tIQAdc rx0;
} tGrabRamSample;


enum {
   GRABRAM_RAWADC = 0,
   GRABRAM_POSTIQ
};
typedef tANI_U32 eGrabRamSampleType;

typedef tANI_S8  tANI_S6;
typedef tANI_S16 tANI_S9;
typedef tANI_S16 tANI_S10;
typedef tANI_S16 tANI_S12;
typedef tANI_U16 tANI_U10;



//convert float to a format that preserves enough accuracy to be used by driver
typedef tANI_S16 t2Decimal;
#define CONVERT_TO_2DECIMAL_PLACES(x)   (x * 100)
#define CONVERT_FROM_2DECIMAL_PLACES(x) (x / 100)

#ifndef PTT_FLOAT
#define PTT_FLOAT tANI_U32  // driver code can't include float, 
//so this reserves space in our structures to allow floating point measurements
#endif

typedef enum
{
    PHY_RX_CHAIN_0 = 0,

    PHY_MAX_RX_CHAINS = 1,
    PHY_ALL_RX_CHAINS,
    PHY_NO_RX_CHAINS
}ePhyRxChains;

typedef enum
{
    PHY_I_RAIL = 0,
    PHY_Q_RAIL = 1,
    PHY_NUM_IQ_RAILS
}ePhyIQ;

//[RY] extend total gain steps to 24

enum
{
    TX_GAIN_STEP_0,
    TX_GAIN_STEP_1,
    TX_GAIN_STEP_2,
    TX_GAIN_STEP_3,
    TX_GAIN_STEP_4,
    TX_GAIN_STEP_5,
    TX_GAIN_STEP_6,
    TX_GAIN_STEP_7,
    TX_GAIN_STEP_8,
    TX_GAIN_STEP_9,
    TX_GAIN_STEP_10,
    TX_GAIN_STEP_11,
    TX_GAIN_STEP_12,
    TX_GAIN_STEP_13,
    TX_GAIN_STEP_14,
    TX_GAIN_STEP_15,
    TX_GAIN_STEP_16,
    TX_GAIN_STEP_17,
    TX_GAIN_STEP_18,
    TX_GAIN_STEP_19,
    TX_GAIN_STEP_20,
    TX_GAIN_STEP_21,
    TX_GAIN_STEP_22,
    TX_GAIN_STEP_23,
    TX_GAIN_STEP_24,
    TX_GAIN_STEP_25,
    TX_GAIN_STEP_26,
    TX_GAIN_STEP_27,
    TX_GAIN_STEP_28,
    TX_GAIN_STEP_29,
    TX_GAIN_STEP_30,
    TX_GAIN_STEP_31,

    RX_GAIN_STEP_0   = 0,
    RX_GAIN_STEP_1,
    RX_GAIN_STEP_2,
    RX_GAIN_STEP_3,
    RX_GAIN_STEP_4,
    RX_GAIN_STEP_5,
    RX_GAIN_STEP_6,
    RX_GAIN_STEP_7,
    RX_GAIN_STEP_8,
    RX_GAIN_STEP_9,
    RX_GAIN_STEP_10,
    RX_GAIN_STEP_11,
    RX_GAIN_STEP_12,
    RX_GAIN_STEP_13,
    RX_GAIN_STEP_14,
    RX_GAIN_STEP_15,

    NUM_TX_GAIN_STEPS = 32,
    MAX_TX_GAIN_STEP = TX_GAIN_STEP_31,

    NUM_RX_GAIN_STEPS = 16,
    MAX_RX_GAIN_STEP = RX_GAIN_STEP_15,
};
typedef tANI_U32 eGainSteps;


//[RY] new for PRIMA
#define DPD_RESPONSE_SIZE 128
typedef PACKED_PRE struct PACKED_POST {
    tANI_U8  dpdCalFailCnt;                     //Count for number of times DPD cal failed.
    tANI_U8  dpdCalSuccessCnt;                  //Count for number of times DPD cal passed.
    tANI_S16 dpd_threshold[DPD_RESPONSE_SIZE];
    tANI_S16 dpd_aoffset[DPD_RESPONSE_SIZE];
    tANI_S16 dpd_again[DPD_RESPONSE_SIZE];
    tANI_S16 dpd_poffset[DPD_RESPONSE_SIZE];
    tANI_S16 dpd_pgain[DPD_RESPONSE_SIZE];
}sDPDcorrectionCalValues;

typedef PACKED_PRE struct PACKED_POST {
    sDPDcorrectionCalValues dpd[PHY_MAX_TX_CHAINS];
}sTxChainsDPDCalValues;


//[RY] RX IQ correction coefficients Memory
typedef PACKED_PRE struct PACKED_POST {
    tANI_S9 coeff_i[5];
    tANI_S9 coeff_q[5];
}sIQCalValues;

//[RY], added for RIVA
typedef PACKED_PRE struct PACKED_POST {
    tANI_S9 iq_ampimb_coeff;
    tANI_S16 txloleakage_i;     // raw data is 6-bit 2's compliment
    tANI_S16 txloleakage_q;     // raw data is 6-bit 2's compliment
}sTXIQCalValues;

//[RY], added for RIVA
typedef PACKED_PRE struct PACKED_POST {
    tANI_S9 iqphaseimb_coeff_i[5];
    tANI_S9 iqphaseimb_coeff_q[5];
}sTXIQPhaseImbCalValues;

typedef PACKED_PRE struct PACKED_POST {
    sIQCalValues iq[PHY_MAX_RX_CHAINS];
}sRxChainsIQCalValues;

//[RY] change for PRIMA
typedef PACKED_PRE struct PACKED_POST {
    sTXIQCalValues iq[PHY_MAX_TX_CHAINS];
    sTXIQPhaseImbCalValues iqImb[PHY_MAX_TX_CHAINS];
}sTxChainsIQCalValues;

typedef PACKED_PRE struct PACKED_POST {
    tANI_S9 co_i[3];
    tANI_S9 co_q[3];
}sHKIQCalValues;

typedef PACKED_PRE struct PACKED_POST {
    sHKIQCalValues co[PHY_MAX_TX_CHAINS];
}sTxChainsHKIQCalValues;

typedef PACKED_PRE struct PACKED_POST {
    tANI_U8 lna_code;    //wlan_lna_5g_control1,wl_5g_lna_load_ctune
    tANI_U8 gm_code;     //wlan_rxgm_5g_control4,wlgm_ctune 
}sLnaBandCalValues;

typedef PACKED_PRE struct PACKED_POST {
    sLnaBandCalValues lnaCode[PHY_MAX_RX_CHAINS];
}sTxChainsLnaBandCalValues;

typedef tANI_U16 t_mW;       //milliWatts
typedef tANI_U8 tPwrTemplateIndex;   //5-bit number used as the index into the tx gain tables

typedef PACKED_PRE struct PACKED_POST {
    tANI_U8 txPowerAdc[PHY_MAX_TX_CHAINS];
}sTxChainsPowerAdcReadings;

typedef PACKED_PRE struct PACKED_POST
{
    tANI_U8 agcGain;
}tRxGain;

typedef PACKED_PRE struct PACKED_POST {
    tANI_U8 rx[PHY_MAX_RX_CHAINS];
}sRxChainsData;

typedef sRxChainsData sRxChainsRssi;
typedef sRxChainsData sRxChainsAgcDisable;

typedef PACKED_PRE struct PACKED_POST {
    tANI_BOOLEAN rx[PHY_MAX_RX_CHAINS];
}sRxChainsBoolean;

typedef sRxChainsBoolean sRxChainsAgcEnable;

#define NUM_AGC_GAINS   64
typedef tRxGain sAgcGainLut[NUM_AGC_GAINS];


typedef PACKED_PRE struct PACKED_POST
{
    tANI_S6 iLo;
    tANI_S6 qLo;
}sTxFirLoCorrect;

typedef tIQAdc sTxLoCorrectBB[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS];

typedef PACKED_PRE struct PACKED_POST
{
    tANI_U32 txIqLoCache[PHY_MAX_TX_CHAINS][NUM_TX_GAIN_STEPS][4];
    tANI_U32 spatialRotation;
}tAsicTxFir;

//Tx Power Config
//A collection of selected calibrated power points at selected frequencies.
//The algorithm does not need to know any particulars about which frequencies or cal points,
// just the linearized adjustments at the selected calibration points
#define MAX_TPC_CHANNELS        (NUM_RF_CHANNELS)
#define START_TPC_CHANNEL       (2412)
#define END_TPC_CHANNEL         (2484)

#define MAX_PWR_LUT_DBM (24)
#define MIN_PWR_LUT_DBM (8)


/* The reason that MAX_PWR_LUT_DBM_2DEC_PLACES is not simply (MAX_PWR_LUT_DBM * 100) is due to the fact
    that we are interpolating the 5-bit power template index from this range compared to a LUT range of 0 to 127.
    There is an expectation that this power range is evenly divided in 0.5dBm steps.
    We expect that a commanded 13dBm would yield a power template index of 10, where a power template index of 0 would represent 8dBm.
    If we used an even 2400 to represent the max power, then the calculation for 13dBm actually returns 9:
    (127 - 0)*((1300 - 800)/(2400 - 800))+0 = 39.6875 = 39. When shifted to 5 bits, =9. Not what we wanted.
    What we need to do is find the 2-decimal place power that corresponds as closely as possible to the 127 in the 0 to 127 range.
    For the 800 to 2400 range, that comes out to 2386.5, so 2386. So again for a commanded power of 13dBm:
    (127 - 0)*((1300 - 800)/(2386 - 800))+0 = 40.0378 = 40. When shifted to 5-bits, = 10, which is what we wanted.

*/

#define MIN_PWR_LUT_DBM_2DEC_PLACES  (MIN_PWR_LUT_DBM * 100)
#define MAX_PWR_LUT_DBM_2DEC_PLACES  ((MAX_PWR_LUT_DBM * 100) - (1 + (100 * (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))/TPC_MEM_POWER_LUT_DEPTH))

//macro provides a quick conversion of dbm value between MIN_PWR_LUT_DBM and MAX_PWR_LUT_DBM to a power template index(0 to 31)
//based on convention, which may not hold true in the future.
#define CONVERT_DBM_GINDEX(dbm) (((dbm - MIN_PWR_LUT_DBM) * 32) / (MAX_PWR_LUT_DBM - MIN_PWR_LUT_DBM))

typedef tANI_U8 tTxGainCombo;        //7-bit gain value used to get the power measurement

typedef PACKED_PRE struct PACKED_POST
{
    tPowerDetect min;
    tPowerDetect max;
}tPwrTemplateRange;



/*
    The following union affords backward compatibility with txGain usage with band-specific tTpcConfig tables.
    Due to my finding that 7-bits is not enough precision, we need to reuse the txGain space as extra precision bits
    for the adjustedPwrDet. My spreadsheet shows that we need at least 4 bits more precision.
    To know which usage, the MSB of adjustedPwrDet can be set to signify the extra precision in place of the txGain, which isn't used anyway.
    We just need to be careful not to interpret a pre-existing table's txGain as extra precision.
*/

 typedef union
 {
     tTxGainCombo txGain;               //7-bit gain used to measure the pwrDetAdc value
     tANI_U8 hi8_adjustedPwrDet;        //if the MSB is set in adjustedPwrDet, then these are extra bits of precision
 }uExtraLutBits;


typedef PACKED_PRE struct PACKED_POST
{
    t2Decimal min;  //sometimes used for comparing chain powers
    t2Decimal max;  //sometimes used for comparing chain powers
}tPowerdBmRange;        //absolute power measurement precision maintained to two decimal places


typedef tANI_U16 tRfADCVal;
typedef tRfADCVal tTempADCVal;

typedef PACKED_PRE struct PACKED_POST
{
    tRfADCVal pdadc_offset;
    tANI_U8 reserved[2];
}tTpcParams;


//these definitions used as indexing to power per channel per rate table stored in NV
#define CB_RATE_POWER_OFFSET            0
#define CB_RATE_POWER_OFFSET_LAST_INDEX 60  //last index where we would apply the CB_RATE_POWER_OFFSET

/* TX Power Calibration & Report Types */


 typedef PACKED_PRE struct PACKED_POST
 {
     tANI_U8  temperatureAdc;                //= 5 bit temperature measured at time sample was taken
     tANI_U8  txGain;                        //= 7 bit gain value used to get the power measurement
     tANI_U8  pwrDetAdc;                     //= 8 bit ADC power detect value
     tANI_U8  reserved;
     uAbsPwrPrecision absPowerMeasured;      //= dBm measurement, will be truncated to two decimal places
 }tTpcCalPoint;
 
 
 typedef PACKED_PRE struct PACKED_POST
 {
     tANI_U16 numTpcCalPoints;
     tANI_U16 reserved;
     tTpcCalPoint chain[MAX_TPC_CAL_POINTS];
 }tTpcChainData;
 
 
 typedef PACKED_PRE struct PACKED_POST
 {
     tANI_U16 freq;                                          //frequency in MHz
     tANI_U16 reserved;
     tTpcChainData empirical[PHY_MAX_TX_CHAINS];  //TPC samples passed in
 }tTpcFreqData;
 
 typedef PACKED_PRE struct PACKED_POST
 {
     tANI_U8 numChannels;
     tANI_U8 reserved[3];
     tTpcFreqData calValues[MAX_TPC_CHANNELS];
 }sTpcFreqCalTable;
 
 
typedef PACKED_PRE struct PACKED_POST {
    tPowerDetect lut;                   //7-bit value in the power Lookup Table
    tANI_U8 reserved[3];
    
    uAbsPwrPrecision abs;               //LUT value conversion to absolute dBm
}tTxPowerLutOutput;

typedef PACKED_PRE struct PACKED_POST {
    tANI_U8      gain;                  //8-bit coarse(bits 4-7) & fine(bits 0-3) gain commanded for the current index
    tPowerDetect adc;                   //8-bit power ADC sampled during the packet preamble
    tANI_U16 rawAdc;                   //11-bit power raw ADC sampled
    
    tTxPowerLutOutput indexMinMatch;    //minimum LUT matching power that satisfies the power template index setting
    tTxPowerLutOutput indexMaxMatch;    //maximum LUT matching power that satisfies the power template index setting
    tTxPowerLutOutput output;           //output power values corresponding to power ADC index
}tTxChainPower;

extern const tRfChannelProps rfChannels[NUM_RF_CHANNELS];

typedef enum
{
    RF_CAL_TONE_28NEG,
    RF_CAL_TONE_24NEG,
    RF_CAL_TONE_20NEG,
    RF_CAL_TONE_16NEG,
    RF_CAL_TONE_12NEG,
    RF_CAL_TONE_8NEG,
    RF_CAL_TONE_4NEG,
    RF_CAL_TONE_4POS,
    RF_CAL_TONE_8POS,
    RF_CAL_TONE_12POS,
    RF_CAL_TONE_16POS,
    RF_CAL_TONE_20POS,
    RF_CAL_TONE_24POS,
    RF_CAL_TONE_28POS,

    NUM_RF_TONES,

    MIN_RF_TONE = RF_CAL_TONE_28NEG,
    MAX_RF_TONE = RF_CAL_TONE_28POS
}eRfTones;

typedef tANI_U8 tDcoCorrect;
typedef tANI_S8 tIm2Correct;

typedef PACKED_PRE struct PACKED_POST {
    tDcoCorrect IDcoCorrect;
    tDcoCorrect QDcoCorrect;
    tANI_U8     dcRange;
}tRxDcoCorrect;

typedef PACKED_PRE struct PACKED_POST {
    tRxDcoCorrect dco[PHY_MAX_RX_CHAINS];
}tRxChainsDcoCorrections;

typedef PACKED_PRE struct PACKED_POST {
    tIm2Correct ICorrect;
    tIm2Correct QCorrect;
}tRxIm2Correct;

typedef PACKED_PRE struct PACKED_POST {
    tRxIm2Correct dco[PHY_MAX_RX_CHAINS];
}tRxChainsIm2Corrections;

typedef PACKED_PRE struct PACKED_POST {
    tDcoCorrect IDcoCorrect;
    tDcoCorrect QDcoCorrect;
}tTxLoCorrect;

typedef PACKED_PRE struct PACKED_POST {
    tTxLoCorrect txLo[PHY_MAX_TX_CHAINS];
}sTxChainsLoCorrections;


//tDcoCorrect is needed to define rf specific structures

#define NUM_RF_RX_GAIN_STEPS    (128)
#define MAX_RF_RX_GAIN_STEP     (NUM_RF_RX_GAIN_STEPS - 1)

#define NUM_RF_TX_GAIN_STEPS    (16)
#define MAX_RF_TX_GAIN_STEP     (NUM_RF_TX_GAIN_STEPS - 1)

#define RF_AGC_GAIN_LUT_DEPTH   (128)
#define NUM_RF_DCO_VALUES       (128) //There are only 32 DCO values, but our algorithm it makes more sense for us to access these by AGC gain index
#define MAX_RF_DCO_VALUE        (NUM_RF_DCO_VALUES - 1)


typedef PACKED_PRE struct PACKED_POST
{
    tANI_U16 gainReg1;   //GEMINI_REG_RX_GC_0 (lna + mix + tia + bq1 + bq2 + pga)
}tRfRxGain;


typedef PACKED_PRE struct PACKED_POST
{
    tANI_U16 bbf_gain_cnt;
    tANI_U16 bbf_lin_adj;
    tANI_U16 lo_mix_da_gain_cntl;
    tANI_U16 pa_gain_cntl;
    tANI_U16 da_pa_bias_1_cnt;
    tANI_U16 da_pa_bias_2_cntl;
}tRfTxGain;
 
typedef PACKED_PRE struct PACKED_POST
{
    //TODO:define this struct for Gemini
    tANI_U8 rxIf;
    tANI_U8 txIf;
    tANI_U8 txRf;
    tANI_U8 reserved;
}sRfSpecificFilterSettings;

typedef sRfSpecificFilterSettings sRfChannelFilterSettings[NUM_RF_CHANNELS];


typedef PACKED_PRE struct PACKED_POST
{
    tANI_U8 hdet_ctl_ext_atten;
    tANI_U8 hdet_dcoc_code;
    tANI_U8 hdet_dcoc_ib_rcal_en;
    tANI_U8 hdet_dcoc_ib_scal_en;
}sRfNvCalValues;  //stored in QFUSE



typedef enum
{
    SYNTH_UNLOCKED,
    SYNTH_LOCK
}eRfSynthLock;

typedef enum
{
    TEMP_SENSOR_PA,
    TEMP_SENSOR_RX
}eRfTempSensor;

typedef enum
{
    TEMPERATURE_BIN_0,          //-30 to 5 C
    TEMPERATURE_BIN_1,          //5 to 45 C
    TEMPERATURE_BIN_2,          //45 to 85 C
    TEMPERATURE_BIN_3,          //85 to 125 C
    NUM_TEMPERATURE_BINS
}eTemperatureBins;

typedef PACKED_PRE struct PACKED_POST {
    tANI_U16 hdetDcocCode;
    tANI_U16 hdetDcoOffset;
}sRfHdetCalValues;

#define TPC_TXPWR_ENABLE_MASK                   QWLAN_TPC_TXPWR_ENABLE_EN_MASK


#define TPC_MEM_TX0_PWR_LUT_OFFSET              QWLAN_TPC_POWERDET0_RAM_MREG
#define TPC_MEM_TX1_PWR_LUT_OFFSET              QWLAN_TPC_POWERDET1_RAM_MREG
#define TPC_MEM_TX2_PWR_LUT_OFFSET              QWLAN_TPC_POWERDET2_RAM_MREG
#define TPC_MEM_TX3_PWR_LUT_OFFSET              QWLAN_TPC_POWERDET3_RAM_MREG
#define TPC_MEM_TX0_GAIN_LUT_OFFSET             QWLAN_TPC_GAIN_LUT0_MREG
#define TPC_MEM_TX1_GAIN_LUT_OFFSET             QWLAN_TPC_GAIN_LUT1_MREG
#define TPC_MEM_TX2_GAIN_LUT_OFFSET             QWLAN_TPC_GAIN_LUT2_MREG
#define TPC_MEM_TX3_GAIN_LUT_OFFSET             QWLAN_TPC_GAIN_LUT3_MREG

//these masks are the same for both chains
#define TPC_POWERDET_MASK                      QWLAN_TPC_POWERDET0_RAM_POWER_MASK
#define TPC_GAIN_RF_MASK                       QWLAN_TPC_GAIN_LUT0_RF_GAIN_MASK
#define TPC_GAIN_RF_OFFSET                     QWLAN_TPC_GAIN_LUT0_RF_GAIN_OFFSET
#define TPC_GAIN_DIG_MASK                      QWLAN_TPC_GAIN_LUT0_DIG_GAIN_MASK


#define TPC_MEM_GAIN_LUT_DEPTH                  32


#define TPC_ADC_CTRL_REG                        QWLAN_TPC_ADC_CTRL_GET_ADC_REG
#define TPC_ADC_GET_MASK                        QWLAN_TPC_ADC_CTRL_GET_ADC_GET_ADC_MASK

#define TPC_ADC_FAILED_MASK                     QWLAN_TPC_ADC_STATUS_FAILED_MASK
#define TPC_ADC_BUSY_P_MASK                     QWLAN_TPC_ADC_STATUS_BUSY_P_MASK
#define TPC_ADC_BUSY_T_MASK                     QWLAN_TPC_ADC_STATUS_BUSY_T_MASK


#define MSK_1   0x1
#define MSK_2   0x3
#define MSK_3   0x7
#define MSK_4   0xF
#define MSK_5   0x1F
#define MSK_6   0x3F
#define MSK_7   0x7F
#define MSK_8   0xFF
#define MSK_9   0x1FF
#define MSK_10  0x3FF
#define MSK_11  0x7FF
#define MSK_12  0xFFF
#define MSK_13  0x1FFF
#define MSK_14  0x3FFF
#define MSK_15  0x7FFF
#define MSK_16  0xFFFF
#define MSK_17  0x1FFFF
#define MSK_18  0x3FFFF
#define MSK_19  0x7FFFF
#define MSK_20  0xFFFFF
#define MSK_21  0x1FFFFF
#define MSK_22  0x3FFFFF
#define MSK_23  0x7FFFFF
#define MSK_24  0xFFFFFF
#define MSK_25  0x1FFFFFF
#define MSK_26  0x3FFFFFF
#define MSK_27  0x7FFFFFF
#define MSK_28  0xFFFFFFF
#define MSK_29  0x1FFFFFFF
#define MSK_30  0x3FFFFFFF
#define MSK_31  0x7FFFFFFF
#define MSK_32  0xFFFFFFFF


#define COARSE_GAIN_MASK    MSK_4
#define COARSE_GAIN_OFFSET  4
#define FINE_GAIN_MASK      MSK_4   //the upper most bit overlaps the coarse gain and should not be used for TPC LUT data
#define FINE_GAIN_OFFSET    0

typedef enum
{
    TPC_COARSE_TXPWR_0,
    TPC_COARSE_TXPWR_1,
    TPC_COARSE_TXPWR_2,
    TPC_COARSE_TXPWR_3,
    TPC_COARSE_TXPWR_4,
    TPC_COARSE_TXPWR_5,
    TPC_COARSE_TXPWR_6,
    TPC_COARSE_TXPWR_7,
    TPC_COARSE_TXPWR_8,
    TPC_COARSE_TXPWR_9,
    TPC_COARSE_TXPWR_10,
    TPC_COARSE_TXPWR_11,
    TPC_COARSE_TXPWR_12,
    TPC_COARSE_TXPWR_13,
    TPC_COARSE_TXPWR_14,
    TPC_COARSE_TXPWR_15,
    TPC_COARSE_TXPWR_16,
    TPC_COARSE_TXPWR_17,
    TPC_COARSE_TXPWR_18,
    TPC_COARSE_TXPWR_19,
    TPC_COARSE_TXPWR_20,
    TPC_COARSE_TXPWR_21,
    TPC_COARSE_TXPWR_22,
    TPC_COARSE_TXPWR_23,
    TPC_COARSE_TXPWR_24,
    TPC_COARSE_TXPWR_25,
    TPC_COARSE_TXPWR_26,
    TPC_COARSE_TXPWR_27,
    TPC_COARSE_TXPWR_28,
    TPC_COARSE_TXPWR_29,
    TPC_COARSE_TXPWR_30,
    TPC_COARSE_TXPWR_31,
    NUM_TPC_COARSE_STEPS = TPC_COARSE_TXPWR_31 - TPC_COARSE_TXPWR_0 + 1,
    MIN_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_0,
    MAX_TPC_COARSE_TXPWR = TPC_COARSE_TXPWR_31
}eTxCoarseGain;                                 //refers to the external RF power adjustment

typedef enum
{
    TPC_FINE_TXPWR_0,
    TPC_FINE_TXPWR_1,
    TPC_FINE_TXPWR_2,
    TPC_FINE_TXPWR_3,
    TPC_FINE_TXPWR_4,
    TPC_FINE_TXPWR_5,
    TPC_FINE_TXPWR_6,
    TPC_FINE_TXPWR_7,
    TPC_FINE_TXPWR_8,
    TPC_FINE_TXPWR_9,
    TPC_FINE_TXPWR_10,
    TPC_FINE_TXPWR_11,
    TPC_FINE_TXPWR_12,
    TPC_FINE_TXPWR_13,
    TPC_FINE_TXPWR_14,
    TPC_FINE_TXPWR_15,
    MIN_TPC_FINE_TXPWR = TPC_FINE_TXPWR_0,
    MAX_TPC_FINE_TXPWR = TPC_FINE_TXPWR_15
}eTxFineGain;                                  //refers to the internal TxFIR power adjustment

typedef PACKED_PRE struct PACKED_POST {
    eTxCoarseGain coarsePwr;
    eTxFineGain finePwr;
}tTxGain;

//for 30second periodic interrupt, do this every 5 minutes
#define HAL_PHY_PERIODIC_CAL_ITER_LIMIT       10

typedef enum
{
    //these show which rx and tx chains are enabled, other chains are disable accordingly
    //Production modes
    PHY_CHAIN_SEL_R0_T0_ON,

    PHY_CHAIN_SEL_BT_R0_T0_ON,      //simultaneous bluetooth receive enabled


    //test modes
    PHY_CHAIN_SEL_R0_ON,
    PHY_CHAIN_SEL_T0_ON,
    PHY_CHAIN_SEL_NO_RX_TX,

    MAX_PHY_CHAIN_SEL,
    INVALID_PHY_CHAIN_SEL,
    PHY_MAX_CHAIN_SELECT = 0x7FFFFFFF  /* define as 4 bytes data */
}ePhyChainSelect;

typedef enum
{
#ifdef CHANNEL_BONDED_CAPABLE

    PHY_CCA_40MHZ_SOURCE = 0,
#endif

    PHY_CCA_20MHZ_SOURCE = 1
}ePhyCCASource;

typedef enum
{
    PHY_CCA_FORCED_ON = 0,
    PHY_CCA_ED = 1,
    PHY_CCA_CD = 2,
    PHY_CCA_CD_AND_CS = 3,
    PHY_CCA_ED_AND_CD = 4,
    PHY_CCA_ED_OR_CD = 5,
    PHY_CCA_ED_AND_CD_AND_CS = 6,
    PHY_CCA_ED_OR_CD_AND_CS = 7,
    PHY_CCA_SEC_ED40_AND_NOR_PKTDET40_PKTDET20 = 8,
    PHY_CCA_SEC_BUSY = 9
}ePhyCCAMode;

typedef enum
{
    PHY_RX_DISABLE_NONE             = 0,
    PHY_RX_DISABLE_11AG             = 0x00000001,          
    PHY_RX_DISABLE_11B              = 0x00000002,          
    PHY_RX_DISABLE_11N40            = 0x00000004,          
    PHY_RX_DISABLE_11AC80           = 0x00000008,          

    PHY_RX_DISABLE_11ABG            = (PHY_RX_DISABLE_11AG | PHY_RX_DISABLE_11B),
    PHY_RX_DISABLE_ALL_TYPES        = (PHY_RX_DISABLE_11B | PHY_RX_DISABLE_11AG | 
                                       PHY_RX_DISABLE_11N40 | PHY_RX_DISABLE_11AC80),
}ePhyRxDisabledPktTypes;


// Enum for network density setting.
typedef enum
{
    PHY_NW_DENSITY_LOW = 0,
    PHY_NW_DENSITY_MED,
    PHY_NW_DENSITY_HIGH,
    PHY_NW_DENSITY_ADAPTIVE
} ePhyNwDensity;


typedef enum
{
    ALL_CALS,           //RxDco 1st, TxLO 2nd
    RX_DCO_CAL_ONLY,
    RX_IM2_CAL_ONLY,
    RX_DCO_IM2_CAL,
    TX_LO_CAL_ONLY,
    RX_IQ_CAL_ONLY,
    TX_IQ_CAL_ONLY,
    HKDAC_TX_IQ_CAL_ONLY,
    NO_CALS = 0xFF
}eCalSelection;


//supports testing of closed-loop power control
typedef enum
{
    FORCE_CLOSED_LOOP_GAIN     = 0,  //phyDbg pkt gen only uses gain index 0 when we are taking measurements with the closed-loop gain
    FORCE_POWER_TEMPLATE_INDEX = 1,  //only use forced power template index
    FIXED_POWER_DBM            = 2,  //only use to specify fixed power, ignoring rate/channel/reg limits
    REGULATORY_POWER_LIMITS    = 3,  //use production power Lut settings limited by power limit table per channel
    RATE_POWER_NON_LIMITED     = 4,   //use power specified per rate and channel group, but don't limit power by channel
    POWER_INDX_SRC_MAX_VAL     = 0x7FFFFFFF, //dummy val to set enum to 4 bytes
}ePowerTempIndexSource;

#define BIT_0   0x00000001
#define BIT_1   0x00000002
#define BIT_2   0x00000004
#define BIT_3   0x00000008
#define BIT_4   0x00000010
#define BIT_5   0x00000020
#define BIT_6   0x00000040
#define BIT_7   0x00000080
#define BIT_8   0x00000100
#define BIT_9   0x00000200
#define BIT_10  0x00000400  
#define BIT_11  0x00000800
#define BIT_12  0x00001000
#define BIT_13  0x00002000
#define BIT_14  0x00004000
#define BIT_15  0x00008000
#define BIT_16  0x00010000
#define BIT_17  0x00020000
#define BIT_18  0x00040000
#define BIT_19  0x00080000
#define BIT_20  0x00100000
#define BIT_21  0x00200000
#define BIT_22  0x00400000
#define BIT_23  0x00800000
#define BIT_24  0x01000000
#define BIT_25  0x02000000
#define BIT_26  0x04000000
#define BIT_27  0x08000000
#define BIT_28  0x10000000
#define BIT_29  0x20000000
#define BIT_30  0x40000000
#define BIT_31  0x80000000

#define WFM_CLK_80  BIT_3
#define WFM_START   BIT_0
#define WFM_STOP    BIT_1

#define WFM_MEM_I_DATA_MASK         (0x7FF)
#define WFM_MEM_Q_DATA_OFFSET       (0xB)
#define WFM_MEM_Q_DATA_MASK         (0x3FF800)

typedef enum
{
    WAVE_SINGLE_SHOT = 0,
    WAVE_CONTINUOUS = BIT_2
}eWaveMode;

typedef enum
{
    RATE_240 = 0,
    RATE_160 = 1,
    RATE_120 = 2,
    RATE_80 = 3,
    RATE_40 = 4,
    RATE_20 = 5,
}eWaveRate;

#define MAX_TONE_AMPLITUDE  (2^11)  // peak to peak

#define MAX_TEST_WAVEFORM_SAMPLES    500

#define NUM_RX_IMB_CAL_TONES    4

#define CAL_WFM_TX_TONE_8_START_IDX         0
#define CAL_WFM_TX_TONE_8_STOP_IDX          255
#define CAL_WFM_TX_TONE_MINUS_8_START_IDX   256
#define CAL_WFM_TX_TONE_MINUS_8_STOP_IDX    511
#define CAL_WFM_RX_TONE_START_IDX           512
#define CAL_WFM_RX_TONE_STOP_IDX            767

#define B_RATE_CAL_ADJUSTMENT               -150
#define GN_RATE_BANDEDGE_ADJUSTMENT         -100

#define TPC_INDEX_WIFI_DIRECT   0
#define TPC_INDEX_LOW_POWER     1
#define MIN_TPC_GAIN_INDEX                      0   //Index 0 used for Wifi Direct
#define TPC_GAIN_LUT_PWR_SLOPE                  2
#define MAX_TPC_GAIN_LUT_DBM    (22)
#define MIN_TPC_GAIN_LUT_DBM    (6)

#define MAX_TPC_GAIN_LUT_DBM_2DEC_PLACES    (MAX_TPC_GAIN_LUT_DBM * 100)
#define MIN_TPC_GAIN_LUT_DBM_2DEC_PLACES    (MIN_TPC_GAIN_LUT_DBM * 100)

typedef enum
{
    RF_BANDWIDTH_20MHZ = 20,
    RF_BANDWIDTH_40MHZ = 40,
    RF_BANDWIDTH_80MHZ = 80,
    RF_MIN_BANDWIDTH = RF_BANDWIDTH_20MHZ,
    RF_MAX_BANDWIDTH = RF_BANDWIDTH_80MHZ,
    RF_BANDWIDTH_INVALID = 0x7FFFFFFF
}eRfBandwidth;

#endif /* WLAN_PHY_H */
