qcacld-3.0: Implement CBS for EasyMesh
Implement the continuous background scan for EasyMesh. Change-Id: I2607474d5663f21b4d740316ae407bf1398a8ef7 CRs-Fixed: 3095580
This commit is contained in:

committed by
Madan Koyyalamudi

parent
764df553b9
commit
813660e27f
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@@ -26,6 +26,91 @@
|
||||
#include <wlan_objmgr_pdev_obj.h>
|
||||
#include <reg_services_public_struct.h>
|
||||
|
||||
#define TOTAL_DWELL_TIME 200
|
||||
|
||||
#define CBS_DEFAULT_RESTTIME 500 /* msec */
|
||||
#define CBS_DEFAULT_DWELL_TIME 50 /* msec */
|
||||
#define CBS_DEFAULT_WAIT_TIME 1000 /* 1 sec */
|
||||
#define CBS_DEFAULT_DWELL_SPLIT_TIME 50 /* msec */
|
||||
#define CBS_DEFAULT_DWELL_REST_TIME 500 /* msec */
|
||||
#define CBS_DEFAULT_MIN_REST_TIME 50 /* msec */
|
||||
|
||||
#define DEFAULT_BEACON_INTERVAL 100
|
||||
|
||||
#define CBS_DWELL_TIME_10MS 10
|
||||
#define CBS_DWELL_TIME_25MS 25
|
||||
#define CBS_DWELL_TIME_50MS 50
|
||||
#define CBS_DWELL_TIME_75MS 75
|
||||
#define MIN_SCAN_OFFSET_ARRAY_SIZE 0
|
||||
#define MAX_SCAN_OFFSET_ARRAY_SIZE 9
|
||||
#define SCAN_START_OFFSET_MIN 26
|
||||
|
||||
#define DEFAULT_SCAN_MAX_REST_TIME 500
|
||||
|
||||
/**
|
||||
* enum son_cbs_state - son cbs state enumeration
|
||||
* @CBS_INIT: init state
|
||||
* @CBS_SCAN: scanning state
|
||||
* @CBS_REST: rest state
|
||||
* @CBS_RANK: rank state
|
||||
* @CBS_WAIT: wait state
|
||||
*/
|
||||
enum son_cbs_state {
|
||||
CBS_INIT,
|
||||
CBS_SCAN,
|
||||
CBS_REST,
|
||||
CBS_RANK,
|
||||
CBS_WAIT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct son_cbs - son cbs struction
|
||||
* @vdev: vdev
|
||||
* @cbs_lock: cbs spin lock
|
||||
* @cbs_timer: cbs timer
|
||||
* @cbs_state: cbs state
|
||||
* @cbs_scan_requestor: scan requestor
|
||||
* @cbs_scan_id: scan id
|
||||
* @dwell_time: dwell time configuration
|
||||
* @rest_time: rest time configuration
|
||||
* @wait_time: wait time configuration
|
||||
* @scan_intvl_time: interval time configuration
|
||||
* @scan_params: scan params
|
||||
* @max_dwell_split_cnt: max dwell split counter
|
||||
* @dwell_split_cnt: dwell split counter
|
||||
* @scan_offset: scan offset array
|
||||
* @scan_dwell_rest: scan dwell rest array
|
||||
* @min_dwell_rest_time: nub dwell rest time
|
||||
* @dwell_split_time: dwell split time
|
||||
* @max_arr_size_used: max array size used
|
||||
*/
|
||||
struct son_cbs {
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
spinlock_t cbs_lock;
|
||||
qdf_timer_t cbs_timer;
|
||||
|
||||
enum son_cbs_state cbs_state;
|
||||
|
||||
wlan_scan_requester cbs_scan_requestor;
|
||||
wlan_scan_id cbs_scan_id;
|
||||
|
||||
uint32_t dwell_time;
|
||||
uint32_t rest_time;
|
||||
uint32_t wait_time;
|
||||
int32_t scan_intvl_time;
|
||||
|
||||
struct scan_start_request scan_params;
|
||||
|
||||
uint8_t max_dwell_split_cnt;
|
||||
int8_t dwell_split_cnt;
|
||||
uint32_t scan_offset[10];
|
||||
uint32_t scan_dwell_rest[10];
|
||||
uint32_t min_dwell_rest_time;
|
||||
uint32_t dwell_split_time;
|
||||
uint8_t max_arr_size_used;
|
||||
};
|
||||
|
||||
/**
|
||||
* mlme_deliver_cb - cb to deliver mlme event
|
||||
* @vdev: pointer to vdev
|
||||
@@ -88,6 +173,60 @@ QDF_STATUS wlan_son_peer_set_kickout_allow(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_objmgr_peer *peer,
|
||||
bool kickout_allow);
|
||||
|
||||
/**
|
||||
* wlan_son_cbs_init() - son cbs init
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_cbs_init(void);
|
||||
|
||||
/* wlan_son_cbs_deinit - son cbs deinit
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_cbs_deinit(void);
|
||||
|
||||
/* wlan_son_cbs_enable() - son cbs enable
|
||||
* @vdev: pointer to vdev
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_cbs_enable(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/* wlan_son_cbs_disable() - son cbs disable
|
||||
* @vdev: pointer to vdev
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_cbs_disable(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/* wlan_son_set_cbs() - son cbs set
|
||||
* @vdev: pointer to vdev
|
||||
* @enable: enable or disable son cbs
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_set_cbs(struct wlan_objmgr_vdev *vdev,
|
||||
bool enable);
|
||||
|
||||
/* wlan_son_set_cbs_wait_time() - cbs wait time configure
|
||||
* @vdev: pointer to vdev
|
||||
* @val: wait time value
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev,
|
||||
uint32_t val);
|
||||
|
||||
/* wlan_son_set_cbs_dwell_split_time() - cbs dwell spilt time configure
|
||||
* @vdev: pointer to vdev
|
||||
* @val: dwell spilt time value
|
||||
*
|
||||
* Return: 0 if succeed
|
||||
*/
|
||||
int wlan_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev,
|
||||
uint32_t val);
|
||||
|
||||
#ifdef WLAN_FEATURE_SON
|
||||
/**
|
||||
* wlan_son_peer_is_kickout_allow() - Is peer is allowed to kickout
|
||||
|
Reference in New Issue
Block a user