xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8189es/hal/phydm/phydm_beamforming.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __INC_BEAMFORMING_H
3 #define __INC_BEAMFORMING_H
4 
5 #ifndef BEAMFORMING_SUPPORT
6 #define	BEAMFORMING_SUPPORT		0
7 #endif
8 
9 /*Beamforming Related*/
10 #include "txbf/halcomtxbf.h"
11 #include "txbf/haltxbfjaguar.h"
12 #include "txbf/haltxbf8192e.h"
13 #include "txbf/haltxbf8814a.h"
14 #include "txbf/haltxbf8821b.h"
15 
16 #if (BEAMFORMING_SUPPORT == 1)
17 
18 #define BEAMFORMEE_ENTRY_NUM		2
19 #define BEAMFORMER_ENTRY_NUM			2
20 #define GET_BEAMFORM_INFO(_pAdapter)	((PRT_BEAMFORMING_INFO)(&(((HAL_DATA_TYPE *)((_pAdapter)->HalData))->DM_OutSrc.BeamformingInfo)))
21 
22 typedef enum _BEAMFORMING_ENTRY_STATE
23 {
24 	BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
25 	BEAMFORMING_ENTRY_STATE_INITIALIZEING,
26 	BEAMFORMING_ENTRY_STATE_INITIALIZED,
27 	BEAMFORMING_ENTRY_STATE_PROGRESSING,
28 	BEAMFORMING_ENTRY_STATE_PROGRESSED,
29 }BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
30 
31 
32 typedef enum _BEAMFORMING_STATE
33 {
34 	BEAMFORMING_STATE_END,
35 	BEAMFORMING_STATE_START_1BFee,
36 	BEAMFORMING_STATE_START_2BFee
37 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;
38 
39 typedef enum _BEAMFORMING_NOTIFY_STATE
40 {
41 	BEAMFORMING_NOTIFY_NONE,
42 	BEAMFORMING_NOTIFY_ADD,
43 	BEAMFORMING_NOTIFY_DELETE,
44 	BEAMFORMING_NOTIFY_RESET
45 } BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;
46 
47 typedef enum _BEAMFORMING_CAP
48 {
49 	BEAMFORMING_CAP_NONE = 0x0,
50 	BEAMFORMER_CAP_HT_EXPLICIT = 0x1,
51 	BEAMFORMEE_CAP_HT_EXPLICIT = 0x2,
52 	BEAMFORMER_CAP_VHT_SU = 0x4,			// Self has er Cap, because Reg er  & peer ee
53 	BEAMFORMEE_CAP_VHT_SU = 0x8, 			// Self has ee Cap, because Reg ee & peer er
54 	BEAMFORMER_CAP = 0x10,
55 	BEAMFORMEE_CAP = 0x20,
56 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;
57 
58 
59 typedef enum _SOUNDING_MODE
60 {
61 	SOUNDING_SW_VHT_TIMER = 0x0,
62 	SOUNDING_SW_HT_TIMER = 0x1,
63 	SOUNDING_STOP_All_TIMER = 0x2,
64 	SOUNDING_HW_VHT_TIMER = 0x3,
65 	SOUNDING_HW_HT_TIMER = 0x4,
66 	SOUNDING_STOP_OID_TIMER = 0x5,
67 	SOUNDING_AUTO_VHT_TIMER = 0x6,
68 	SOUNDING_AUTO_HT_TIMER = 0x7,
69 	SOUNDING_FW_VHT_TIMER = 0x8,
70 	SOUNDING_FW_HT_TIMER = 0x9,
71 }SOUNDING_MODE, *PSOUNDING_MODE;
72 
73 
74 typedef struct _RT_BEAMFORMING_ENTRY {
75 	BOOLEAN bUsed;
76 	BOOLEAN	bTxBF;
77 	BOOLEAN bSound;
78 	u2Byte	AID;				// Used to construct AID field of NDPA packet.
79 	u2Byte	MacId;				// Used to Set Reg42C in IBSS mode.
80 	u2Byte	P_AID;				// Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC.
81 	u1Byte	MacAddr[6];			// Used to fill Reg6E4 to fill Mac address of CSI report frame.
82 	CHANNEL_WIDTH			SoundBW;	// Sounding BandWidth
83 	u2Byte					SoundPeriod;
84 	BEAMFORMING_CAP			BeamformEntryCap;
85 	BEAMFORMING_ENTRY_STATE	BeamformEntryState;
86 	BOOLEAN						bBeamformingInProgress;
87 //	u1Byte	LogSeq;									// Move to _RT_BEAMFORMER_ENTRY
88 //	u2Byte	LogRetryCnt:3; 		// 0~4				// Move to _RT_BEAMFORMER_ENTRY
89 //	u2Byte	LogSuccessCnt:2;		// 0~2				// Move to _RT_BEAMFORMER_ENTRY
90 	u2Byte	LogStatusFailCnt:5;	// 0~21
91 	u2Byte	DefaultCSICnt:5;		// 0~21
92 	u1Byte	CSIMatrix[327];
93 	u2Byte	CSIMatrixLen;
94 	u1Byte	NumofSoundingDim;
95 	u1Byte	CompSteeringNumofBFer;
96 } RT_BEAMFORMING_ENTRY, *PRT_BEAMFORMING_ENTRY;
97 
98 typedef struct _RT_BEAMFORMER_ENTRY {
99 	BOOLEAN 			bUsed;
100 	// P_AID of BFer entry is probably not used
101 	u2Byte				P_AID;				// Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC.
102 	u1Byte				MacAddr[6];
103 	BEAMFORMING_CAP		BeamformEntryCap;
104 	u1Byte				NumofSoundingDim;
105     u1Byte              PreLogSeq;                      // Modified by Jeffery @2015-03-30
106 	u1Byte				LogSeq;							// Modified by Jeffery @2014-10-29
107 	u2Byte				LogRetryCnt:3; 		// 0~4		// Modified by Jeffery @2014-10-29
108 	u2Byte				LogSuccessCnt:2;	// 0~2		// Modified by Jeffery @2014-10-29
109 } RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;
110 
111 typedef struct _RT_SOUNDING_INFO {
112 	u1Byte			SoundIdx;
113 	CHANNEL_WIDTH	SoundBW;
114 	SOUNDING_MODE	SoundMode;
115 	u2Byte			SoundPeriod;
116 } RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;
117 
118 
119 
120 typedef struct _RT_BEAMFORMING_OID_INFO {
121 	u1Byte			SoundOidIdx;
122 	CHANNEL_WIDTH	SoundOidBW;
123 	SOUNDING_MODE	SoundOidMode;
124 	u2Byte			SoundOidPeriod;
125 } RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;
126 
127 
128 typedef struct _RT_BEAMFORMING_INFO {
129 	BEAMFORMING_CAP				BeamformCap;
130 	BEAMFORMING_STATE			BeamformState;
131 	RT_BEAMFORMING_ENTRY		BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];
132 	RT_BEAMFORMER_ENTRY			BeamformerEntry[BEAMFORMER_ENTRY_NUM];
133 	u1Byte						BeamformeeCurIdx;
134 	RT_TIMER					BeamformingTimer;
135 	RT_SOUNDING_INFO			SoundingInfo;
136 	RT_BEAMFORMING_OID_INFO		BeamformingOidInfo;
137 	HAL_TXBF_INFO				TxbfInfo;
138 } RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;
139 
140 
141 typedef struct _RT_NDPA_STA_INFO {
142 	u2Byte	AID:12;
143 	u2Byte	FeedbackType:1;
144 	u2Byte	NcIndex:3;
145 } RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;
146 
147 
148 BEAMFORMING_CAP
149 phydm_Beamforming_GetEntryBeamCapByMacId(
150 	IN	PVOID	pDM_VOID,
151 	IN 	u1Byte 	MacId
152  );
153 
154 
155 VOID
156 Beamforming_GidPAid(
157 	PADAPTER	Adapter,
158 	PRT_TCB		pTcb
159 	);
160 
161 
162 BOOLEAN
163 Beamforming_SendHTNDPAPacket(
164 	IN	PADAPTER		Adapter,
165 	IN	pu1Byte			RA,
166 	IN	CHANNEL_WIDTH	BW,
167 	IN	u1Byte			QIdx
168 	);
169 
170 
171 BOOLEAN
172 Beamforming_SendVHTNDPAPacket(
173 	IN	PADAPTER		Adapter,
174 	IN	pu1Byte			RA,
175 	IN	u2Byte			AID,
176 	IN	CHANNEL_WIDTH	BW,
177 	IN	u1Byte			QIdx
178 	);
179 
180 
181 VOID
182 phydm_Beamforming_Notify(
183 	IN	PVOID	pDM_VOID
184 	);
185 
186 
187 VOID
188 Beamforming_Enter(
189 	PADAPTER		Adapter,
190 	PRT_WLAN_STA	pSTA
191 	);
192 
193 VOID
194 Beamforming_Leave(
195 	PADAPTER		Adapter,
196 	pu1Byte			RA
197 	);
198 
199 BOOLEAN
200 BeamformingStart_FW(
201 	PADAPTER		Adapter,
202 	u1Byte			Idx
203 	);
204 
205 VOID
206 Beamforming_CheckSoundingSuccess(
207 	PADAPTER		Adapter,
208 	BOOLEAN			Status
209 );
210 
211 VOID
212 phydm_Beamforming_End_SW(
213 	IN	PVOID	pDM_VOID,
214 	BOOLEAN			Status
215 	);
216 
217 VOID
218 phydm_Beamforming_End_FW(
219 	IN	PVOID	pDM_VOID
220 	);
221 
222 VOID
223 Beamforming_TimerCallback(
224 	PADAPTER			Adapter
225 	);
226 
227 VOID
228 phydm_Beamforming_Init(
229 	IN	PVOID		pDM_VOID
230 	);
231 
232 
233 
234 BEAMFORMING_CAP
235 phydm_Beamforming_GetBeamCap(
236 	IN	PVOID	pDM_VOID,
237 	IN PRT_BEAMFORMING_INFO 	pBeamInfo
238 	);
239 
240 
241 BOOLEAN
242 BeamformingControl_V1(
243 	PADAPTER		Adapter,
244 	pu1Byte			RA,
245 	u1Byte			AID,
246 	u1Byte			Mode,
247 	CHANNEL_WIDTH	BW,
248 	u1Byte			Rate
249 	);
250 
251 
252 BOOLEAN
253 phydm_BeamformingControl_V2(
254 	IN	PVOID		pDM_VOID,
255 	u1Byte			Idx,
256 	u1Byte			Mode,
257 	CHANNEL_WIDTH	BW,
258 	u2Byte			Period
259 	);
260 
261 
262 BOOLEAN
263 BeamformingControl_V3(
264 	PADAPTER		Adapter,
265 	u1Byte			Threshold,
266 	u2Byte			Period
267 	);
268 
269 VOID
270 phydm_Beamforming_Watchdog(
271 	IN	PVOID		pDM_VOID
272 	);
273 
274 VOID
275 Beamforming_SWTimerCallback(
276 	PRT_TIMER		pTimer
277 	);
278 
279 RT_STATUS
280 Beamforming_GetReportFrame(
281 	IN	PADAPTER		Adapter,
282 	IN	PRT_RFD			pRfd,
283 	IN	POCTET_STRING	pPduOS
284 	);
285 
286 VOID
287 Beamforming_GetNDPAFrame(
288 	IN	PADAPTER		Adapter,
289 	IN	OCTET_STRING	pduOS
290 	);
291 
292 #else
293 #define Beamforming_GidPAid(Adapter, pTcb)
294 #define Beamforming_Enter(Adapter, pSTA)
295 #define Beamforming_Leave(Adapter, RA)
296 #define Beamforming_End_FW(Adapter)
297 #define BeamformingControl_V1(Adapter, RA, AID, Mode, BW, Rate)		TRUE
298 #define BeamformingControl_V2(Adapter, Idx, Mode, BW, Period)		TRUE
299 #define phydm_Beamforming_End_SW(_pDM_VOID, _Status)
300 #define Beamforming_TimerCallback(Adapter)
301 #define phydm_Beamforming_Init(_pDM_VOID)
302 #define phydm_BeamformingControl_V2(_pDM_VOID, _Idx, _Mode, _BW, _Period)	FALSE
303 #define Beamforming_Watchdog(Adapter)
304 #define phydm_Beamforming_Watchdog(_pDM_VOID)
305 #define Beamforming_GetNDPAFrame(_Adapter, _PduOS)
306 #define Beamforming_GetReportFrame(_Adapter, _pRfd, _pPduOS)		RT_STATUS_FAILURE
307 #define Beamforming_GetNDPAFrame(_Adapter, _PduOS)
308 
309 #endif
310 #endif
311