/*- | |
* Copyright (c) 2016 Quantenna | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions | |
* are met: | |
* 1. Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* 3. The name of the author may not be used to endorse or promote products | |
* derived from this software without specific prior written permission. | |
* | |
* Alternatively, this software may be distributed under the terms of the | |
* GNU General Public License ("GPL") version 2 as published by the Free | |
* Software Foundation. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
#ifndef IEEE80211_CHAN_SELECT_H | |
#define IEEE80211_CHAN_SELECT_H | |
#define CHAN_CCA_SIZE 4 | |
#define CHAN_NUMACIBINS 2 | |
enum chan_selection_scan_type { | |
CHAN_SELECT_SCAN_INVALID = 0, | |
CHAN_SELECT_SCAN_BW20 = 1, | |
CHAN_SELECT_SCAN_BW40 = 2, | |
CHAN_SELECT_SCAN_BW40_ABOVE = 3, | |
CHAN_SELECT_SCAN_BW40_BELOW = 4, | |
CHAN_SELECT_SCAN_BW80 = 5, | |
CHAN_SELECT_SCAN_BW160 = 6, | |
CHAN_SELECT_SCAN_MAX = 7, | |
}; | |
struct autochan_ranking_params | |
{ | |
int cci_instnt_factor; | |
int aci_instnt_factor; | |
int cci_longterm_factor; | |
int aci_longterm_factor; | |
int range_factor; | |
int dfs_factor; | |
int min_cochan_rssi; | |
int maxbw_minbenefit; | |
int dense_cci_span; | |
}; | |
struct chan_aci_params | |
{ | |
int rssi; | |
int bw; | |
int weight; | |
}; | |
struct ieee80211_chanset | |
{ | |
int pri_chan; | |
int sec20_offset; | |
int bw; | |
int center_chan; | |
int invalid; | |
int inactive; | |
int cca_array[CHAN_CCA_SIZE]; | |
int cca_pri[CHAN_NUMACIBINS]; /* Store CCA value on different RSSI strenth */ | |
int cca_intf; | |
int cci_instnt; | |
int aci_instnt; | |
int cci_longterm; | |
int aci_longterm; | |
int range_cost; | |
int is_dfs; | |
int cost; | |
}; | |
struct ieee80211_chanset_table | |
{ | |
struct ieee80211_chanset *chanset; | |
int num; | |
}; | |
#define CHAN_SEL_LOG_ERR 0 | |
#define CHAN_SEL_LOG_WARN 1 | |
#define CHAN_SEL_LOG_INFO 2 | |
#define CHAN_SEL_LOG_MAX 3 | |
#define IEEE80211_CSDBG(_level, _fmt, ...) do { \ | |
if (ic->ic_autochan_dbg_level >= (_level)) { \ | |
printk(_fmt, ##__VA_ARGS__); \ | |
} \ | |
} while (0) | |
void ieee80211_init_chanset_ranking_params(struct ieee80211com *ic); | |
int ieee80211_chan_selection_allowed(struct ieee80211com *ic); | |
int ieee80211_chanset_scan_finished(struct ieee80211com *ic); | |
int ieee80211_start_chanset_scan(struct ieee80211vap *vap, int scan_flags); | |
int ieee80211_start_chanset_selection(struct ieee80211vap *vap, int scan_flags); | |
struct ieee80211_channel * ieee80211_chanset_pick_channel(struct ieee80211vap *vap); | |
void ieee80211_clean_chanset_values(struct ieee80211com *ic); | |
#endif /* IEEE80211_CHAN_SELECT_H */ | |