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