1 #ifndef __INC_BEAMFORMING_H
2 #define __INC_BEAMFORMING_H
4 #ifndef BEAMFORMING_SUPPORT
5 #define BEAMFORMING_SUPPORT 0
8 /*Beamforming Related*/
9 #include "txbf/halcomtxbf.h"
10 #include "txbf/haltxbfjaguar.h"
11 #include "txbf/haltxbf8192e.h"
12 #include "txbf/haltxbf8814a.h"
13 #include "txbf/haltxbf8821b.h"
14 #include "txbf/haltxbf8822b.h"
15 #include "txbf/haltxbfinterface.h"
17 #if (BEAMFORMING_SUPPORT == 1)
19 #define MAX_BEAMFORMEE_SU 2
20 #define MAX_BEAMFORMER_SU 2
21 #if (RTL8822B_SUPPORT == 1)
22 #define MAX_BEAMFORMEE_MU 6
23 #define MAX_BEAMFORMER_MU 1
25 #define MAX_BEAMFORMEE_MU 0
26 #define MAX_BEAMFORMER_MU 0
29 #define BEAMFORMEE_ENTRY_NUM (MAX_BEAMFORMEE_SU + MAX_BEAMFORMEE_MU)
30 #define BEAMFORMER_ENTRY_NUM (MAX_BEAMFORMER_SU + MAX_BEAMFORMER_MU)
32 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
33 /*for different naming between WIN and CE*/
34 #define BEACON_QUEUE BCN_QUEUE_INX
35 #define NORMAL_QUEUE MGT_QUEUE_INX
36 #define RT_DISABLE_FUNC RTW_DISABLE_FUNC
37 #define RT_ENABLE_FUNC RTW_ENABLE_FUNC
40 typedef enum _BEAMFORMING_ENTRY_STATE {
41 BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
42 BEAMFORMING_ENTRY_STATE_INITIALIZEING,
43 BEAMFORMING_ENTRY_STATE_INITIALIZED,
44 BEAMFORMING_ENTRY_STATE_PROGRESSING,
45 BEAMFORMING_ENTRY_STATE_PROGRESSED
46 } BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
49 typedef enum _BEAMFORMING_NOTIFY_STATE {
50 BEAMFORMING_NOTIFY_NONE,
51 BEAMFORMING_NOTIFY_ADD,
52 BEAMFORMING_NOTIFY_DELETE,
53 BEAMFORMEE_NOTIFY_ADD_SU,
54 BEAMFORMEE_NOTIFY_DELETE_SU,
55 BEAMFORMEE_NOTIFY_ADD_MU,
56 BEAMFORMEE_NOTIFY_DELETE_MU,
57 BEAMFORMING_NOTIFY_RESET
58 } BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;
60 typedef enum _BEAMFORMING_CAP {
61 BEAMFORMING_CAP_NONE = 0x0,
62 BEAMFORMER_CAP_HT_EXPLICIT = BIT1,
63 BEAMFORMEE_CAP_HT_EXPLICIT = BIT2,
64 BEAMFORMER_CAP_VHT_SU = BIT5, /* Self has er Cap, because Reg er & peer ee */
65 BEAMFORMEE_CAP_VHT_SU = BIT6, /* Self has ee Cap, because Reg ee & peer er */
66 BEAMFORMER_CAP_VHT_MU = BIT7, /* Self has er Cap, because Reg er & peer ee */
67 BEAMFORMEE_CAP_VHT_MU = BIT8, /* Self has ee Cap, because Reg ee & peer er */
68 BEAMFORMER_CAP = BIT9,
69 BEAMFORMEE_CAP = BIT10,
70 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;
73 typedef enum _SOUNDING_MODE {
74 SOUNDING_SW_VHT_TIMER = 0x0,
75 SOUNDING_SW_HT_TIMER = 0x1,
76 SOUNDING_STOP_All_TIMER = 0x2,
77 SOUNDING_HW_VHT_TIMER = 0x3,
78 SOUNDING_HW_HT_TIMER = 0x4,
79 SOUNDING_STOP_OID_TIMER = 0x5,
80 SOUNDING_AUTO_VHT_TIMER = 0x6,
81 SOUNDING_AUTO_HT_TIMER = 0x7,
82 SOUNDING_FW_VHT_TIMER = 0x8,
83 SOUNDING_FW_HT_TIMER = 0x9,
84 }SOUNDING_MODE, *PSOUNDING_MODE;
86 typedef struct _RT_BEAMFORM_STAINFO {
91 WIRELESS_MODE WirelessMode;
93 BEAMFORMING_CAP BeamformCap;
95 u2Byte VhtBeamformCap;
97 u2Byte CurBeamformVHT;
98 } RT_BEAMFORM_STAINFO, *PRT_BEAMFORM_STAINFO;
101 typedef struct _RT_BEAMFORMEE_ENTRY {
105 u2Byte AID; /*Used to construct AID field of NDPA packet.*/
106 u2Byte MacId; /*Used to Set Reg42C in IBSS mode. */
107 u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
108 u2Byte G_ID; /*Used to fill Tx DESC*/
110 u1Byte MacAddr[6]; /*Used to fill Reg6E4 to fill Mac address of CSI report frame.*/
111 CHANNEL_WIDTH SoundBW; /*Sounding BandWidth*/
113 BEAMFORMING_CAP BeamformEntryCap;
114 BEAMFORMING_ENTRY_STATE BeamformEntryState;
115 BOOLEAN bBeamformingInProgress;
116 /*u1Byte LogSeq; // Move to _RT_BEAMFORMER_ENTRY*/
117 /*u2Byte LogRetryCnt:3; // 0~4 // Move to _RT_BEAMFORMER_ENTRY*/
118 /*u2Byte LogSuccessCnt:2; // 0~2 // Move to _RT_BEAMFORMER_ENTRY*/
119 u2Byte LogStatusFailCnt:5; // 0~21
120 u2Byte DefaultCSICnt:5; // 0~21
121 u1Byte CSIMatrix[327];
123 u1Byte NumofSoundingDim;
124 u1Byte CompSteeringNumofBFer;
130 u1Byte user_position[16];
131 } RT_BEAMFORMEE_ENTRY, *PRT_BEAMFORMEE_ENTRY;
133 typedef struct _RT_BEAMFORMER_ENTRY {
135 /*P_AID of BFer entry is probably not used*/
136 u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
140 BEAMFORMING_CAP BeamformEntryCap;
141 u1Byte NumofSoundingDim;
142 u1Byte ClockResetTimes; /*Modified by Jeffery @2015-04-10*/
143 u1Byte PreLogSeq; /*Modified by Jeffery @2015-03-30*/
144 u1Byte LogSeq; /*Modified by Jeffery @2014-10-29*/
145 u2Byte LogRetryCnt:3; /*Modified by Jeffery @2014-10-29*/
146 u2Byte LogSuccess:2; /*Modified by Jeffery @2014-10-29*/
151 u1Byte user_position[16];
153 } RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;
155 typedef struct _RT_SOUNDING_INFO {
157 CHANNEL_WIDTH SoundBW;
158 SOUNDING_MODE SoundMode;
160 } RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;
164 typedef struct _RT_BEAMFORMING_OID_INFO {
166 CHANNEL_WIDTH SoundOidBW;
167 SOUNDING_MODE SoundOidMode;
168 u2Byte SoundOidPeriod;
169 } RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;
172 typedef struct _RT_BEAMFORMING_INFO {
173 BEAMFORMING_CAP BeamformCap;
174 RT_BEAMFORMEE_ENTRY BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];
175 RT_BEAMFORMER_ENTRY BeamformerEntry[BEAMFORMER_ENTRY_NUM];
176 RT_BEAMFORM_STAINFO BeamformSTAinfo;
177 u1Byte BeamformeeCurIdx;
178 RT_TIMER BeamformingTimer;
180 RT_SOUNDING_INFO SoundingInfo;
181 RT_BEAMFORMING_OID_INFO BeamformingOidInfo;
182 HAL_TXBF_INFO TxbfInfo;
183 u1Byte SoundingSequence;
184 u1Byte beamformee_su_cnt;
185 u1Byte beamformer_su_cnt;
186 u4Byte beamformee_su_reg_maping;
187 u4Byte beamformer_su_reg_maping;
189 u1Byte beamformee_mu_cnt;
190 u1Byte beamformer_mu_cnt;
191 u4Byte beamformee_mu_reg_maping;
193 BOOLEAN is_mu_sounding;
194 u1Byte FirstMUBFeeIndex;
195 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
196 PADAPTER SourceAdapter;
198 /* Control register */
199 u4Byte RegMUTxCtrl; /* For USB/SDIO interfaces aync I/O */
200 } RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;
203 typedef struct _RT_NDPA_STA_INFO {
205 u2Byte FeedbackType:1;
207 } RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;
211 phydm_Beamforming_GetEntryBeamCapByMacId(
217 phydm_Beamforming_GetBFeeEntryByAddr(
224 phydm_Beamforming_GetBFerEntryByAddr(
231 Beamforming_GetHTNDPTxRate(
233 u1Byte CompSteeringNumofBFer
237 Beamforming_GetVHTNDPTxRate(
239 u1Byte CompSteeringNumofBFer
243 phydm_Beamforming_Notify(
267 Beamforming_CheckSoundingSuccess(
273 phydm_Beamforming_End_SW(
279 Beamforming_TimerCallback(
284 phydm_Beamforming_Init(
291 phydm_Beamforming_GetBeamCap(
293 IN PRT_BEAMFORMING_INFO pBeamInfo
298 BeamformingControl_V1(
309 phydm_BeamformingControl_V2(
318 phydm_Beamforming_Watchdog(
323 Beamforming_SWTimerCallback(
324 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
326 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)
327 void *FunctionContext
332 Beamforming_SendHTNDPAPacket(
341 Beamforming_SendVHTNDPAPacket(
350 #define Beamforming_GidPAid(Adapter, pTcb)
351 #define Beamforming_Enter(pDM_Odm, staIdx)
352 #define Beamforming_Leave(pDM_Odm, RA)
353 #define Beamforming_End_FW(pDMOdm)
354 #define BeamformingControl_V1(pDM_Odm, RA, AID, Mode, BW, Rate) TRUE
355 #define BeamformingControl_V2(pDM_Odm, Idx, Mode, BW, Period) TRUE
356 #define phydm_Beamforming_End_SW(pDM_Odm, _Status)
357 #define Beamforming_TimerCallback(pDM_Odm)
358 #define phydm_Beamforming_Init(pDM_Odm)
359 #define phydm_BeamformingControl_V2(pDM_Odm, _Idx, _Mode, _BW, _Period) FALSE
360 #define Beamforming_Watchdog(pDM_Odm)
361 #define phydm_Beamforming_Watchdog(pDM_Odm)