xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8821cs/include/rtw_ap.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2007 - 2017 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef __RTW_AP_H_
16*4882a593Smuzhiyun #define __RTW_AP_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #ifdef CONFIG_AP_MODE
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define AP_CSA_DISABLE 0
22*4882a593Smuzhiyun #define AP_SWITCH_CH_CSA 1
23*4882a593Smuzhiyun #define STA_RX_CSA 2
24*4882a593Smuzhiyun #define CSA_STA_JOINBSS 3
25*4882a593Smuzhiyun #define CSA_IE_REMOVE 0xff
26*4882a593Smuzhiyun #define DEFAULT_CSA_CNT 3
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* external function */
29*4882a593Smuzhiyun extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
30*4882a593Smuzhiyun extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun void init_mlme_ap_info(_adapter *padapter);
34*4882a593Smuzhiyun void free_mlme_ap_info(_adapter *padapter);
35*4882a593Smuzhiyun u8 rtw_set_tim_ie(u8 dtim_cnt, u8 dtim_period
36*4882a593Smuzhiyun 	, const u8 *tim_bmp, u8 tim_bmp_len, u8 *tim_ie);
37*4882a593Smuzhiyun /* void update_BCNTIM(_adapter *padapter); */
38*4882a593Smuzhiyun void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len);
39*4882a593Smuzhiyun void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index);
40*4882a593Smuzhiyun void _update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx, u8 flags, const char *tag);
41*4882a593Smuzhiyun #define update_beacon(adapter, ie_id, oui, tx, flags) _update_beacon((adapter), (ie_id), (oui), (tx), (flags), __func__)
42*4882a593Smuzhiyun /*update_beacon - (flags) can set to normal enqueue (0) and RTW_CMDF_WAIT_ACK enqueue.
43*4882a593Smuzhiyun  (flags) = RTW_CMDF_DIRECTLY  is not currently implemented, it will do normal enqueue.*/
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun void rtw_ap_update_sta_ra_info(_adapter *padapter, struct sta_info *psta);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun void expire_timeout_chk(_adapter *padapter);
48*4882a593Smuzhiyun void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
49*4882a593Smuzhiyun void rtw_start_bss_hdl_after_chbw_decided(_adapter *adapter);
50*4882a593Smuzhiyun void start_bss_network(_adapter *padapter, struct createbss_parm *parm);
51*4882a593Smuzhiyun int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf,  int len);
52*4882a593Smuzhiyun void rtw_ap_restore_network(_adapter *padapter);
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #if CONFIG_RTW_MACADDR_ACL
55*4882a593Smuzhiyun void rtw_macaddr_acl_init(_adapter *adapter, u8 period);
56*4882a593Smuzhiyun void rtw_macaddr_acl_deinit(_adapter *adapter, u8 period);
57*4882a593Smuzhiyun void rtw_macaddr_acl_clear(_adapter *adapter, u8 period);
58*4882a593Smuzhiyun void rtw_set_macaddr_acl(_adapter *adapter, u8 period, int mode);
59*4882a593Smuzhiyun int rtw_acl_add_sta(_adapter *adapter, u8 period, const u8 *addr);
60*4882a593Smuzhiyun int rtw_acl_remove_sta(_adapter *adapter, u8 period, const u8 *addr);
61*4882a593Smuzhiyun #endif /* CONFIG_RTW_MACADDR_ACL */
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun u8 rtw_ap_set_sta_key(_adapter *adapter, const u8 *addr, u8 alg, const u8 *key, u8 keyid, u8 gk);
64*4882a593Smuzhiyun u8 rtw_ap_set_pairwise_key(_adapter *padapter, struct sta_info *psta);
65*4882a593Smuzhiyun int rtw_ap_set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid);
66*4882a593Smuzhiyun int rtw_ap_set_wep_key(_adapter *padapter, u8 *key, u8 keylen, int keyid, u8 set_tx);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #ifdef CONFIG_NATIVEAP_MLME
69*4882a593Smuzhiyun void associated_clients_update(_adapter *padapter, u8 updated, u32 sta_info_type);
70*4882a593Smuzhiyun void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta);
71*4882a593Smuzhiyun u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta);
72*4882a593Smuzhiyun void sta_info_update(_adapter *padapter, struct sta_info *psta);
73*4882a593Smuzhiyun void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
74*4882a593Smuzhiyun u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason, bool enqueue);
75*4882a593Smuzhiyun int rtw_sta_flush(_adapter *padapter, bool enqueue);
76*4882a593Smuzhiyun int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset);
77*4882a593Smuzhiyun void start_ap_mode(_adapter *padapter);
78*4882a593Smuzhiyun void stop_ap_mode(_adapter *padapter);
79*4882a593Smuzhiyun #endif
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun void rtw_ap_update_bss_chbw(_adapter *adapter, WLAN_BSSID_EX *bss, u8 ch, u8 bw, u8 offset);
82*4882a593Smuzhiyun u8 rtw_ap_chbw_decision(_adapter *adapter, u8 ifbmp, u8 excl_ifbmp
83*4882a593Smuzhiyun 	, s16 req_ch, s8 req_bw, s8 req_offset, u8 *ch, u8 *bw, u8 *offset, u8 *chbw_allow, bool *set_u_ch);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #ifdef CONFIG_AUTO_AP_MODE
86*4882a593Smuzhiyun void rtw_auto_ap_rx_msg_dump(_adapter *padapter, union recv_frame *precv_frame, u8 *ehdr_pos);
87*4882a593Smuzhiyun extern void rtw_start_auto_ap(_adapter *adapter);
88*4882a593Smuzhiyun #endif /* CONFIG_AUTO_AP_MODE */
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun void rtw_ap_parse_sta_capability(_adapter *adapter, struct sta_info *sta, u8 *cap);
91*4882a593Smuzhiyun u16 rtw_ap_parse_sta_supported_rates(_adapter *adapter, struct sta_info *sta, u8 *tlv_ies, u16 tlv_ies_len);
92*4882a593Smuzhiyun u16 rtw_ap_parse_sta_security_ie(_adapter *adapter, struct sta_info *sta, struct rtw_ieee802_11_elems *elems);
93*4882a593Smuzhiyun void rtw_ap_parse_sta_wmm_ie(_adapter *adapter, struct sta_info *sta, u8 *tlv_ies, u16 tlv_ies_len);
94*4882a593Smuzhiyun void rtw_ap_parse_sta_ht_ie(_adapter *adapter, struct sta_info *sta, struct rtw_ieee802_11_elems *elems);
95*4882a593Smuzhiyun void rtw_ap_parse_sta_vht_ie(_adapter *adapter, struct sta_info *sta, struct rtw_ieee802_11_elems *elems);
96*4882a593Smuzhiyun void rtw_ap_parse_sta_multi_ap_ie(_adapter *adapter, struct sta_info *sta, u8 *ies, int ies_len);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /* b2u flags */
99*4882a593Smuzhiyun #define RTW_AP_B2U_ALL		BIT0
100*4882a593Smuzhiyun #define RTW_AP_B2U_GA_UCAST	BIT1 /* WDS group addressed unicast frame, forward only */
101*4882a593Smuzhiyun #define RTW_AP_B2U_BCAST	BIT2
102*4882a593Smuzhiyun #define RTW_AP_B2U_IP_MCAST	BIT3
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #define rtw_ap_src_b2u_policy_chk(flags, da) ( \
105*4882a593Smuzhiyun 	(flags & RTW_AP_B2U_ALL) \
106*4882a593Smuzhiyun 	|| ((flags & RTW_AP_B2U_BCAST) && is_broadcast_mac_addr(da)) \
107*4882a593Smuzhiyun 	|| ((flags & RTW_AP_B2U_IP_MCAST) && (IP_MCAST_MAC(da) || ICMPV6_MCAST_MAC(da))) \
108*4882a593Smuzhiyun 	)
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #define rtw_ap_fwd_b2u_policy_chk(flags, da, gaucst) ( \
111*4882a593Smuzhiyun 	(flags & RTW_AP_B2U_ALL) \
112*4882a593Smuzhiyun 	|| ((flags & RTW_AP_B2U_GA_UCAST) && gaucst) \
113*4882a593Smuzhiyun 	|| ((flags & RTW_AP_B2U_BCAST) && is_broadcast_mac_addr(da)) \
114*4882a593Smuzhiyun 	|| ((flags & RTW_AP_B2U_IP_MCAST) && (IP_MCAST_MAC(da) || ICMPV6_MCAST_MAC(da))) \
115*4882a593Smuzhiyun 	)
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun void dump_ap_b2u_flags(void *sel, _adapter *adapter);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun int rtw_ap_addr_resolve(_adapter *adapter, u16 os_qid, struct xmit_frame *xframe, _pkt *pkt, _list *f_list);
120*4882a593Smuzhiyun int rtw_ap_rx_data_validate_hdr(_adapter *adapter, union recv_frame *rframe, struct sta_info **sta);
121*4882a593Smuzhiyun int rtw_ap_rx_msdu_act_check(union recv_frame *rframe
122*4882a593Smuzhiyun 	, const u8 *da, const u8 *sa
123*4882a593Smuzhiyun 	, u8 *msdu, enum rtw_rx_llc_hdl llc_hdl
124*4882a593Smuzhiyun 	, struct xmit_frame **fwd_frame, _list *f_list);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun void update_bmc_sta(_adapter *padapter);
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #ifdef CONFIG_BMC_TX_RATE_SELECT
129*4882a593Smuzhiyun void rtw_update_bmc_sta_tx_rate(_adapter *adapter);
130*4882a593Smuzhiyun #endif
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun void rtw_process_ht_action_smps(_adapter *padapter, u8 *ta, u8 ctrl_field);
133*4882a593Smuzhiyun void rtw_process_public_act_bsscoex(_adapter *padapter, u8 *pframe, uint frame_len);
134*4882a593Smuzhiyun #ifdef CONFIG_80211N_HT
135*4882a593Smuzhiyun int rtw_ht_operation_update(_adapter *padapter);
136*4882a593Smuzhiyun #endif /* CONFIG_80211N_HT */
137*4882a593Smuzhiyun u8 rtw_ap_sta_states_check(_adapter *adapter);
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #ifdef CONFIG_FW_HANDLE_TXBCN
140*4882a593Smuzhiyun #define rtw_ap_get_nums(adapter)	(adapter_to_dvobj(adapter)->nr_ap_if)
141*4882a593Smuzhiyun bool rtw_ap_nums_check(_adapter *adapter);
142*4882a593Smuzhiyun #endif
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #ifdef CONFIG_SWTIMER_BASED_TXBCN
145*4882a593Smuzhiyun void tx_beacon_handlder(struct dvobj_priv *pdvobj);
146*4882a593Smuzhiyun void tx_beacon_timer_handlder(void *ctx);
147*4882a593Smuzhiyun #endif /*CONFIG_SWTIMER_BASED_TXBCN*/
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #endif /* end of CONFIG_AP_MODE */
150*4882a593Smuzhiyun #endif /*__RTW_AP_H_*/
151