ce0e2fc3c8973e6514bff6e49d07f3e4a9527f17
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / 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 #define TDLS_STATE_NONE                         0x00000000      //default state\r
27 #define TDLS_INITIATOR_STATE                    0x10000000\r
28 #define TDLS_RESPONDER_STATE                    0x20000000\r
29 #define TDLS_LINKED_STATE                               0x40000000\r
30 #define TDLS_CH_SWITCH_ON_STATE         0x01000000\r
31 #define TDLS_PEER_AT_OFF_STATE          0x02000000      //could send pkt on target ch\r
32 #define TDLS_AT_OFF_CH_STATE                    0x04000000\r
33 #define TDLS_CH_SW_INITIATOR_STATE      0x08000000      //avoiding duplicated or unconditional ch. switch rsp.\r
34 #define TDLS_APSD_CHSW_STATE            0x00100000      //in APSD and want to setup channel switch\r
35 #define TDLS_PEER_SLEEP_STATE           0x00200000      //peer sta is sleeping  //[TDLS] UAPSD: will not be used one day\r
36 #define TDLS_SW_OFF_STATE                       0x00400000      //terminate channel swithcing\r
37 #define TDLS_ALIVE_STATE                                0x00010000      //Check if peer sta is alived.\r
38 #define TDLS_WAIT_PTR_STATE                     0x00020000      //Waiting peer's TDLS_PEER_TRAFFIC_RESPONSE frame\r
39 \r
40 #define TPK_RESEND_COUNT                                301\r
41 #define         CH_SWITCH_TIME                          10\r
42 #define         CH_SWITCH_TIMEOUT                       30\r
43 #define TDLS_STAY_TIME                          500\r
44 #define TDLS_SIGNAL_THRESH                      0x20\r
45 #define TDLS_WATCHDOG_PERIOD            10      //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec\r
46 #define TDLS_STAY_TIME                          500\r
47 #define TDLS_HANDSHAKE_TIME                     3000\r
48 #define TDLS_PTI_TIME                                   7000\r
49 #define TDLS_ALIVE_COUNT                                3\r
50 #define TDLS_INI_MACID_ENTRY                    6\r
51 \r
52 /* TDLS */\r
53 #define TDLS_MIC_LEN 16\r
54 #define WPA_NONCE_LEN 32\r
55 #define TDLS_TIMEOUT_LEN 4\r
56 \r
57 struct wpa_tdls_ftie {\r
58         u8 ie_type; /* FTIE */\r
59         u8 ie_len;\r
60         u8 mic_ctrl[2];\r
61         u8 mic[TDLS_MIC_LEN];\r
62         u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */\r
63         u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */\r
64         /* followed by optional elements */\r
65 } ;\r
66 \r
67 struct wpa_tdls_lnkid {\r
68         u8 ie_type; /* Link Identifier IE */\r
69         u8 ie_len;\r
70         u8 bssid[ETH_ALEN];\r
71         u8 init_sta[ETH_ALEN];\r
72         u8 resp_sta[ETH_ALEN];\r
73 } ;\r
74 \r
75 static u8 TDLS_RSNIE[]={        0x01, 0x00,     //version shall be set to 1\r
76                                                 0x00, 0x0f, 0xac, 0x07, //group sipher suite\r
77                                                 0x01, 0x00,     //pairwise cipher suite count\r
78                                                 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only\r
79                                                 0x01, 0x00,     //AKM suite count\r
80                                                 0x00, 0x0f, 0xac, 0x07, //TPK Handshake\r
81                                                 0x0c, 0x02,\r
82                                                 //PMKID shall not be present\r
83                                                 };\r
84 \r
85 static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};      //Qos info all set zero\r
86 \r
87 static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0x00};  //bit(28), bit(30), bit(37)\r
88 \r
89 //      SRC: Supported Regulatory Classes\r
90 static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };\r
91 \r
92 void rtw_reset_tdls_info(_adapter* padapter);\r
93 int rtw_init_tdls_info(_adapter* padapter);\r
94 void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);\r
95 int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);\r
96 void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta);\r
97 void rtw_free_tdls_timer(struct sta_info *psta);\r
98 void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);\r
99 #ifdef CONFIG_WFD\r
100 int issue_tunneled_probe_req(_adapter *padapter);\r
101 int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);\r
102 #endif //CONFIG_WFD\r
103 int issue_tdls_dis_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
104 int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);\r
105 int issue_tdls_setup_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
106 int issue_tdls_setup_cfm(_adapter *padapter, struct tdls_txmgmt *ptxmgmt);\r
107 int issue_tdls_dis_rsp(_adapter * padapter, struct tdls_txmgmt *ptxmgmt, u8 privacy);\r
108 int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack);\r
109 int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *psta);\r
110 int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);\r
111 int issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);\r
112 int issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);\r
113 sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
114 sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);\r
115 int On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
116 int On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);\r
117 int On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);\r
118 int On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);\r
119 int On_TDLS_Peer_Traffic_Indication(_adapter *adapter, union recv_frame *precv_frame);\r
120 int On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
121 sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);\r
122 sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);\r
123 void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
124 void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
125 void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
126 void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
127 void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt);\r
128 void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog, u8 privacy);\r
129 void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
130 void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
131 void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
132 void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
133 void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
134 void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);\r
135 \r
136 u8      update_sgi_tdls(_adapter *padapter, struct sta_info *psta);\r
137 u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);\r
138 #endif //CONFIG_TDLS\r
139 \r
140 #endif\r
141 \r