blob: abefd5266becf72bcda4d2809afeab0447950793 [file] [log] [blame]
/*
* Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
#if !defined(__SAP_CH_SELECT_H)
#define __SAP_CH_SELECT_H
/*===========================================================================
sapChSelect.h
OVERVIEW:
This software unit holds the implementation of the WLAN SAP modules
functions for channel selection.
DEPENDENCIES:
Are listed for each API below.
===========================================================================*/
/*--------------------------------------------------------------------------
Include Files
------------------------------------------------------------------------*/
#include "ani_global.h"
/*--------------------------------------------------------------------------
defines and enum
--------------------------------------------------------------------------*/
#define SPECT_24GHZ_CH_COUNT (11) /* USA regulatory domain */
#define SAPDFS_NORMALISE_1000 (1000/9) /* Case of spec20 with channel diff = 0 */
/* Gen 5 values
#define SOFTAP_MIN_RSSI (-85)
#define SOFTAP_MAX_RSSI (-45)
*/
#define SOFTAP_MIN_RSSI (-100)
#define SOFTAP_MAX_RSSI (0)
#define SOFTAP_MIN_COUNT (0)
#define SOFTAP_MAX_COUNT (60)
#define SOFTAP_RSSI_WEIGHT (20)
#define SOFTAP_COUNT_WEIGHT (20)
#define SAP_DEFAULT_24GHZ_CHANNEL (6)
#define SAP_DEFAULT_5GHZ_CHANNEL (40)
#define SAP_CHANNEL_NOT_SELECTED (0)
#define SOFTAP_HT20_CHANNELWIDTH 0
#define SAP_SUBBAND1_RSSI_EFFECT_PRIMARY (-20) /* In HT40/VHT80, Effect of primary Channel RSSi on Subband1 */
#define SAP_SUBBAND2_RSSI_EFFECT_PRIMARY (-30) /* In VHT80, Effect of primary Channel RSSI on Subband2 */
#define SAP_SUBBAND3_RSSI_EFFECT_PRIMARY (-40) /* In VHT80, Effect of Primary Channel RSSI on Subband3 */
#define SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY (-10) /* In 2.4GHZ, Effect of Primary Channel RSSI on First Overlapping Channel */
#define SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY (-20) /* In 2.4GHZ, Effect of Primary Channel RSSI on Second Overlapping Channel */
#define SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY (-30) /* In 2.4GHZ, Effect of Primary Channel RSSI on Third Overlapping Channel */
#define SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY (-40) /* In 2.4GHZ, Effect of Primary Channel RSSI on Fourth Overlapping Channel */
typedef enum {
CHANNEL_1 = 1,
CHANNEL_2,
CHANNEL_3,
CHANNEL_4,
CHANNEL_5,
CHANNEL_6,
CHANNEL_7,
CHANNEL_8,
CHANNEL_9,
CHANNEL_10,
CHANNEL_11,
CHANNEL_12,
CHANNEL_13,
CHANNEL_14
} tSapChannel;
#define MAX_80MHZ_BANDS 6
#define SAP_80MHZ_MASK 0x0F
#define SAP_40MHZ_MASK_L 0x03
#define SAP_40MHZ_MASK_H 0x0C
/*
* structs for holding channel bonding bitmap
* used for finding new channel when SAP is on
* DFS channel and radar is detected.
*/
typedef struct sChannelBondingInfo {
uint8_t channelMap:4;
uint8_t rsvd:4;
uint8_t startChannel;
} tChannelBondingInfo;
typedef struct __chan_bonding_bitmap {
tChannelBondingInfo chanBondingSet[MAX_80MHZ_BANDS];
} chan_bonding_bitmap;
/**
* Structure holding information of each channel in the spectrum,
* it contains the channel number, the computed weight
*/
typedef struct sChannelInfo {
uint8_t channel;
bool valid; /* if the channel is valid to be picked as new channel */
} tChannelInfo;
typedef struct sAll5GChannelList {
uint8_t numChannel;
tChannelInfo *channelList;
} tAll5GChannelList;
typedef struct sSapChannelListInfo {
uint8_t numChannel;
uint8_t *channelList;
} tSapChannelListInfo;
typedef struct {
uint16_t chNum; /* Channel Number */
uint16_t channelWidth; /* Channel Width */
uint16_t bssCount; /* bss found in scanresult for this channel */
int32_t rssiAgr; /* Max value of rssi among all BSS(es) from scanresult for this channel */
uint32_t weight; /* Weightage of this channel */
uint32_t weight_copy; /* copy of the orignal weight */
bool valid; /* Is this a valid center frequency for regulatory domain */
} tSapSpectChInfo; /* tDfsSpectChInfo; */
/**
* Structure holding all the information required to make a
* decision for the best operating channel based on dfs formula
*/
typedef struct {
tSapSpectChInfo *pSpectCh; /* tDfsSpectChInfo *pSpectCh; // Ptr to the channels in the entire spectrum band */
uint8_t numSpectChans; /* Total num of channels in the spectrum */
} tSapChSelSpectInfo; /* tDfsChSelParams; */
/**
* Structure for channel weight calculation parameters
*/
typedef struct sSapChSelParams {
void *pSpectInfoParams; /**pDfsParams; // Filled with tSapChSelSpectInfo */
uint16_t numChannels;
} tSapChSelParams;
#define SAP_TX_LEAKAGE_THRES 310
#define SAP_TX_LEAKAGE_MAX 1000
#define SAP_TX_LEAKAGE_MIN 200
/*
* This define is used to block additional channels
* based on the new data gathered on auto platforms
* and to differentiate the leakage data among different
* platforms.
*/
#define SAP_TX_LEAKAGE_AUTO_MIN 210
typedef struct sSapTxLeakInfo {
uint8_t leak_chan; /* leak channel */
uint32_t leak_lvl; /* tx leakage lvl */
} tSapTxLeakInfo;
typedef struct sSapChanMatrixInfo {
uint8_t channel; /* channel to switch from */
tSapTxLeakInfo chan_matrix[RF_CHAN_144 - RF_CHAN_36 + 1];
} tSapChanMatrixInfo;
#endif /* if !defined __SAP_CH_SELECT_H */