mirror of
https://github.com/YikeStone/MT7601u.git
synced 2025-08-02 19:04:09 +05:30
216 lines
5.6 KiB
C
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_
|