MT7601u/src/include/rt_txbf.h
Murat Demirtas 612db32659 FIXED
2016-10-30 14:40:00 +00:00

216 lines
5.6 KiB
C

/*
***************************************************************************
* Ralink Tech Inc.
* 4F, No. 2 Technology 5th Rd.
* Science-based Industrial Park
* Hsin-chu, Taiwan, R.O.C.
*
* (c) Copyright 2002-2009, Ralink Technology, Inc.
*
* All rights reserved. Ralink's source code is an unpublished work and the
* use of a copyright notice does not imply otherwise. This source code
* contains confidential trade secret material of Ralink Tech. Any attemp
* or participation in deciphering, decoding, reverse engineering or in any
* way altering the source code is stricitly prohibited, unless the prior
* written consent of Ralink Technology, Inc. is obtained.
***************************************************************************
Module Name:
cmm_txbf.c
Abstract:
Tx Beamforming related constants and data structures
Revision History:
Who When What
-------- ---------- ----------------------------------------------
Shiang 2010/06/29
*/
#ifndef _RT_TXBF_H_
#define _RT_TXBF_H_
#ifdef TXBF_SUPPORT
//#define MRQ_FORCE_TX //Force MRQ regardless the capability of the station
// TxSndgPkt Sounding type definitions
#define SNDG_TYPE_DISABLE 0
#define SNDG_TYPE_SOUNDING 1
#define SNDG_TYPE_NDP 2
// Explicit TxBF feedback mechanism
#define ETXBF_FB_DISABLE 0
#define ETXBF_FB_CSI 1
#define ETXBF_FB_NONCOMP 2
#define ETXBF_FB_COMP 4
//#define MRQ_FORCE_TX //Force MRQ regardless the capability of the station
/*
eTxBfEnCond values:
0:no etxbf,
1:etxbf update periodically,
2:etxbf updated if mcs changes in RateSwitchingAdapt() or APQuickResponeForRateUpExecAdapt().
3:auto-selection: if mfb changes or timer expires, then send sounding packets <------not finished yet!!!
note:
when = 1 or 3, NO_SNDG_CNT_THRD controls the frequency to update the
matrix(ETXBF_EN_COND=1) or activate the whole bf evaluation process(not defined)
*/
// Defines to include optional code.
// NOTE: Do not define these options. ETxBfEnCond==3 and
// MCS Feedback are not fully implemented
//#define ETXBF_EN_COND3_SUPPORT // Include ETxBfEnCond==3 code
//#define MFB_SUPPORT // Include MCS Feedback code
// MCS FB definitions
#define MSI_TOGGLE_BF 6
#define TOGGLE_BF_PKTS 5// the number of packets with inverted BF status
// TXBF State definitions
#define READY_FOR_SNDG0 0//jump to WAIT_SNDG_FB0 when channel change or periodically
#define WAIT_SNDG_FB0 1//jump to WAIT_SNDG_FB1 when bf report0 is received
#define WAIT_SNDG_FB1 2
#define WAIT_MFB 3
#define WAIT_USELESS_RSP 4
#define WAIT_BEST_SNDG 5
#define NO_SNDG_CNT_THRD 0//send sndg packet if there is no sounding for (NO_SNDG_CNT_THRD+1)*500msec. If this =0, bf matrix is updated at each call of APMlmeDynamicTxRateSwitchingAdapt()
// ------------ BEAMFORMING PROFILE HANDLING ------------
#define IMP_MAX_BYTES 14 // Implicit: 14 bytes per subcarrier
#define IMP_MAX_BYTES_ONE_COL 7 // Implicit: 7 bytes per subcarrier, when reading first column
#define EXP_MAX_BYTES 18 // Explicit: 18 bytes per subcarrier
#define IMP_COEFF_SIZE 9 // 9 bits/coeff
#define IMP_COEFF_MASK 0x1FF
#define PROFILE_MAX_CARRIERS_20 56 // Number of subcarriers in 20 MHz mode
#define PROFILE_MAX_CARRIERS_40 114 // Number of subcarriers in 40 MHz mode
// Indices of valid rows in Implicit and Explicit profiles for 20 and 40 MHz
typedef struct {
int lwb1, upb1;
int lwb2, upb2;
} SC_TABLE_ENTRY;
typedef struct {
BOOLEAN impProfile;
BOOLEAN fortyMHz;
int rows, columns;
int grouping;
UCHAR tag[EXP_MAX_BYTES];
UCHAR data[PROFILE_MAX_CARRIERS_40][EXP_MAX_BYTES];
} PROFILE_DATA;
extern PROFILE_DATA profData;
typedef
struct {
UCHAR gBeg[2];
UCHAR gEnd[2];
UCHAR aLowBeg[2];
UCHAR aLowEnd[2];
UCHAR aMidBeg[2];
UCHAR aMidEnd[2];
UCHAR aHighBeg[2];
UCHAR aHighEnd[2];
} ITXBF_PHASE_PARAMS; // ITxBF BBP reg phase calibration parameters
typedef
struct {
UCHAR gBeg[2];
UCHAR gEnd[2];
UCHAR aLowBeg[2];
UCHAR aLowEnd[2];
UCHAR aMidBeg[2];
UCHAR aMidEnd[2];
UCHAR aHighBeg[2];
UCHAR aHighEnd[2];
} ITXBF_LNA_PARAMS; // ITxBF BBP reg LNA calibration parameters
typedef
struct {
UCHAR gBeg[2];
UCHAR gEnd[2];
UCHAR aLow[2];
UCHAR aMid[2];
UCHAR aHigh[2];
} ITXBF_DIV_PARAMS; // ITxBF Divider Calibration parameters
void ITxBFGetEEPROM(
IN RTMP_ADAPTER *pAd,
IN ITXBF_PHASE_PARAMS *phaseParams,
IN ITXBF_LNA_PARAMS *lnaParams,
IN ITXBF_DIV_PARAMS *divParams);
INT ITxBFDividerCalibration(
IN RTMP_ADAPTER *pAd,
IN int calFunction,
IN int calMethod,
OUT UCHAR *divPhase);
VOID ITxBFLoadLNAComp(
IN RTMP_ADAPTER *pAd);
int ITxBFLNACalibration(
IN RTMP_ADAPTER *pAd,
IN int calFunction,
IN int calMethod,
IN BOOLEAN gBand);
void Read_TxBfProfile(
IN RTMP_ADAPTER *pAd,
IN PROFILE_DATA *prof,
IN int profileNum,
IN BOOLEAN implicitProfile);
void Write_TxBfProfile(
IN RTMP_ADAPTER *pAd,
IN PROFILE_DATA *prof,
IN int profileNum);
void Read_TagField(
IN PRTMP_ADAPTER pAd,
IN UCHAR *row,
IN int profileNum);
// Write_TagField - write a profile tagfield
void Write_TagField(
IN RTMP_ADAPTER *pAd,
IN UCHAR *row,
IN int profileNum);
// displayTagfield - display one tagfield
void displayTagfield(
IN RTMP_ADAPTER *pAd,
IN int profileNum,
IN BOOLEAN implicitProfile);
// Unpack an ITxBF matrix element from a row of bytes
int Unpack_IBFValue(
IN UCHAR *row,
IN int elemNum);
int iCalcCalibration(
IN RTMP_ADAPTER *pAd,
IN int calParams[2],
IN int profileNum);
void ITxBFSetEEPROM(
IN RTMP_ADAPTER *pAd,
IN ITXBF_PHASE_PARAMS *phaseParams,
IN ITXBF_LNA_PARAMS *lnaParams,
IN ITXBF_DIV_PARAMS *divParams);
#endif // TXBF_SUPPORT //
#endif // _RT_TXBF_H_