qcacmn: Enable RCSA with subchannel information

Calculate the bitmap of subchannels that are affected by
radar and store in dfs structure along with flags

Algorithm:
	1). Given the radar affected subchannels list, create a
	NOL bitmap, where
	1 - Radar hit on Subchannel.
	0 - Subchannel not affected.

	2). Along with the NOL bitmap, send the Minimum Bandwidth
	for each subchannel and the Channel list's starting
	channel's centre frequency.

	Example:
	Mode : 100HT80, if radar affected subchannels are 100, 104
	and 108.
	NOL bandwidth: 20.
	NOL start frequency: 5500.
	NOL Bitmap: 11100000.

	3). During precac (precac timer running), if radar hits
	at secondary segment, the umac code that sends rcsa
	is still called, but add a new flag to not send rcsa, and
	in rootAP, channel change is not triggered, only NOL
	is updated.

Add APIs that can be called from mlme to fetch the NOL and IE
flags information from DFS structure during RCSA framing.

If subchannel marking is disabled, the new NOL bitmap has no meaning
and is hence, not sent.

CRs-Fixed: 2328377
Change-Id: I3114ff5ca2704c316c9dc83220740fac9a6a00a1
This commit is contained in:
Vignesh Mohan
2018-10-30 14:19:44 +05:30
committed by nshrivas
부모 079ec73fbc
커밋 07035aaed8
4개의 변경된 파일226개의 추가작업 그리고 5개의 파일을 삭제

파일 보기

@@ -315,6 +315,44 @@ QDF_STATUS utils_dfs_nol_update(struct wlan_objmgr_pdev *pdev);
QDF_STATUS utils_dfs_second_segment_radar_disable(
struct wlan_objmgr_pdev *pdev);
/**
* utils_dfs_fetch_nol_ie_info() - Fills the arguments with NOL information
* needed for sending RCSA.
* pdev: Pointer to DFS pdev object.
* nol_ie_bandwidth: Minimum DFS subchannel Bandwidth.
* nol_ie_startfreq: Radar affected channel list start subchannel's centre
* frequency.
* nol_ie_bitmap: Bitmap of radar affected subchannels.
*/
QDF_STATUS utils_dfs_fetch_nol_ie_info(struct wlan_objmgr_pdev *pdev,
uint8_t *nol_ie_bandwidth,
uint16_t *nol_ie_startfreq,
uint8_t *nol_ie_bitmap);
/**
* utils_dfs_set_rcsa_flags() - Set flags that are required for sending
* RCSA and NOL IE.
* pdev: Pointer to DFS pdev object.
* is_rcsa_ie_sent: Boolean to check if RCSA IE should be sent or not.
* is_nol_ie_sent: Boolean to check if NOL IE should be sent or not.
*/
QDF_STATUS utils_dfs_set_rcsa_flags(struct wlan_objmgr_pdev *pdev,
bool is_rcsa_ie_sent,
bool is_nol_ie_sent);
/**
* utils_dfs_get_rcsa_flags() - Get flags that are required for sending
* RCSA and NOL IE.
* pdev: Pointer to DFS pdev object.
* is_rcsa_ie_sent: Boolean to check if RCSA IE should be sent or not.
* is_nol_ie_sent: Boolean to check if NOL IE should be sent or not.
*/
QDF_STATUS utils_dfs_get_rcsa_flags(struct wlan_objmgr_pdev *pdev,
bool *is_rcsa_ie_sent,
bool *is_nol_ie_sent);
/**
* utils_dfs_set_cac_timer_running() - Sets the cac timer running.
* @pdev: Pointer to DFS pdev object.