net: wireless: rockchip_wlan: add rtl8188fu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188fu / 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 #ifdef CONFIG_BEAMFORMING\r
24 \r
25 #if (BEAMFORMING_SUPPORT == 0) /*for diver defined beamforming*/\r
26 #define BEAMFORMING_ENTRY_NUM           2\r
27 #define GET_BEAMFORM_INFO(_pmlmepriv)   ((struct beamforming_info *)(&(_pmlmepriv)->beamforming_info))\r
28 \r
29 \r
30 typedef enum _BEAMFORMING_ENTRY_STATE\r
31 {\r
32         BEAMFORMING_ENTRY_STATE_UNINITIALIZE, \r
33         BEAMFORMING_ENTRY_STATE_INITIALIZEING, \r
34         BEAMFORMING_ENTRY_STATE_INITIALIZED, \r
35         BEAMFORMING_ENTRY_STATE_PROGRESSING, \r
36         BEAMFORMING_ENTRY_STATE_PROGRESSED, \r
37 }BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;\r
38 \r
39 \r
40 typedef enum _BEAMFORMING_STATE\r
41 {\r
42         BEAMFORMING_STATE_IDLE, \r
43         BEAMFORMING_STATE_START, \r
44         BEAMFORMING_STATE_END,\r
45 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;\r
46 \r
47 \r
48 typedef enum _BEAMFORMING_CAP\r
49 {\r
50         BEAMFORMING_CAP_NONE = 0x0,\r
51         BEAMFORMER_CAP_HT_EXPLICIT = 0x1, \r
52         BEAMFORMEE_CAP_HT_EXPLICIT = 0x2, \r
53         BEAMFORMER_CAP_VHT_SU = 0x4,                    // Self has er Cap, because Reg er  & peer ee\r
54         BEAMFORMEE_CAP_VHT_SU = 0x8,                    // Self has ee Cap, because Reg ee & peer er \r
55         BEAMFORMER_CAP = 0x10,\r
56         BEAMFORMEE_CAP = 0x20,\r
57 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;\r
58 \r
59 \r
60 typedef enum _SOUNDING_MODE\r
61 {\r
62         SOUNDING_SW_VHT_TIMER = 0x0,\r
63         SOUNDING_SW_HT_TIMER = 0x1, \r
64         SOUNDING_STOP_All_TIMER = 0x2, \r
65         SOUNDING_HW_VHT_TIMER = 0x3,                    \r
66         SOUNDING_HW_HT_TIMER = 0x4,\r
67         SOUNDING_STOP_OID_TIMER = 0x5, \r
68         SOUNDING_AUTO_VHT_TIMER = 0x6,\r
69         SOUNDING_AUTO_HT_TIMER = 0x7,\r
70         SOUNDING_FW_VHT_TIMER = 0x8,\r
71         SOUNDING_FW_HT_TIMER = 0x9,\r
72 }SOUNDING_MODE, *PSOUNDING_MODE;\r
73 \r
74 struct beamforming_entry {\r
75         BOOLEAN bUsed;\r
76         BOOLEAN bSound;\r
77         u16     aid;                    // Used to construct AID field of NDPA packet.\r
78         u16     mac_id;         // Used to Set Reg42C in IBSS mode. \r
79         u16     p_aid;          // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. \r
80         u16 g_id;\r
81         u8      mac_addr[6];// Used to fill Reg6E4 to fill Mac address of CSI report frame.\r
82         CHANNEL_WIDTH   sound_bw;       // Sounding BandWidth\r
83         u16     sound_period;\r
84         BEAMFORMING_CAP beamforming_entry_cap;\r
85         BEAMFORMING_ENTRY_STATE beamforming_entry_state;\r
86         u8                              ClockResetTimes;                        /*Modified by Jeffery @2015-04-10*/\r
87         u8                              PreLogSeq;                              /*Modified by Jeffery @2015-03-30*/\r
88         u8                              LogSeq;                                 /*Modified by Jeffery @2014-10-29*/\r
89         u16                             LogRetryCnt:3;                  /*Modified by Jeffery @2014-10-29*/\r
90         u16                             LogSuccess:2;                   /*Modified by Jeffery @2014-10-29*/\r
91 \r
92         u8      LogStatusFailCnt;\r
93         u8      PreCsiReport[327];\r
94         u8      DefaultCsiCnt;\r
95         BOOLEAN bDefaultCSI;\r
96 };\r
97 \r
98 struct sounding_info {\r
99         u8                              sound_idx;\r
100         CHANNEL_WIDTH   sound_bw;\r
101         SOUNDING_MODE   sound_mode; \r
102         u16                             sound_period;\r
103 };\r
104 \r
105 struct beamforming_info {\r
106         BEAMFORMING_CAP         beamforming_cap;\r
107         BEAMFORMING_STATE               beamforming_state;\r
108         struct beamforming_entry        beamforming_entry[BEAMFORMING_ENTRY_NUM];\r
109         u8                                              beamforming_cur_idx;\r
110         u8                                              beamforming_in_progress;\r
111         u8                                              sounding_sequence;\r
112         struct sounding_info            sounding_info;\r
113 };\r
114 \r
115 struct rtw_ndpa_sta_info {\r
116         u16     aid:12; \r
117         u16     feedback_type:1;\r
118         u16     nc_index:3;     \r
119 };\r
120 \r
121 BEAMFORMING_CAP beamforming_get_entry_beam_cap_by_mac_id(PVOID pmlmepriv ,u8 mac_id);\r
122 void    beamforming_notify(PADAPTER adapter);\r
123 BEAMFORMING_CAP beamforming_get_beamform_cap(struct beamforming_info    *pBeamInfo);\r
124 \r
125 BOOLEAN beamforming_send_ht_ndpa_packet(PADAPTER Adapter, u8 *ra, CHANNEL_WIDTH bw, u8 qidx);\r
126 BOOLEAN beamforming_send_vht_ndpa_packet(PADAPTER Adapter, u8 *ra, u16 aid, CHANNEL_WIDTH bw, u8 qidx);\r
127 \r
128 void    beamforming_check_sounding_success(PADAPTER Adapter,BOOLEAN status);\r
129 \r
130 void    beamforming_watchdog(PADAPTER Adapter);\r
131 #endif /*#if (BEAMFORMING_SUPPORT ==0)- for diver defined beamforming*/\r
132 \r
133 enum BEAMFORMING_CTRL_TYPE {\r
134         BEAMFORMING_CTRL_ENTER = 0,\r
135         BEAMFORMING_CTRL_LEAVE = 1,\r
136         BEAMFORMING_CTRL_START_PERIOD = 2,\r
137         BEAMFORMING_CTRL_END_PERIOD = 3,\r
138         BEAMFORMING_CTRL_SOUNDING_FAIL = 4,\r
139         BEAMFORMING_CTRL_SOUNDING_CLK = 5,\r
140 };\r
141 u32     beamforming_get_report_frame(PADAPTER    Adapter, union recv_frame *precv_frame);\r
142 void    beamforming_get_ndpa_frame(PADAPTER      Adapter, union recv_frame *precv_frame);\r
143 \r
144 void    beamforming_wk_hdl(_adapter *padapter, u8 type, u8 *pbuf);\r
145 u8      beamforming_wk_cmd(_adapter*padapter, s32 type, u8 *pbuf, s32 size, u8 enqueue);\r
146 void update_attrib_txbf_info(_adapter *padapter, struct pkt_attrib *pattrib, struct sta_info *psta);\r
147 \r
148 #endif /*#ifdef CONFIG_BEAMFORMING */\r
149 \r
150 #endif /*__RTW_BEAMFORMING_H_*/\r