qcacmn: Support CFR capture_count and MO marking requirement

Support a new capture_interval_mode: capture_count, where after
capture_count+1 number of frames, MAC stops channel capture and
waits for capture_interval duration before enabling again.

Add nob(capture_intervalmode_sel) to switch to capture_count or
capture_duration mode in wlanconfig application, where
capture_intervalmode_sel=0 indicates the old capture_durarion
mode where MAC stops channel capture after capture_duration
instead of capture_count. capture_intervalmode_sel=1 indicates
the capture_count mode.

Support MO marking: Current ENH CFR uses the existing MD/MO,
type/subtype filters to filterin the packets with programmed
type/subtype as either MD/MO. But for m_TARA it is also required
to consider the bw/nss/ta/ra setting. Therefore, it is possible
that not all the filtered-in PPDUs have channel capture and lead
to processing of packets which does not have captured data.
To overcome this issue, from QCN9000 onwards, MAC has MO marking
feature added for M_TARA filter mode, where MAC will consider
all TARA group configuration as filterin criteria & provides
an option to HOST to choose either filterin mode as FP or MO.
en_ta_ra_filter_in_as_fp is added to support MO marking.
Based on the discussion between HOST, FW & MAC teams, 0 is the
recommended & default setting for en_ta_ra_filter_in_as_fp.
Add nob to configure en_ta_ra_filter_in_as_fp but do not expose
to user.

Change-Id: I790d7ce500a7d779ea571635690f73dbc582cf33
This commit is contained in:
Shwetha G K
2020-07-22 21:24:39 +05:30
committed by snandini
父節點 9472bdfb6c
當前提交 282b71f640
共有 3 個文件被更改,包括 73 次插入0 次删除

查看文件

@@ -131,6 +131,29 @@ int target_if_cfr_get_target_type(struct wlan_objmgr_psoc *psoc);
void target_if_cfr_set_cfr_support(struct wlan_objmgr_psoc *psoc,
uint8_t value);
/**
* target_if_cfr_set_capture_count_support() - Function to set capture count
* support.
* @psoc: pointer to psoc object
* @value: value to be set
*
* Return: success/failure
*/
QDF_STATUS
target_if_cfr_set_capture_count_support(struct wlan_objmgr_psoc *psoc,
uint8_t value);
/**
* target_if_cfr_set_mo_marking_support() - Function to set MO marking support
* @psoc: pointer to psoc object
* @value: value to be set
*
* Return: success/failure
*/
QDF_STATUS
target_if_cfr_set_mo_marking_support(struct wlan_objmgr_psoc *psoc,
uint8_t value);
/**
* target_if_cfr_info_send() - Function to send cfr info to upper layers
* @pdev: pointer to pdev object

查看文件

@@ -509,6 +509,44 @@ void target_if_cfr_set_cfr_support(struct wlan_objmgr_psoc *psoc,
rx_ops->cfr_rx_ops.cfr_support_set(psoc, value);
}
QDF_STATUS
target_if_cfr_set_capture_count_support(struct wlan_objmgr_psoc *psoc,
uint8_t value)
{
struct wlan_lmac_if_rx_ops *rx_ops;
rx_ops = wlan_psoc_get_lmac_if_rxops(psoc);
if (!rx_ops) {
cfr_err("rx_ops is NULL");
return QDF_STATUS_E_INVAL;
}
if (rx_ops->cfr_rx_ops.cfr_capture_count_support_set)
return rx_ops->cfr_rx_ops.cfr_capture_count_support_set(
psoc, value);
return QDF_STATUS_E_INVAL;
}
QDF_STATUS
target_if_cfr_set_mo_marking_support(struct wlan_objmgr_psoc *psoc,
uint8_t value)
{
struct wlan_lmac_if_rx_ops *rx_ops;
rx_ops = wlan_psoc_get_lmac_if_rxops(psoc);
if (!rx_ops) {
cfr_err("rx_ops is NULL");
return QDF_STATUS_E_INVAL;
}
if (rx_ops->cfr_rx_ops.cfr_mo_marking_support_set)
return rx_ops->cfr_rx_ops.cfr_mo_marking_support_set(
psoc, value);
return QDF_STATUS_E_INVAL;
}
void target_if_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
size_t hlen, void *data, size_t dlen, void *tail,
size_t tlen)

查看文件

@@ -1642,6 +1642,7 @@ QDF_STATUS cfr_enh_init_pdev(struct wlan_objmgr_psoc *psoc,
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct pdev_cfr *pcfr;
uint32_t target_type;
struct psoc_cfr *cfr_sc;
if (!pdev) {
cfr_err("PDEV is NULL!");
@@ -1660,6 +1661,14 @@ QDF_STATUS cfr_enh_init_pdev(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_NULL_VALUE;
}
cfr_sc = wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_CFR);
if (!cfr_sc) {
cfr_err("cfr_sc is NULL");
return QDF_STATUS_E_NULL_VALUE;
}
target_type = target_if_cfr_get_target_type(psoc);
#if DIRECT_BUF_RX_ENABLE
@@ -1682,6 +1691,9 @@ QDF_STATUS cfr_enh_init_pdev(struct wlan_objmgr_psoc *psoc,
pcfr->rcc_param.num_grp_tlvs = MAX_TA_RA_ENTRIES;
pcfr->rcc_param.vdev_id = CFR_INVALID_VDEV_ID;
pcfr->rcc_param.srng_id = DEFAULT_SRNGID_CFR;
pcfr->is_cap_interval_mode_sel_support =
cfr_sc->is_cap_interval_mode_sel_support;
pcfr->is_mo_marking_support = cfr_sc->is_mo_marking_support;
target_if_cfr_default_ta_ra_config(&pcfr->rcc_param,
true, MAX_RESET_CFG_ENTRY);