OSDN Git Service

staging: rtl8723bs: update to the latest driver
[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  ******************************************************************************/
15 #ifndef __RTW_BEAMFORMING_H_
16 #define __RTW_BEAMFORMING_H_
17
18 #define BEAMFORMING_ENTRY_NUM           2
19 #define GET_BEAMFORM_INFO(_pmlmepriv)   ((struct beamforming_info *)(&(_pmlmepriv)->beamforming_info))
20
21 typedef enum _BEAMFORMING_ENTRY_STATE
22 {
23         BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
24         BEAMFORMING_ENTRY_STATE_INITIALIZEING,
25         BEAMFORMING_ENTRY_STATE_INITIALIZED,
26         BEAMFORMING_ENTRY_STATE_PROGRESSING,
27         BEAMFORMING_ENTRY_STATE_PROGRESSED,
28 }BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;
29
30
31 typedef enum _BEAMFORMING_STATE
32 {
33         BEAMFORMING_STATE_IDLE,
34         BEAMFORMING_STATE_START,
35         BEAMFORMING_STATE_END,
36 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;
37
38
39 typedef enum _BEAMFORMING_CAP
40 {
41         BEAMFORMING_CAP_NONE = 0x0,
42         BEAMFORMER_CAP_HT_EXPLICIT = 0x1,
43         BEAMFORMEE_CAP_HT_EXPLICIT = 0x2,
44         BEAMFORMER_CAP_VHT_SU = 0x4,                    /*  Self has er Cap, because Reg er  & peer ee */
45         BEAMFORMEE_CAP_VHT_SU = 0x8,                    /*  Self has ee Cap, because Reg ee & peer er */
46         BEAMFORMER_CAP = 0x10,
47         BEAMFORMEE_CAP = 0x20,
48 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;
49
50
51 typedef enum _SOUNDING_MODE
52 {
53         SOUNDING_SW_VHT_TIMER = 0x0,
54         SOUNDING_SW_HT_TIMER = 0x1,
55         SOUNDING_STOP_All_TIMER = 0x2,
56         SOUNDING_HW_VHT_TIMER = 0x3,
57         SOUNDING_HW_HT_TIMER = 0x4,
58         SOUNDING_STOP_OID_TIMER = 0x5,
59         SOUNDING_AUTO_VHT_TIMER = 0x6,
60         SOUNDING_AUTO_HT_TIMER = 0x7,
61         SOUNDING_FW_VHT_TIMER = 0x8,
62         SOUNDING_FW_HT_TIMER = 0x9,
63 }SOUNDING_MODE, *PSOUNDING_MODE;
64
65
66 enum BEAMFORMING_CTRL_TYPE
67 {
68         BEAMFORMING_CTRL_ENTER = 0,
69         BEAMFORMING_CTRL_LEAVE = 1,
70         BEAMFORMING_CTRL_START_PERIOD = 2,
71         BEAMFORMING_CTRL_END_PERIOD = 3,
72         BEAMFORMING_CTRL_SOUNDING_FAIL =4,
73         BEAMFORMING_CTRL_SOUNDING_CLK =5,
74 };
75
76 struct beamforming_entry {
77         bool    bUsed;
78         bool    bSound;
79         u16 aid;                        /*  Used to construct AID field of NDPA packet. */
80         u16 mac_id;             /*  Used to Set Reg42C in IBSS mode. */
81         u16 p_aid;              /*  Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
82         u8 mac_addr[6];/*  Used to fill Reg6E4 to fill Mac address of CSI report frame. */
83         enum CHANNEL_WIDTH      sound_bw;       /*  Sounding BandWidth */
84         u16 sound_period;
85         BEAMFORMING_CAP beamforming_entry_cap;
86         BEAMFORMING_ENTRY_STATE beamforming_entry_state;
87         u8 LogSeq;
88         u8 LogRetryCnt;
89         u8 LogSuccessCnt;
90         u8 LogStatusFailCnt;
91         u8 PreCsiReport[327];
92         u8 DefaultCsiCnt;
93         bool    bDefaultCSI;
94 };
95
96 struct sounding_info {
97         u8              sound_idx;
98         enum CHANNEL_WIDTH      sound_bw;
99         SOUNDING_MODE   sound_mode;
100         u16                     sound_period;
101 };
102
103 struct beamforming_info {
104         BEAMFORMING_CAP         beamforming_cap;
105         BEAMFORMING_STATE               beamforming_state;
106         struct beamforming_entry        beamforming_entry[BEAMFORMING_ENTRY_NUM];
107         u8                              beamforming_cur_idx;
108         u8                              beamforming_in_progress;
109         u8                              sounding_sequence;
110         struct sounding_info    sounding_info;
111 };
112
113 struct rtw_ndpa_sta_info {
114         u16 aid:12;
115         u16 feedback_type:1;
116         u16 nc_index:3;
117 };
118
119 BEAMFORMING_CAP beamforming_get_entry_beam_cap_by_mac_id(void *pmlmepriv , u8 mac_id);
120 void beamforming_notify(struct adapter * adapter);
121 BEAMFORMING_CAP beamforming_get_beamform_cap(struct beamforming_info *pBeamInfo);
122
123 u32 beamforming_get_report_frame(struct adapter * Adapter, union recv_frame *precv_frame);
124
125 bool    beamforming_send_ht_ndpa_packet(struct adapter * Adapter, u8 *ra, enum CHANNEL_WIDTH bw, u8 qidx);
126 bool    beamforming_send_vht_ndpa_packet(struct adapter * Adapter, u8 *ra, u16 aid, enum CHANNEL_WIDTH bw, u8 qidx);
127
128 void beamforming_check_sounding_success(struct adapter * Adapter, bool status);
129
130 void beamforming_watchdog(struct adapter * Adapter);
131
132 void beamforming_wk_hdl(struct adapter *padapter, u8 type, u8 *pbuf);
133 u8 beamforming_wk_cmd(struct adapter *padapter, s32 type, u8 *pbuf, s32 size, u8 enqueue);
134
135 #endif