1 #ifndef __INC_PHYDM_BEAMFORMING_H
\r
2 #define __INC_PHYDM_BEAMFORMING_H
\r
4 #ifndef BEAMFORMING_SUPPORT
\r
5 #define BEAMFORMING_SUPPORT 0
\r
8 /*Beamforming Related*/
\r
9 #include "txbf/halcomtxbf.h"
\r
10 #include "txbf/haltxbfjaguar.h"
\r
11 #include "txbf/haltxbf8192e.h"
\r
12 #include "txbf/haltxbf8814a.h"
\r
13 #include "txbf/haltxbf8822b.h"
\r
14 #include "txbf/haltxbfinterface.h"
\r
16 #if (BEAMFORMING_SUPPORT == 1)
\r
18 #define MAX_BEAMFORMEE_SU 2
\r
19 #define MAX_BEAMFORMER_SU 2
\r
20 #if (RTL8822B_SUPPORT == 1)
\r
21 #define MAX_BEAMFORMEE_MU 6
\r
22 #define MAX_BEAMFORMER_MU 1
\r
24 #define MAX_BEAMFORMEE_MU 0
\r
25 #define MAX_BEAMFORMER_MU 0
\r
28 #define BEAMFORMEE_ENTRY_NUM (MAX_BEAMFORMEE_SU + MAX_BEAMFORMEE_MU)
\r
29 #define BEAMFORMER_ENTRY_NUM (MAX_BEAMFORMER_SU + MAX_BEAMFORMER_MU)
\r
31 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
\r
32 /*for different naming between WIN and CE*/
\r
33 #define BEACON_QUEUE BCN_QUEUE_INX
\r
34 #define NORMAL_QUEUE MGT_QUEUE_INX
\r
35 #define RT_DISABLE_FUNC RTW_DISABLE_FUNC
\r
36 #define RT_ENABLE_FUNC RTW_ENABLE_FUNC
\r
39 typedef enum _BEAMFORMING_ENTRY_STATE {
\r
40 BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
\r
41 BEAMFORMING_ENTRY_STATE_INITIALIZEING,
\r
42 BEAMFORMING_ENTRY_STATE_INITIALIZED,
\r
43 BEAMFORMING_ENTRY_STATE_PROGRESSING,
\r
44 BEAMFORMING_ENTRY_STATE_PROGRESSED
\r
45 } BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
\r
48 typedef enum _BEAMFORMING_NOTIFY_STATE {
\r
49 BEAMFORMING_NOTIFY_NONE,
\r
50 BEAMFORMING_NOTIFY_ADD,
\r
51 BEAMFORMING_NOTIFY_DELETE,
\r
52 BEAMFORMEE_NOTIFY_ADD_SU,
\r
53 BEAMFORMEE_NOTIFY_DELETE_SU,
\r
54 BEAMFORMEE_NOTIFY_ADD_MU,
\r
55 BEAMFORMEE_NOTIFY_DELETE_MU,
\r
56 BEAMFORMING_NOTIFY_RESET
\r
57 } BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;
\r
59 typedef enum _BEAMFORMING_CAP {
\r
60 BEAMFORMING_CAP_NONE = 0x0,
\r
61 BEAMFORMER_CAP_HT_EXPLICIT = BIT1,
\r
62 BEAMFORMEE_CAP_HT_EXPLICIT = BIT2,
\r
63 BEAMFORMER_CAP_VHT_SU = BIT5, /* Self has er Cap, because Reg er & peer ee */
\r
64 BEAMFORMEE_CAP_VHT_SU = BIT6, /* Self has ee Cap, because Reg ee & peer er */
\r
65 BEAMFORMER_CAP_VHT_MU = BIT7, /* Self has er Cap, because Reg er & peer ee */
\r
66 BEAMFORMEE_CAP_VHT_MU = BIT8, /* Self has ee Cap, because Reg ee & peer er */
\r
67 BEAMFORMER_CAP = BIT9,
\r
68 BEAMFORMEE_CAP = BIT10,
\r
69 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;
\r
72 typedef enum _SOUNDING_MODE {
\r
73 SOUNDING_SW_VHT_TIMER = 0x0,
\r
74 SOUNDING_SW_HT_TIMER = 0x1,
\r
75 SOUNDING_STOP_All_TIMER = 0x2,
\r
76 SOUNDING_HW_VHT_TIMER = 0x3,
\r
77 SOUNDING_HW_HT_TIMER = 0x4,
\r
78 SOUNDING_STOP_OID_TIMER = 0x5,
\r
79 SOUNDING_AUTO_VHT_TIMER = 0x6,
\r
80 SOUNDING_AUTO_HT_TIMER = 0x7,
\r
81 SOUNDING_FW_VHT_TIMER = 0x8,
\r
82 SOUNDING_FW_HT_TIMER = 0x9,
\r
83 }SOUNDING_MODE, *PSOUNDING_MODE;
\r
85 typedef struct _RT_BEAMFORM_STAINFO {
\r
89 u1Byte MyMacAddr[6];
\r
90 WIRELESS_MODE WirelessMode;
\r
92 BEAMFORMING_CAP BeamformCap;
\r
93 u1Byte HtBeamformCap;
\r
94 u2Byte VhtBeamformCap;
\r
95 u1Byte CurBeamform;
\r
96 u2Byte CurBeamformVHT;
\r
97 } RT_BEAMFORM_STAINFO, *PRT_BEAMFORM_STAINFO;
\r
100 typedef struct _RT_BEAMFORMEE_ENTRY {
\r
104 u2Byte AID; /*Used to construct AID field of NDPA packet.*/
\r
105 u2Byte MacId; /*Used to Set Reg42C in IBSS mode. */
\r
106 u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
\r
107 u2Byte G_ID; /*Used to fill Tx DESC*/
\r
108 u1Byte MyMacAddr[6];
\r
109 u1Byte MacAddr[6]; /*Used to fill Reg6E4 to fill Mac address of CSI report frame.*/
\r
110 CHANNEL_WIDTH SoundBW; /*Sounding BandWidth*/
\r
111 u2Byte SoundPeriod;
\r
112 BEAMFORMING_CAP BeamformEntryCap;
\r
113 BEAMFORMING_ENTRY_STATE BeamformEntryState;
\r
114 BOOLEAN bBeamformingInProgress;
\r
115 /*u1Byte LogSeq; // Move to _RT_BEAMFORMER_ENTRY*/
\r
116 /*u2Byte LogRetryCnt:3; // 0~4 // Move to _RT_BEAMFORMER_ENTRY*/
\r
117 /*u2Byte LogSuccessCnt:2; // 0~2 // Move to _RT_BEAMFORMER_ENTRY*/
\r
118 u2Byte LogStatusFailCnt:5; // 0~21
\r
119 u2Byte DefaultCSICnt:5; // 0~21
\r
120 u1Byte CSIMatrix[327];
\r
121 u2Byte CSIMatrixLen;
\r
122 u1Byte NumofSoundingDim;
\r
123 u1Byte CompSteeringNumofBFer;
\r
124 u1Byte su_reg_index;
\r
127 u1Byte mu_reg_index;
\r
128 u1Byte gid_valid[8];
\r
129 u1Byte user_position[16];
\r
130 } RT_BEAMFORMEE_ENTRY, *PRT_BEAMFORMEE_ENTRY;
\r
132 typedef struct _RT_BEAMFORMER_ENTRY {
\r
134 /*P_AID of BFer entry is probably not used*/
\r
135 u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
\r
137 u1Byte MyMacAddr[6];
\r
139 BEAMFORMING_CAP BeamformEntryCap;
\r
140 u1Byte NumofSoundingDim;
\r
141 u1Byte ClockResetTimes; /*Modified by Jeffery @2015-04-10*/
\r
142 u1Byte PreLogSeq; /*Modified by Jeffery @2015-03-30*/
\r
143 u1Byte LogSeq; /*Modified by Jeffery @2014-10-29*/
\r
144 u2Byte LogRetryCnt:3; /*Modified by Jeffery @2014-10-29*/
\r
145 u2Byte LogSuccess:2; /*Modified by Jeffery @2014-10-29*/
\r
146 u1Byte su_reg_index;
\r
149 u1Byte gid_valid[8];
\r
150 u1Byte user_position[16];
\r
152 } RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;
\r
154 typedef struct _RT_SOUNDING_INFO {
\r
156 CHANNEL_WIDTH SoundBW;
\r
157 SOUNDING_MODE SoundMode;
\r
158 u2Byte SoundPeriod;
\r
159 } RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;
\r
163 typedef struct _RT_BEAMFORMING_OID_INFO {
\r
164 u1Byte SoundOidIdx;
\r
165 CHANNEL_WIDTH SoundOidBW;
\r
166 SOUNDING_MODE SoundOidMode;
\r
167 u2Byte SoundOidPeriod;
\r
168 } RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;
\r
171 typedef struct _RT_BEAMFORMING_INFO {
\r
172 BEAMFORMING_CAP BeamformCap;
\r
173 RT_BEAMFORMEE_ENTRY BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];
\r
174 RT_BEAMFORMER_ENTRY BeamformerEntry[BEAMFORMER_ENTRY_NUM];
\r
175 RT_BEAMFORM_STAINFO BeamformSTAinfo;
\r
176 u1Byte BeamformeeCurIdx;
\r
177 RT_TIMER BeamformingTimer;
\r
179 RT_SOUNDING_INFO SoundingInfo;
\r
180 RT_BEAMFORMING_OID_INFO BeamformingOidInfo;
\r
181 HAL_TXBF_INFO TxbfInfo;
\r
182 u1Byte SoundingSequence;
\r
183 u1Byte beamformee_su_cnt;
\r
184 u1Byte beamformer_su_cnt;
\r
185 u4Byte beamformee_su_reg_maping;
\r
186 u4Byte beamformer_su_reg_maping;
\r
188 u1Byte beamformee_mu_cnt;
\r
189 u1Byte beamformer_mu_cnt;
\r
190 u4Byte beamformee_mu_reg_maping;
\r
191 u1Byte mu_ap_index;
\r
192 BOOLEAN is_mu_sounding;
\r
193 u1Byte FirstMUBFeeIndex;
\r
194 BOOLEAN is_mu_sounding_in_progress;
\r
195 BOOLEAN dbg_disable_mu_tx;
\r
196 BOOLEAN applyVmatrix;
\r
198 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
199 PADAPTER SourceAdapter;
\r
201 /* Control register */
\r
202 u4Byte RegMUTxCtrl; /* For USB/SDIO interfaces aync I/O */
\r
203 } RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;
\r
206 typedef struct _RT_NDPA_STA_INFO {
\r
208 u2Byte FeedbackType:1;
\r
210 } RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;
\r
212 typedef enum _PHYDM_ACTING_TYPE {
\r
213 PhyDM_ACTING_AS_IBSS = 0,
\r
214 PhyDM_ACTING_AS_AP = 1
\r
215 } PHYDM_ACTING_TYPE;
\r
219 phydm_Beamforming_GetEntryBeamCapByMacId(
\r
224 PRT_BEAMFORMEE_ENTRY
\r
225 phydm_Beamforming_GetBFeeEntryByAddr(
\r
231 PRT_BEAMFORMER_ENTRY
\r
232 phydm_Beamforming_GetBFerEntryByAddr(
\r
239 phydm_Beamforming_Notify(
\r
244 phydm_actingDetermine(
\r
246 IN PHYDM_ACTING_TYPE type
\r
262 BeamformingStart_FW(
\r
268 Beamforming_CheckSoundingSuccess(
\r
274 phydm_Beamforming_End_SW(
\r
280 Beamforming_TimerCallback(
\r
285 phydm_Beamforming_Init(
\r
292 phydm_Beamforming_GetBeamCap(
\r
294 IN PRT_BEAMFORMING_INFO pBeamInfo
\r
299 BeamformingControl_V1(
\r
310 phydm_BeamformingControl_V2(
\r
319 phydm_Beamforming_Watchdog(
\r
324 Beamforming_SWTimerCallback(
\r
325 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
327 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)
\r
328 void *FunctionContext
\r
333 Beamforming_SendHTNDPAPacket(
\r
336 IN CHANNEL_WIDTH BW,
\r
342 Beamforming_SendVHTNDPAPacket(
\r
346 IN CHANNEL_WIDTH BW,
\r
351 #define Beamforming_GidPAid(Adapter, pTcb)
\r
352 #define phydm_actingDetermine(pDM_Odm, type) FALSE
\r
353 #define Beamforming_Enter(pDM_Odm, staIdx)
\r
354 #define Beamforming_Leave(pDM_Odm, RA)
\r
355 #define Beamforming_End_FW(pDMOdm)
\r
356 #define BeamformingControl_V1(pDM_Odm, RA, AID, Mode, BW, Rate) TRUE
\r
357 #define BeamformingControl_V2(pDM_Odm, Idx, Mode, BW, Period) TRUE
\r
358 #define phydm_Beamforming_End_SW(pDM_Odm, _Status)
\r
359 #define Beamforming_TimerCallback(pDM_Odm)
\r
360 #define phydm_Beamforming_Init(pDM_Odm)
\r
361 #define phydm_BeamformingControl_V2(pDM_Odm, _Idx, _Mode, _BW, _Period) FALSE
\r
362 #define Beamforming_Watchdog(pDM_Odm)
\r
363 #define phydm_Beamforming_Watchdog(pDM_Odm)
\r