OSDN Git Service

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