1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2017 Realtek Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of version 2 of the GNU General Public License as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 *****************************************************************************/ 16 17 #ifndef __RTW_RM_H_ 18 #define __RTW_RM_H_ 19 20 u8 rm_post_event_hdl(_adapter *padapter, u8 *pbuf); 21 22 #define RM_TIMER_NUM 32 23 #define RM_ALL_MEAS BIT(1) 24 #define RM_ID_FOR_ALL(aid) ((aid<<16)|RM_ALL_MEAS) 25 26 #define RM_CAP_ARG(x) ((u8 *)(x))[4], ((u8 *)(x))[3], ((u8 *)(x))[2], ((u8 *)(x))[1], ((u8 *)(x))[0] 27 #define RM_CAP_FMT "%02x %02x%02x %02x%02x" 28 29 /* remember to modify rm_event_name() when adding new event */ 30 enum RM_EV_ID { 31 RM_EV_state_in, 32 RM_EV_busy_timer_expire, 33 RM_EV_delay_timer_expire, 34 RM_EV_meas_timer_expire, 35 RM_EV_retry_timer_expire, 36 RM_EV_repeat_delay_expire, 37 RM_EV_request_timer_expire, 38 RM_EV_wait_report, 39 RM_EV_start_meas, 40 RM_EV_survey_done, 41 RM_EV_recv_rep, 42 RM_EV_cancel, 43 RM_EV_state_out, 44 RM_EV_max 45 }; 46 47 struct rm_event { 48 u32 rmid; 49 enum RM_EV_ID evid; 50 _list list; 51 }; 52 53 #ifdef CONFIG_RTW_80211K 54 55 struct rm_clock { 56 struct rm_obj *prm; 57 ATOMIC_T counter; 58 enum RM_EV_ID evid; 59 }; 60 61 struct rm_priv { 62 u8 enable; 63 _queue ev_queue; 64 _queue rm_queue; 65 _timer rm_timer; 66 67 struct rm_clock clock[RM_TIMER_NUM]; 68 u8 rm_en_cap_def[5]; 69 u8 rm_en_cap_assoc[5]; 70 71 /* rm debug */ 72 void *prm_sel; 73 }; 74 75 int rtw_init_rm(_adapter *padapter); 76 int rtw_free_rm_priv(_adapter *padapter); 77 78 unsigned int rm_on_action(_adapter *padapter, union recv_frame *precv_frame); 79 void RM_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); 80 void rtw_ap_parse_sta_rm_en_cap(_adapter *padapter, 81 struct sta_info *psta, struct rtw_ieee802_11_elems *elems); 82 83 int rm_post_event(_adapter *padapter, u32 rmid, enum RM_EV_ID evid); 84 void rm_handler(_adapter *padapter, struct rm_event *pev); 85 86 u8 rm_add_nb_req(_adapter *padapter, struct sta_info *psta); 87 88 #endif /*CONFIG_RTW_80211K */ 89 #endif /* __RTW_RM_H_ */ 90