1 /* 2 * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 /* 20 * DOC: contains scan cache entry api 21 */ 22 23 #ifndef _WLAN_SCAN_CACHE_DB_H_ 24 #define _WLAN_SCAN_CACHE_DB_H_ 25 26 #include <scheduler_api.h> 27 #include <wlan_objmgr_psoc_obj.h> 28 #include <wlan_objmgr_pdev_obj.h> 29 #include <wlan_objmgr_vdev_obj.h> 30 #include <wlan_scan_public_structs.h> 31 32 #define SCAN_HASH_SIZE 64 33 #define SCAN_GET_HASH(addr) \ 34 (((const uint8_t *)(addr))[QDF_MAC_ADDR_SIZE - 1] % SCAN_HASH_SIZE) 35 36 #define SCM_PCL_RSSI_THRESHOLD -75 37 #define BEST_CANDIDATE_MAX_BSS_SCORE 10000 38 39 #define ADJACENT_CHANNEL_RSSI_THRESHOLD -80 40 41 /** 42 * struct scan_dbs - scan cache data base definition 43 * @num_entries: number of scan entries 44 * @scan_hash_tbl: link list of bssid hashed scan cache entries for a pdev 45 */ 46 struct scan_dbs { 47 uint32_t num_entries; 48 qdf_spinlock_t scan_db_lock; 49 qdf_list_t scan_hash_tbl[SCAN_HASH_SIZE]; 50 }; 51 52 /** 53 * struct scan_bcn_probe_event - beacon/probe info 54 * @frm_type: frame type 55 * @rx_data: mgmt rx data 56 * @psoc: psoc pointer 57 * @buf: rx frame 58 */ 59 struct scan_bcn_probe_event { 60 uint32_t frm_type; 61 struct mgmt_rx_event_params *rx_data; 62 struct wlan_objmgr_psoc *psoc; 63 qdf_nbuf_t buf; 64 }; 65 66 /** 67 * scm_handle_bcn_probe() - Process beacon and probe rsp 68 * @bcn: beacon info; 69 * 70 * API to handle the beacon/probe resp 71 * 72 * Return: QDF status. 73 */ 74 QDF_STATUS scm_handle_bcn_probe(struct scheduler_msg *msg); 75 76 /** 77 * scm_age_out_entries() - Age out entries older than aging time 78 * @psoc: psoc pointer 79 * @scan_db: scan database 80 * 81 * Return: void. 82 */ 83 void scm_age_out_entries(struct wlan_objmgr_psoc *psoc, 84 struct scan_dbs *scan_db); 85 86 /** 87 * scm_get_scan_result() - fetches scan result 88 * @pdev: pdev info 89 * @filter: Filters 90 * 91 * This function fetches scan result 92 * 93 * Return: scan list 94 */ 95 qdf_list_t *scm_get_scan_result(struct wlan_objmgr_pdev *pdev, 96 struct scan_filter *filter); 97 98 /** 99 * scm_purge_scan_results() - purge the scan list 100 * @scan_result: scan list to be purged 101 * 102 * This function purge the temp scan list 103 * 104 * Return: QDF_STATUS 105 */ 106 QDF_STATUS scm_purge_scan_results(qdf_list_t *scan_result); 107 108 /** 109 * scm_update_scan_mlme_info() - updates scan entry with mlme data 110 * @pdev: pdev object 111 * @scan_entry: source scan entry to read mlme info 112 * 113 * This function updates scan db with scan_entry->mlme_info 114 * 115 * Return: QDF_STATUS 116 */ 117 QDF_STATUS scm_update_scan_mlme_info(struct wlan_objmgr_pdev *pdev, 118 struct scan_cache_entry *scan_entry); 119 120 /** 121 * scm_flush_results() - flush scan entries matching the filter 122 * @pdev: vdev object 123 * @filter: filter to flush the scan entries 124 * 125 * Flush scan entries matching the filter. 126 * 127 * Return: QDF status. 128 */ 129 QDF_STATUS scm_flush_results(struct wlan_objmgr_pdev *pdev, 130 struct scan_filter *filter); 131 132 /** 133 * scm_filter_valid_channel() - The Public API to filter scan result 134 * based on valid channel list 135 * @pdev: pdev object 136 * @chan_list: valid channel list 137 * @num_chan: number of valid channels 138 * 139 * The Public API to to filter scan result 140 * based on valid channel list. 141 * 142 * Return: void. 143 */ 144 void scm_filter_valid_channel(struct wlan_objmgr_pdev *pdev, 145 uint8_t *chan_list, uint32_t num_chan); 146 147 /** 148 * scm_iterate_scan_db() - function to iterate scan table 149 * @pdev: pdev object 150 * @func: iterator function pointer 151 * @arg: argument to be passed to func() 152 * 153 * API, this API iterates scan table and invokes func 154 * on each scan enetry by passing scan entry and arg. 155 * 156 * Return: QDF_STATUS 157 */ 158 QDF_STATUS 159 scm_iterate_scan_db(struct wlan_objmgr_pdev *pdev, 160 scan_iterator_func func, void *arg); 161 162 /** 163 * scm_scan_register_bcn_cb() - API to register api to indicate bcn/probe 164 * as soon as they are received 165 * @pdev: psoc 166 * @cb: callback to be registered 167 * @type: Type of callback to be registered 168 * 169 * Return: enum scm_scan_status 170 */ 171 QDF_STATUS scm_scan_register_bcn_cb(struct wlan_objmgr_psoc *psoc, 172 update_beacon_cb cb, enum scan_cb_type type); 173 174 /** 175 * scm_db_init() - API to init scan db 176 * @psoc: psoc 177 * 178 * Return: QDF_STATUS 179 */ 180 QDF_STATUS scm_db_init(struct wlan_objmgr_psoc *psoc); 181 182 /** 183 * scm_db_deinit() - API to deinit scan db 184 * @psoc: psoc 185 * 186 * Return: QDF_STATUS 187 */ 188 QDF_STATUS scm_db_deinit(struct wlan_objmgr_psoc *psoc); 189 190 /** 191 * scm_validate_scoring_config() - validate score config 192 * @score_cfg: config to be validated 193 * 194 * Return: void 195 */ 196 void scm_validate_scoring_config( 197 struct scoring_config *score_cfg); 198 #endif 199