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