69d781931ea6860715226dd5dba5e32d67920264
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / include / rtw_beamforming.h
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *                                        \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
8  *\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
12  * more details.\r
13  *\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
17  *\r
18  *\r
19  ******************************************************************************/\r
20 #ifndef __RTW_BEAMFORMING_H_\r
21 #define __RTW_BEAMFORMING_H_\r
22 \r
23 #define BEAMFORMING_ENTRY_NUM           2\r
24 #define GET_BEAMFORM_INFO(_pmlmepriv)   ((struct beamforming_info *)(&(_pmlmepriv)->beamforming_info))\r
25 \r
26 typedef enum _BEAMFORMING_ENTRY_STATE\r
27 {\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
34 \r
35 \r
36 typedef enum _BEAMFORMING_STATE\r
37 {\r
38         BEAMFORMING_STATE_IDLE, \r
39         BEAMFORMING_STATE_START, \r
40         BEAMFORMING_STATE_END,\r
41 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;\r
42 \r
43 \r
44 typedef enum _BEAMFORMING_CAP\r
45 {\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
54 \r
55 \r
56 typedef enum _SOUNDING_MODE\r
57 {\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
69 \r
70 \r
71 enum BEAMFORMING_CTRL_TYPE\r
72 {\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
79 };\r
80 \r
81 struct beamforming_entry {\r
82         BOOLEAN bUsed;\r
83         BOOLEAN bSound;\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
89         u16     sound_period;\r
90         BEAMFORMING_CAP beamforming_entry_cap;\r
91         BEAMFORMING_ENTRY_STATE beamforming_entry_state;\r
92         u8      LogSeq;\r
93         u8      LogRetryCnt;\r
94         u8      LogSuccessCnt;\r
95         u8      LogStatusFailCnt;\r
96         u8      PreCsiReport[327];\r
97         u8      DefaultCsiCnt;\r
98         BOOLEAN bDefaultCSI;\r
99 };\r
100 \r
101 struct sounding_info {\r
102         u8                              sound_idx;\r
103         CHANNEL_WIDTH   sound_bw;\r
104         SOUNDING_MODE   sound_mode; \r
105         u16                             sound_period;\r
106 };\r
107 \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
116 };\r
117 \r
118 struct rtw_ndpa_sta_info {\r
119         u16     aid:12; \r
120         u16     feedback_type:1;\r
121         u16     nc_index:3;     \r
122 };\r
123 \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
127 \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
130 \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
133 \r
134 void    beamforming_check_sounding_success(PADAPTER Adapter,BOOLEAN status);\r
135 \r
136 void    beamforming_watchdog(PADAPTER Adapter);\r
137 \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
140 \r
141 #endif\r
142 \r