/* SPDX-License-Identifier: GPL-2.0 */
|
#ifndef __INC_BEAMFORMING_H
|
#define __INC_BEAMFORMING_H
|
|
#ifndef BEAMFORMING_SUPPORT
|
#define BEAMFORMING_SUPPORT 0
|
#endif
|
|
/*Beamforming Related*/
|
#include "txbf/halcomtxbf.h"
|
#include "txbf/haltxbfjaguar.h"
|
#include "txbf/haltxbf8192e.h"
|
#include "txbf/haltxbf8814a.h"
|
#include "txbf/haltxbf8821b.h"
|
|
#if (BEAMFORMING_SUPPORT == 1)
|
|
#define BEAMFORMEE_ENTRY_NUM 2
|
#define BEAMFORMER_ENTRY_NUM 2
|
#define GET_BEAMFORM_INFO(_pAdapter) ((PRT_BEAMFORMING_INFO)(&(((HAL_DATA_TYPE *)((_pAdapter)->HalData))->DM_OutSrc.BeamformingInfo)))
|
|
typedef enum _BEAMFORMING_ENTRY_STATE
|
{
|
BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
|
BEAMFORMING_ENTRY_STATE_INITIALIZEING,
|
BEAMFORMING_ENTRY_STATE_INITIALIZED,
|
BEAMFORMING_ENTRY_STATE_PROGRESSING,
|
BEAMFORMING_ENTRY_STATE_PROGRESSED,
|
}BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
|
|
|
typedef enum _BEAMFORMING_STATE
|
{
|
BEAMFORMING_STATE_END,
|
BEAMFORMING_STATE_START_1BFee,
|
BEAMFORMING_STATE_START_2BFee
|
}BEAMFORMING_STATE, *PBEAMFORMING_STATE;
|
|
typedef enum _BEAMFORMING_NOTIFY_STATE
|
{
|
BEAMFORMING_NOTIFY_NONE,
|
BEAMFORMING_NOTIFY_ADD,
|
BEAMFORMING_NOTIFY_DELETE,
|
BEAMFORMING_NOTIFY_RESET
|
} BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;
|
|
typedef enum _BEAMFORMING_CAP
|
{
|
BEAMFORMING_CAP_NONE = 0x0,
|
BEAMFORMER_CAP_HT_EXPLICIT = 0x1,
|
BEAMFORMEE_CAP_HT_EXPLICIT = 0x2,
|
BEAMFORMER_CAP_VHT_SU = 0x4, // Self has er Cap, because Reg er & peer ee
|
BEAMFORMEE_CAP_VHT_SU = 0x8, // Self has ee Cap, because Reg ee & peer er
|
BEAMFORMER_CAP = 0x10,
|
BEAMFORMEE_CAP = 0x20,
|
}BEAMFORMING_CAP, *PBEAMFORMING_CAP;
|
|
|
typedef enum _SOUNDING_MODE
|
{
|
SOUNDING_SW_VHT_TIMER = 0x0,
|
SOUNDING_SW_HT_TIMER = 0x1,
|
SOUNDING_STOP_All_TIMER = 0x2,
|
SOUNDING_HW_VHT_TIMER = 0x3,
|
SOUNDING_HW_HT_TIMER = 0x4,
|
SOUNDING_STOP_OID_TIMER = 0x5,
|
SOUNDING_AUTO_VHT_TIMER = 0x6,
|
SOUNDING_AUTO_HT_TIMER = 0x7,
|
SOUNDING_FW_VHT_TIMER = 0x8,
|
SOUNDING_FW_HT_TIMER = 0x9,
|
}SOUNDING_MODE, *PSOUNDING_MODE;
|
|
|
typedef struct _RT_BEAMFORMING_ENTRY {
|
BOOLEAN bUsed;
|
BOOLEAN bTxBF;
|
BOOLEAN bSound;
|
u2Byte AID; // Used to construct AID field of NDPA packet.
|
u2Byte MacId; // Used to Set Reg42C in IBSS mode.
|
u2Byte P_AID; // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC.
|
u1Byte MacAddr[6]; // Used to fill Reg6E4 to fill Mac address of CSI report frame.
|
CHANNEL_WIDTH SoundBW; // Sounding BandWidth
|
u2Byte SoundPeriod;
|
BEAMFORMING_CAP BeamformEntryCap;
|
BEAMFORMING_ENTRY_STATE BeamformEntryState;
|
BOOLEAN bBeamformingInProgress;
|
// u1Byte LogSeq; // Move to _RT_BEAMFORMER_ENTRY
|
// u2Byte LogRetryCnt:3; // 0~4 // Move to _RT_BEAMFORMER_ENTRY
|
// u2Byte LogSuccessCnt:2; // 0~2 // Move to _RT_BEAMFORMER_ENTRY
|
u2Byte LogStatusFailCnt:5; // 0~21
|
u2Byte DefaultCSICnt:5; // 0~21
|
u1Byte CSIMatrix[327];
|
u2Byte CSIMatrixLen;
|
u1Byte NumofSoundingDim;
|
u1Byte CompSteeringNumofBFer;
|
} RT_BEAMFORMING_ENTRY, *PRT_BEAMFORMING_ENTRY;
|
|
typedef struct _RT_BEAMFORMER_ENTRY {
|
BOOLEAN bUsed;
|
// P_AID of BFer entry is probably not used
|
u2Byte P_AID; // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC.
|
u1Byte MacAddr[6];
|
BEAMFORMING_CAP BeamformEntryCap;
|
u1Byte NumofSoundingDim;
|
u1Byte PreLogSeq; // Modified by Jeffery @2015-03-30
|
u1Byte LogSeq; // Modified by Jeffery @2014-10-29
|
u2Byte LogRetryCnt:3; // 0~4 // Modified by Jeffery @2014-10-29
|
u2Byte LogSuccessCnt:2; // 0~2 // Modified by Jeffery @2014-10-29
|
} RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;
|
|
typedef struct _RT_SOUNDING_INFO {
|
u1Byte SoundIdx;
|
CHANNEL_WIDTH SoundBW;
|
SOUNDING_MODE SoundMode;
|
u2Byte SoundPeriod;
|
} RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;
|
|
|
|
typedef struct _RT_BEAMFORMING_OID_INFO {
|
u1Byte SoundOidIdx;
|
CHANNEL_WIDTH SoundOidBW;
|
SOUNDING_MODE SoundOidMode;
|
u2Byte SoundOidPeriod;
|
} RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;
|
|
|
typedef struct _RT_BEAMFORMING_INFO {
|
BEAMFORMING_CAP BeamformCap;
|
BEAMFORMING_STATE BeamformState;
|
RT_BEAMFORMING_ENTRY BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];
|
RT_BEAMFORMER_ENTRY BeamformerEntry[BEAMFORMER_ENTRY_NUM];
|
u1Byte BeamformeeCurIdx;
|
RT_TIMER BeamformingTimer;
|
RT_SOUNDING_INFO SoundingInfo;
|
RT_BEAMFORMING_OID_INFO BeamformingOidInfo;
|
HAL_TXBF_INFO TxbfInfo;
|
} RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;
|
|
|
typedef struct _RT_NDPA_STA_INFO {
|
u2Byte AID:12;
|
u2Byte FeedbackType:1;
|
u2Byte NcIndex:3;
|
} RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;
|
|
|
BEAMFORMING_CAP
|
phydm_Beamforming_GetEntryBeamCapByMacId(
|
IN PVOID pDM_VOID,
|
IN u1Byte MacId
|
);
|
|
|
VOID
|
Beamforming_GidPAid(
|
PADAPTER Adapter,
|
PRT_TCB pTcb
|
);
|
|
|
BOOLEAN
|
Beamforming_SendHTNDPAPacket(
|
IN PADAPTER Adapter,
|
IN pu1Byte RA,
|
IN CHANNEL_WIDTH BW,
|
IN u1Byte QIdx
|
);
|
|
|
BOOLEAN
|
Beamforming_SendVHTNDPAPacket(
|
IN PADAPTER Adapter,
|
IN pu1Byte RA,
|
IN u2Byte AID,
|
IN CHANNEL_WIDTH BW,
|
IN u1Byte QIdx
|
);
|
|
|
VOID
|
phydm_Beamforming_Notify(
|
IN PVOID pDM_VOID
|
);
|
|
|
VOID
|
Beamforming_Enter(
|
PADAPTER Adapter,
|
PRT_WLAN_STA pSTA
|
);
|
|
VOID
|
Beamforming_Leave(
|
PADAPTER Adapter,
|
pu1Byte RA
|
);
|
|
BOOLEAN
|
BeamformingStart_FW(
|
PADAPTER Adapter,
|
u1Byte Idx
|
);
|
|
VOID
|
Beamforming_CheckSoundingSuccess(
|
PADAPTER Adapter,
|
BOOLEAN Status
|
);
|
|
VOID
|
phydm_Beamforming_End_SW(
|
IN PVOID pDM_VOID,
|
BOOLEAN Status
|
);
|
|
VOID
|
phydm_Beamforming_End_FW(
|
IN PVOID pDM_VOID
|
);
|
|
VOID
|
Beamforming_TimerCallback(
|
PADAPTER Adapter
|
);
|
|
VOID
|
phydm_Beamforming_Init(
|
IN PVOID pDM_VOID
|
);
|
|
|
|
BEAMFORMING_CAP
|
phydm_Beamforming_GetBeamCap(
|
IN PVOID pDM_VOID,
|
IN PRT_BEAMFORMING_INFO pBeamInfo
|
);
|
|
|
BOOLEAN
|
BeamformingControl_V1(
|
PADAPTER Adapter,
|
pu1Byte RA,
|
u1Byte AID,
|
u1Byte Mode,
|
CHANNEL_WIDTH BW,
|
u1Byte Rate
|
);
|
|
|
BOOLEAN
|
phydm_BeamformingControl_V2(
|
IN PVOID pDM_VOID,
|
u1Byte Idx,
|
u1Byte Mode,
|
CHANNEL_WIDTH BW,
|
u2Byte Period
|
);
|
|
|
BOOLEAN
|
BeamformingControl_V3(
|
PADAPTER Adapter,
|
u1Byte Threshold,
|
u2Byte Period
|
);
|
|
VOID
|
phydm_Beamforming_Watchdog(
|
IN PVOID pDM_VOID
|
);
|
|
VOID
|
Beamforming_SWTimerCallback(
|
PRT_TIMER pTimer
|
);
|
|
RT_STATUS
|
Beamforming_GetReportFrame(
|
IN PADAPTER Adapter,
|
IN PRT_RFD pRfd,
|
IN POCTET_STRING pPduOS
|
);
|
|
VOID
|
Beamforming_GetNDPAFrame(
|
IN PADAPTER Adapter,
|
IN OCTET_STRING pduOS
|
);
|
|
#else
|
#define Beamforming_GidPAid(Adapter, pTcb)
|
#define Beamforming_Enter(Adapter, pSTA)
|
#define Beamforming_Leave(Adapter, RA)
|
#define Beamforming_End_FW(Adapter)
|
#define BeamformingControl_V1(Adapter, RA, AID, Mode, BW, Rate) TRUE
|
#define BeamformingControl_V2(Adapter, Idx, Mode, BW, Period) TRUE
|
#define phydm_Beamforming_End_SW(_pDM_VOID, _Status)
|
#define Beamforming_TimerCallback(Adapter)
|
#define phydm_Beamforming_Init(_pDM_VOID)
|
#define phydm_BeamformingControl_V2(_pDM_VOID, _Idx, _Mode, _BW, _Period) FALSE
|
#define Beamforming_Watchdog(Adapter)
|
#define phydm_Beamforming_Watchdog(_pDM_VOID)
|
#define Beamforming_GetNDPAFrame(_Adapter, _PduOS)
|
#define Beamforming_GetReportFrame(_Adapter, _pRfd, _pPduOS) RT_STATUS_FAILURE
|
#define Beamforming_GetNDPAFrame(_Adapter, _PduOS)
|
|
#endif
|
#endif
|