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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user