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 16*4882a593Smuzhiyun #ifndef __RTW_MBO_H_ 17*4882a593Smuzhiyun #define __RTW_MBO_H_ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define rtw_mbo_wifi_logo_test(a) ((a->registrypriv.wifi_spec) == 1) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define rtw_mbo_set_ext_cap_internw(_pEleStart, _val) \ 22*4882a593Smuzhiyun SET_BITS_TO_LE_1BYTE(((u8 *)(_pEleStart))+3, 7, 1, _val) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define rtw_mbo_wnm_notification_req(c, a) \ 25*4882a593Smuzhiyun (((c) == RTW_WLAN_CATEGORY_WNM) && \ 26*4882a593Smuzhiyun (((a) == RTW_WLAN_ACTION_WNM_NOTIF_REQ))) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* IEEE Std 802.11-2016 Table 9-46 - Status codes */ 29*4882a593Smuzhiyun #define RTW_ASSOC_DENIED_NO_MORE_STAS 17 30*4882a593Smuzhiyun #define RTW_ASSOC_REFUSED_TEMPORARILY 30 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* MBO-OCE Information Element */ 33*4882a593Smuzhiyun #define RTW_MBO_EID WLAN_EID_VENDOR_SPECIFIC 34*4882a593Smuzhiyun #define RTW_MBO_OUI 0x506F9A 35*4882a593Smuzhiyun #define RTW_MBO_OUI_TYPE 0x16 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Non-preferred Channel Report */ 38*4882a593Smuzhiyun #define RTW_MBO_ATTR_NPREF_CH_RPT_ID 0x2 39*4882a593Smuzhiyun /* Cellular Data Capabilities */ 40*4882a593Smuzhiyun #define RTW_MBO_ATTR_CELL_DATA_CAP_ID 0x3 41*4882a593Smuzhiyun /* Association Disallowed */ 42*4882a593Smuzhiyun #define RTW_MBO_ATTR_ASSOC_DISABLED_ID 0x4 43*4882a593Smuzhiyun /* Transition Reason Code */ 44*4882a593Smuzhiyun #define RTW_MBO_ATTR_TRANS_RES_ID 0x6 45*4882a593Smuzhiyun /* Transition Rejection Reason Code */ 46*4882a593Smuzhiyun #define RTW_MBO_ATTR_TRANS_REJ_ID 0x7 47*4882a593Smuzhiyun /* Association Retry Delay */ 48*4882a593Smuzhiyun #define RTW_MBO_ATTR_TASSOC_RETRY_ID 0x8 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define RTW_MBO_MAX_CH_LIST_NUM MAX_CHANNEL_NUM 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define RTW_MBO_MAX_CH_RPT_NUM 32 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun struct npref_ch { 55*4882a593Smuzhiyun u8 op_class; 56*4882a593Smuzhiyun u8 chs[RTW_MBO_MAX_CH_LIST_NUM]; 57*4882a593Smuzhiyun size_t nm_of_ch; 58*4882a593Smuzhiyun u8 preference; 59*4882a593Smuzhiyun u8 reason; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct npref_ch_rtp { 63*4882a593Smuzhiyun struct npref_ch ch_rpt[RTW_MBO_MAX_CH_RPT_NUM]; 64*4882a593Smuzhiyun size_t nm_of_rpt; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun void rtw_mbo_build_cell_data_cap_attr( 68*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun void rtw_mbo_update_ie_data( 71*4882a593Smuzhiyun _adapter *padapter, u8 *pie, u32 ie_len); 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun void rtw_mbo_build_supp_op_class_elem( 74*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun void rtw_mbo_build_npref_ch_rpt_attr( 77*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun void rtw_mbo_build_trans_reject_reason_attr( 80*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib, u8 *pres); 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun u8 rtw_mbo_disallowed_network(struct wlan_network *pnetwork); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun void rtw_mbo_build_exented_cap( 85*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun ssize_t rtw_mbo_proc_non_pref_chans_set( 88*4882a593Smuzhiyun struct file *pfile, const char __user *buffer, 89*4882a593Smuzhiyun size_t count, loff_t *pos, void *pdata); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun int rtw_mbo_proc_non_pref_chans_get( 92*4882a593Smuzhiyun struct seq_file *m, void *v); 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun ssize_t rtw_mbo_proc_cell_data_set( 95*4882a593Smuzhiyun struct file *pfile, const char __user *buffer, 96*4882a593Smuzhiyun size_t count, loff_t *pos, void *pdata); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun int rtw_mbo_proc_cell_data_get( 99*4882a593Smuzhiyun struct seq_file *m, void *v); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun void rtw_mbo_wnm_notification_parsing( 102*4882a593Smuzhiyun _adapter *padapter, const u8 *pdata, size_t data_len); 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun void rtw_mbo_build_wnm_notification( 105*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun void rtw_mbo_build_probe_req_ies( 108*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun void rtw_mbo_build_assoc_req_ies( 111*4882a593Smuzhiyun _adapter *padapter, u8 **pframe, struct pkt_attrib *pattrib); 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #endif /* __RTW_MBO_H_ */ 114*4882a593Smuzhiyun 115