net: wireless: rockchip_wlan: add rtl8188eu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188eu / include / rtw_tdls.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_TDLS_H_\r
21 #define __RTW_TDLS_H_\r
22 \r
23 \r
24 #ifdef CONFIG_TDLS\r
25 /* TDLS STA state */\r
26 \r
27 \r
28 /* TDLS Diect Link Establishment */\r
29 #define TDLS_STATE_NONE                         0x00000000              /* Default state */\r
30 #define TDLS_INITIATOR_STATE            BIT(28)                 /* 0x10000000 */\r
31 #define TDLS_RESPONDER_STATE            BIT(29)                 /* 0x20000000 */\r
32 #define TDLS_LINKED_STATE                       BIT(30)                 /* 0x40000000 */\r
33 /* TDLS PU Buffer STA */\r
34 #define TDLS_WAIT_PTR_STATE                     BIT(24)                 /* 0x01000000 */        /* Waiting peer's TDLS_PEER_TRAFFIC_RESPONSE frame */\r
35 /* TDLS Check ALive */\r
36 #define TDLS_ALIVE_STATE                        BIT(20)                 /* 0x00100000 */        /* Check if peer sta is alived. */\r
37 /* TDLS Channel Switch */\r
38 #define TDLS_CH_SWITCH_PREPARE_STATE    BIT(15)                 /* 0x00008000 */\r
39 #define TDLS_CH_SWITCH_ON_STATE                 BIT(16)                 /* 0x00010000 */\r
40 #define TDLS_PEER_AT_OFF_STATE                  BIT(17)                 /* 0x00020000 */        /* Could send pkt on target ch */\r
41 #define TDLS_CH_SW_INITIATOR_STATE              BIT(18)                 /* 0x00040000 */        /* Avoid duplicated or unconditional ch. switch rsp. */\r
42 #define TDLS_WAIT_CH_RSP_STATE                  BIT(19)                 /* 0x00080000 */        /* Wait Ch. response as we are TDLS channel switch initiator */\r
43 \r
44 \r
45 #define TDLS_TPK_RESEND_COUNT                   1800    /*Unit: seconds */\r
46 #define TDLS_CH_SWITCH_TIME                             15\r
47 #define TDLS_CH_SWITCH_TIMEOUT                  30\r
48 #define TDLS_CH_SWITCH_OPER_OFFLOAD_TIMEOUT     10\r
49 #define TDLS_SIGNAL_THRESH                      0x20\r
50 #define TDLS_WATCHDOG_PERIOD            10      /* Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec */\r
51 #define TDLS_HANDSHAKE_TIME                     3000\r
52 #define TDLS_PTI_TIME                           7000\r
53 \r
54 #define TDLS_CH_SW_STAY_ON_BASE_CHNL_TIMEOUT    20              /* ms */\r
55 #define TDLS_CH_SW_MONITOR_TIMEOUT                              2000    /*ms */\r
56 \r
57 #define TDLS_MIC_LEN 16\r
58 #define WPA_NONCE_LEN 32\r
59 #define TDLS_TIMEOUT_LEN 4\r
60 \r
61 enum TDLS_CH_SW_CHNL{\r
62         TDLS_CH_SW_BASE_CHNL = 0,\r
63         TDLS_CH_SW_OFF_CHNL\r
64 };\r
65 \r
66 struct wpa_tdls_ftie {\r
67         u8 ie_type; /* FTIE */\r
68         u8 ie_len;\r
69         u8 mic_ctrl[2];\r
70         u8 mic[TDLS_MIC_LEN];\r
71         u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */\r
72         u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */\r
73         /* followed by optional elements */\r
74 } ;\r
75 \r
76 struct wpa_tdls_lnkid {\r
77         u8 ie_type; /* Link Identifier IE */\r
78         u8 ie_len;\r
79         u8 bssid[ETH_ALEN];\r
80         u8 init_sta[ETH_ALEN];\r
81         u8 resp_sta[ETH_ALEN];\r
82 } ;\r
83 \r
84 static u8 TDLS_RSNIE[20]={      0x01, 0x00,     /* Version shall be set to 1 */\r
85                                                         0x00, 0x0f, 0xac, 0x07, /* Group sipher suite */\r
86                                                         0x01, 0x00,     /* Pairwise cipher suite count */\r
87                                                         0x00, 0x0f, 0xac, 0x04, /* Pairwise cipher suite list; CCMP only */\r
88                                                         0x01, 0x00,     /* AKM suite count */\r
89                                                         0x00, 0x0f, 0xac, 0x07, /* TPK Handshake */\r
90                                                         0x0c, 0x02,\r
91                                                         /* PMKID shall not be present */\r
92                                                 };\r
93 \r
94 static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};      /* Qos info all set zero */\r
95 \r
96 static u8 TDLS_WMM_PARAM_IE[] = {0x00, 0x00, 0x03, 0xa4, 0x00, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00};\r
97 \r
98 static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x00};  /* bit(28), bit(30), bit(37) */\r
99 \r
100 /* SRC: Supported Regulatory Classes */\r
101 static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };\r
102 \r
103 int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len);\r
104 int check_ap_tdls_ch_switching_prohibited(u8 *pframe, u8 pkt_len);\r
105 \r
106 u8 rtw_tdls_is_setup_allowed(_adapter *padapter);\r
107 #ifdef CONFIG_TDLS_CH_SW\r
108 u8 rtw_tdls_is_chsw_allowed(_adapter *padapter);\r
109 #endif\r
110 \r
111 void rtw_reset_tdls_info(_adapter* padapter);\r
112 int rtw_init_tdls_info(_adapter* padapter);\r
113 void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);\r
114 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);\r
115 void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta);\r
116 void    rtw_free_tdls_timer(struct sta_info *psta);\r
117 void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);\r
118 \r
119 #ifdef CONFIG_TDLS_CH_SW\r
120 void rtw_tdls_set_ch_sw_oper_control(_adapter *padapter, u8 enable);\r
121 void rtw_tdls_ch_sw_back_to_base_chnl(_adapter *padapter);\r
122 s32 rtw_tdls_do_ch_sw(_adapter *padapter, u8 chnl_type, u8 channel, u8 channel_offset, u16 bwmode, u16 ch_switch_time);\r
123 void rtw_tdls_chsw_oper_done(_adapter* padapter);\r
124 #endif\r
125 \r
126 #ifdef CONFIG_WFD\r
127 int issue_tunneled_probe_req(_adapter *padapter);\r
128 int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);\r
129 #endif /* CONFIG_WFD */\r
130 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
131 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
132 int issue_tdls_setup_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
133 int issue_tdls_setup_cfm(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
134 int issue_tdls_dis_rsp(_adapter * padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
135 int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack);\r
136 int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *psta, struct tdls_txmgmt *ptxmgmt);\r
137 int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);\r
138 #ifdef CONFIG_TDLS_CH_SW\r
139 int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta);\r
140 int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
141 #endif\r
142 sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
143 sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);\r
144 int On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
145 int On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);\r
146 int On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);\r
147 int On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);\r
148 int On_TDLS_Peer_Traffic_Indication(_adapter *adapter, union recv_frame *precv_frame);\r
149 int On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
150 #ifdef CONFIG_TDLS_CH_SW\r
151 sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);\r
152 sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
153 void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
154 void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
155 #endif\r
156 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
157 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
158 void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
159 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
160 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
161 void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
162 void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
163 void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
164 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
165 void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
166 \r
167 u8      update_sgi_tdls(_adapter *padapter, struct sta_info *psta);\r
168 u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);\r
169 int rtw_tdls_is_driver_setup(_adapter *padapter);\r
170 void rtw_tdls_set_key(_adapter *padapter, struct sta_info *ptdls_sta);\r
171 const char * rtw_tdls_action_txt(enum TDLS_ACTION_FIELD action);\r
172 #endif /* CONFIG_TDLS */\r
173 \r
174 #endif\r
175 \r