1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\r
5 * This program is free software; you can redistribute it and/or modify it
\r
6 * under the terms of version 2 of the GNU General Public License as
\r
7 * published by the Free Software Foundation.
\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
\r
14 * You should have received a copy of the GNU General Public License along with
\r
15 * this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
\r
19 ******************************************************************************/
\r
20 #ifndef __RTW_BEAMFORMING_H_
\r
21 #define __RTW_BEAMFORMING_H_
\r
23 #define BEAMFORMING_ENTRY_NUM 2
\r
24 #define GET_BEAMFORM_INFO(_pmlmepriv) ((struct beamforming_info *)(&(_pmlmepriv)->beamforming_info))
\r
26 typedef enum _BEAMFORMING_ENTRY_STATE
\r
28 BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
\r
29 BEAMFORMING_ENTRY_STATE_INITIALIZEING,
\r
30 BEAMFORMING_ENTRY_STATE_INITIALIZED,
\r
31 BEAMFORMING_ENTRY_STATE_PROGRESSING,
\r
32 BEAMFORMING_ENTRY_STATE_PROGRESSED,
\r
33 }BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
\r
36 typedef enum _BEAMFORMING_STATE
\r
38 BEAMFORMING_STATE_IDLE,
\r
39 BEAMFORMING_STATE_START,
\r
40 BEAMFORMING_STATE_END,
\r
41 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;
\r
44 typedef enum _BEAMFORMING_CAP
\r
46 BEAMFORMING_CAP_NONE = 0x0,
\r
47 BEAMFORMER_CAP_HT_EXPLICIT = 0x1,
\r
48 BEAMFORMEE_CAP_HT_EXPLICIT = 0x2,
\r
49 BEAMFORMER_CAP_VHT_SU = 0x4, // Self has er Cap, because Reg er & peer ee
\r
50 BEAMFORMEE_CAP_VHT_SU = 0x8, // Self has ee Cap, because Reg ee & peer er
\r
51 BEAMFORMER_CAP = 0x10,
\r
52 BEAMFORMEE_CAP = 0x20,
\r
53 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;
\r
56 typedef enum _SOUNDING_MODE
\r
58 SOUNDING_SW_VHT_TIMER = 0x0,
\r
59 SOUNDING_SW_HT_TIMER = 0x1,
\r
60 SOUNDING_STOP_All_TIMER = 0x2,
\r
61 SOUNDING_HW_VHT_TIMER = 0x3,
\r
62 SOUNDING_HW_HT_TIMER = 0x4,
\r
63 SOUNDING_STOP_OID_TIMER = 0x5,
\r
64 SOUNDING_AUTO_VHT_TIMER = 0x6,
\r
65 SOUNDING_AUTO_HT_TIMER = 0x7,
\r
66 SOUNDING_FW_VHT_TIMER = 0x8,
\r
67 SOUNDING_FW_HT_TIMER = 0x9,
\r
68 }SOUNDING_MODE, *PSOUNDING_MODE;
\r
71 enum BEAMFORMING_CTRL_TYPE
\r
73 BEAMFORMING_CTRL_ENTER = 0,
\r
74 BEAMFORMING_CTRL_LEAVE = 1,
\r
75 BEAMFORMING_CTRL_START_PERIOD = 2,
\r
76 BEAMFORMING_CTRL_END_PERIOD = 3,
\r
77 BEAMFORMING_CTRL_SOUNDING_FAIL=4,
\r
78 BEAMFORMING_CTRL_SOUNDING_CLK=5,
\r
81 struct beamforming_entry {
\r
84 u16 aid; // Used to construct AID field of NDPA packet.
\r
85 u16 mac_id; // Used to Set Reg42C in IBSS mode.
\r
86 u16 p_aid; // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC.
\r
87 u8 mac_addr[6];// Used to fill Reg6E4 to fill Mac address of CSI report frame.
\r
88 CHANNEL_WIDTH sound_bw; // Sounding BandWidth
\r
90 BEAMFORMING_CAP beamforming_entry_cap;
\r
91 BEAMFORMING_ENTRY_STATE beamforming_entry_state;
\r
95 u8 LogStatusFailCnt;
\r
96 u8 PreCsiReport[327];
\r
98 BOOLEAN bDefaultCSI;
\r
101 struct sounding_info {
\r
103 CHANNEL_WIDTH sound_bw;
\r
104 SOUNDING_MODE sound_mode;
\r
108 struct beamforming_info {
\r
109 BEAMFORMING_CAP beamforming_cap;
\r
110 BEAMFORMING_STATE beamforming_state;
\r
111 struct beamforming_entry beamforming_entry[BEAMFORMING_ENTRY_NUM];
\r
112 u8 beamforming_cur_idx;
\r
113 u8 beamforming_in_progress;
\r
114 u8 sounding_sequence;
\r
115 struct sounding_info sounding_info;
\r
118 struct rtw_ndpa_sta_info {
\r
120 u16 feedback_type:1;
\r
124 BEAMFORMING_CAP beamforming_get_entry_beam_cap_by_mac_id(PVOID pmlmepriv ,u8 mac_id);
\r
125 void beamforming_notify(PADAPTER adapter);
\r
126 BEAMFORMING_CAP beamforming_get_beamform_cap(struct beamforming_info *pBeamInfo);
\r
128 u32 beamforming_get_report_frame(PADAPTER Adapter, union recv_frame *precv_frame);
\r
129 void beamforming_get_ndpa_frame(PADAPTER Adapter, union recv_frame *precv_frame);
\r
131 BOOLEAN beamforming_send_ht_ndpa_packet(PADAPTER Adapter, u8 *ra, CHANNEL_WIDTH bw, u8 qidx);
\r
132 BOOLEAN beamforming_send_vht_ndpa_packet(PADAPTER Adapter, u8 *ra, u16 aid, CHANNEL_WIDTH bw, u8 qidx);
\r
134 void beamforming_check_sounding_success(PADAPTER Adapter,BOOLEAN status);
\r
136 void beamforming_watchdog(PADAPTER Adapter);
\r
138 void beamforming_wk_hdl(_adapter *padapter, u8 type, u8 *pbuf);
\r
139 u8 beamforming_wk_cmd(_adapter*padapter, s32 type, u8 *pbuf, s32 size, u8 enqueue);
\r