qcacld-3.0: Configure non aggr TX packet retransmission
Wireless application needs to tune parameters per AC based. Such as VI/VO queue use the different re-transmission attempts while other queue keeps the default value. It helps to improve the video/audio performance in noisy environment. this change add the ability to config re-transmission attempts of non aggregation QOS packets. Change-Id: I95404302463275803e3feff3038f04c900b14705 CRs-Fixed: 2323555
This commit is contained in:
@@ -479,6 +479,14 @@ static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
|
|||||||
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
|
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
|
||||||
qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
|
qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
|
||||||
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
|
cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
|
||||||
|
qos_aggr_params->tx_non_aggr_sw_retry_threshold_be =
|
||||||
|
cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BE);
|
||||||
|
qos_aggr_params->tx_non_aggr_sw_retry_threshold_bk =
|
||||||
|
cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BK);
|
||||||
|
qos_aggr_params->tx_non_aggr_sw_retry_threshold_vi =
|
||||||
|
cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VI);
|
||||||
|
qos_aggr_params->tx_non_aggr_sw_retry_threshold_vo =
|
||||||
|
cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VO);
|
||||||
qos_aggr_params->sap_max_inactivity_override =
|
qos_aggr_params->sap_max_inactivity_override =
|
||||||
cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
|
cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
|
||||||
}
|
}
|
||||||
|
@@ -294,6 +294,110 @@
|
|||||||
CFG_VALUE_OR_DEFAULT, \
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
"Tx aggregation retry value for VO")
|
"Tx aggregation retry value for VO")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gTxNonAggSwRetryBE - Configure Tx non aggregation sw retry for BE
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 64
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* gTxNonAggSwRetryBE gives an option to configure Tx non aggregation sw
|
||||||
|
* retry for BE. This can be useful in debugging throughput issues.
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_TX_NON_AGGR_SW_RETRY_BE CFG_INI_UINT( \
|
||||||
|
"gTxNonAggSwRetryBE", \
|
||||||
|
0, \
|
||||||
|
64, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Tx non aggregation retry value for BE")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gTxNonAggSwRetryBK - Configure Tx non aggregation sw retry for BK
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 64
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* gTxNonAggSwRetryBK gives an option to configure Tx non aggregation sw
|
||||||
|
* retry for BK. This can be useful in debugging throughput issues.
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_TX_NON_AGGR_SW_RETRY_BK CFG_INI_UINT( \
|
||||||
|
"gTxNonAggSwRetryBK", \
|
||||||
|
0, \
|
||||||
|
64, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Tx non aggregation retry value for BK")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gTxNonAggSwRetryVI - Configure Tx non aggregation sw retry for VI
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 64
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* gTxNonAggSwRetryVI gives an option to configure Tx non aggregation sw
|
||||||
|
* retry for VI. This can be useful in debugging throughput issues.
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_TX_NON_AGGR_SW_RETRY_VI CFG_INI_UINT( \
|
||||||
|
"gTxNonAggSwRetryVI", \
|
||||||
|
0, \
|
||||||
|
64, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Tx non aggregation retry value for VI")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gTxNonAggSwRetryVO - Configure Tx non aggregation sw retry for VO
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 64
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* gTxNonAggSwRetryVO gives an option to configure Tx non aggregation sw
|
||||||
|
* retry for VO. This can be useful in debugging throughput issues.
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_TX_NON_AGGR_SW_RETRY_VO CFG_INI_UINT( \
|
||||||
|
"gTxNonAggSwRetryVO", \
|
||||||
|
0, \
|
||||||
|
64, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Tx non aggregation retry value for VO")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <ini>
|
* <ini>
|
||||||
* gSapMaxInactivityOverride - Configure
|
* gSapMaxInactivityOverride - Configure
|
||||||
@@ -322,6 +426,7 @@
|
|||||||
"SAP maximum inactivity override flag")
|
"SAP maximum inactivity override flag")
|
||||||
|
|
||||||
#define CFG_QOS_ALL \
|
#define CFG_QOS_ALL \
|
||||||
|
CFG(CFG_SAP_MAX_INACTIVITY_OVERRIDE) \
|
||||||
CFG(CFG_TX_AGGREGATION_SIZE) \
|
CFG(CFG_TX_AGGREGATION_SIZE) \
|
||||||
CFG(CFG_TX_AGGREGATION_SIZEBE) \
|
CFG(CFG_TX_AGGREGATION_SIZEBE) \
|
||||||
CFG(CFG_TX_AGGREGATION_SIZEBK) \
|
CFG(CFG_TX_AGGREGATION_SIZEBK) \
|
||||||
@@ -332,6 +437,9 @@
|
|||||||
CFG(CFG_TX_AGGR_SW_RETRY_BK) \
|
CFG(CFG_TX_AGGR_SW_RETRY_BK) \
|
||||||
CFG(CFG_TX_AGGR_SW_RETRY_VI) \
|
CFG(CFG_TX_AGGR_SW_RETRY_VI) \
|
||||||
CFG(CFG_TX_AGGR_SW_RETRY_VO) \
|
CFG(CFG_TX_AGGR_SW_RETRY_VO) \
|
||||||
CFG(CFG_SAP_MAX_INACTIVITY_OVERRIDE)
|
CFG(CFG_TX_NON_AGGR_SW_RETRY_BE) \
|
||||||
|
CFG(CFG_TX_NON_AGGR_SW_RETRY_BK) \
|
||||||
|
CFG(CFG_TX_NON_AGGR_SW_RETRY_VI) \
|
||||||
|
CFG(CFG_TX_NON_AGGR_SW_RETRY_VO)
|
||||||
|
|
||||||
#endif /* __CFG_MLME_QOS_H */
|
#endif /* __CFG_MLME_QOS_H */
|
||||||
|
@@ -486,10 +486,14 @@ struct wlan_mlme_vht_caps {
|
|||||||
* @tx_aggregation_size_vi: No. of MPDUs for VI queue for TX aggr
|
* @tx_aggregation_size_vi: No. of MPDUs for VI queue for TX aggr
|
||||||
* @tx_aggregation_size_vo: No. of MPDUs for VO queue for TX aggr
|
* @tx_aggregation_size_vo: No. of MPDUs for VO queue for TX aggr
|
||||||
* @rx_aggregation_size: No. of MPDUs for RX aggr
|
* @rx_aggregation_size: No. of MPDUs for RX aggr
|
||||||
* @tx_aggr_sw_retry_threshold_be: Tx aggregation sw retry for BE
|
* @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for BE
|
||||||
* @tx_aggr_sw_retry_threshold_bk: Tx aggregation sw retry for BK
|
* @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for BK
|
||||||
* @tx_aggr_sw_retry_threshold_vi: Tx aggregation sw retry for VI
|
* @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for VI
|
||||||
* @tx_aggr_sw_retry_threshold_vo: Tx aggregation sw retry for VO
|
* @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for VO
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for BE
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for BK
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for VI
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for VO
|
||||||
* @sap_max_inactivity_override: Override updating ap_sta_inactivity from
|
* @sap_max_inactivity_override: Override updating ap_sta_inactivity from
|
||||||
* hostapd.conf
|
* hostapd.conf
|
||||||
*/
|
*/
|
||||||
@@ -504,6 +508,10 @@ struct wlan_mlme_qos {
|
|||||||
uint32_t tx_aggr_sw_retry_threshold_bk;
|
uint32_t tx_aggr_sw_retry_threshold_bk;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vi;
|
uint32_t tx_aggr_sw_retry_threshold_vi;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vo;
|
uint32_t tx_aggr_sw_retry_threshold_vo;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_be;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vo;
|
||||||
bool sap_max_inactivity_override;
|
bool sap_max_inactivity_override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -6309,19 +6309,27 @@ struct sir_set_tx_rx_aggregation_size {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct sir_set_tx_aggr_sw_retry_threshold - set sw retry threshold
|
* struct sir_set_tx_sw_retry_threshold - set sw retry threshold
|
||||||
* @vdev_id: vdev id of the session
|
* @vdev_id: vdev id of the session
|
||||||
* @tx_aggr_sw_retry_threshold_be: sw retry threshold for BE
|
* @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for BE
|
||||||
* @tx_aggr_sw_retry_threshold_bk: sw retry threshold for BK
|
* @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for BK
|
||||||
* @tx_aggr_sw_retry_threshold_vi: sw retry threshold for VI
|
* @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for VI
|
||||||
* @tx_aggr_sw_retry_threshold_vo: sw retry threshold for VO
|
* @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for VO
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for BE
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for BK
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for VI
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for VO
|
||||||
*/
|
*/
|
||||||
struct sir_set_tx_aggr_sw_retry_threshold {
|
struct sir_set_tx_sw_retry_threshold {
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_be;
|
uint32_t tx_aggr_sw_retry_threshold_be;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_bk;
|
uint32_t tx_aggr_sw_retry_threshold_bk;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vi;
|
uint32_t tx_aggr_sw_retry_threshold_vi;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vo;
|
uint32_t tx_aggr_sw_retry_threshold_vo;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_be;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vo;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -16948,28 +16948,36 @@ QDF_STATUS csr_issue_add_sta_for_session_req(tpAniSirGlobal pMac,
|
|||||||
|
|
||||||
add_sta_self_req->tx_aggregation_size = qos_aggr->tx_aggregation_size;
|
add_sta_self_req->tx_aggregation_size = qos_aggr->tx_aggregation_size;
|
||||||
add_sta_self_req->tx_aggregation_size_be =
|
add_sta_self_req->tx_aggregation_size_be =
|
||||||
qos_aggr->tx_aggregation_size_be;
|
qos_aggr->tx_aggregation_size_be;
|
||||||
add_sta_self_req->tx_aggregation_size_bk =
|
add_sta_self_req->tx_aggregation_size_bk =
|
||||||
qos_aggr->tx_aggregation_size_bk;
|
qos_aggr->tx_aggregation_size_bk;
|
||||||
add_sta_self_req->tx_aggregation_size_vi =
|
add_sta_self_req->tx_aggregation_size_vi =
|
||||||
qos_aggr->tx_aggregation_size_vi;
|
qos_aggr->tx_aggregation_size_vi;
|
||||||
add_sta_self_req->tx_aggregation_size_vo =
|
add_sta_self_req->tx_aggregation_size_vo =
|
||||||
qos_aggr->tx_aggregation_size_vo;
|
qos_aggr->tx_aggregation_size_vo;
|
||||||
|
|
||||||
add_sta_self_req->rx_aggregation_size = qos_aggr->rx_aggregation_size;
|
add_sta_self_req->rx_aggregation_size = qos_aggr->rx_aggregation_size;
|
||||||
add_sta_self_req->tx_aggr_sw_retry_threshold_be =
|
add_sta_self_req->tx_aggr_sw_retry_threshold_be =
|
||||||
qos_aggr->tx_aggr_sw_retry_threshold_be;
|
qos_aggr->tx_aggr_sw_retry_threshold_be;
|
||||||
add_sta_self_req->tx_aggr_sw_retry_threshold_bk =
|
add_sta_self_req->tx_aggr_sw_retry_threshold_bk =
|
||||||
qos_aggr->tx_aggr_sw_retry_threshold_bk;
|
qos_aggr->tx_aggr_sw_retry_threshold_bk;
|
||||||
add_sta_self_req->tx_aggr_sw_retry_threshold_vi =
|
add_sta_self_req->tx_aggr_sw_retry_threshold_vi =
|
||||||
qos_aggr->tx_aggr_sw_retry_threshold_vi;
|
qos_aggr->tx_aggr_sw_retry_threshold_vi;
|
||||||
add_sta_self_req->tx_aggr_sw_retry_threshold_vo =
|
add_sta_self_req->tx_aggr_sw_retry_threshold_vo =
|
||||||
qos_aggr->tx_aggr_sw_retry_threshold_vo;
|
qos_aggr->tx_aggr_sw_retry_threshold_vo;
|
||||||
|
add_sta_self_req->tx_non_aggr_sw_retry_threshold_be =
|
||||||
|
qos_aggr->tx_non_aggr_sw_retry_threshold_be;
|
||||||
|
add_sta_self_req->tx_non_aggr_sw_retry_threshold_bk =
|
||||||
|
qos_aggr->tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
add_sta_self_req->tx_non_aggr_sw_retry_threshold_vi =
|
||||||
|
qos_aggr->tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
add_sta_self_req->tx_non_aggr_sw_retry_threshold_vo =
|
||||||
|
qos_aggr->tx_non_aggr_sw_retry_threshold_vo;
|
||||||
|
|
||||||
add_sta_self_req->enable_bcast_probe_rsp =
|
add_sta_self_req->enable_bcast_probe_rsp =
|
||||||
pMac->mlme_cfg->oce.enable_bcast_probe_rsp;
|
pMac->mlme_cfg->oce.enable_bcast_probe_rsp;
|
||||||
add_sta_self_req->fils_max_chan_guard_time =
|
add_sta_self_req->fils_max_chan_guard_time =
|
||||||
pMac->mlme_cfg->sta.fils_max_chan_guard_time;
|
pMac->mlme_cfg->sta.fils_max_chan_guard_time;
|
||||||
add_sta_self_req->pkt_err_disconn_th =
|
add_sta_self_req->pkt_err_disconn_th =
|
||||||
pMac->mlme_cfg->gen.dropped_pkt_disconnect_thresh;
|
pMac->mlme_cfg->gen.dropped_pkt_disconnect_thresh;
|
||||||
add_sta_self_req->oce_feature_bitmap =
|
add_sta_self_req->oce_feature_bitmap =
|
||||||
|
@@ -286,7 +286,8 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac
|
|||||||
(struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size);
|
(struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size);
|
||||||
/**
|
/**
|
||||||
* wma_set_sw_retry_threshold() - set sw retry threshold per AC for tx
|
* wma_set_sw_retry_threshold() - set sw retry threshold per AC for tx
|
||||||
* @tx_rx_aggregation_size: value needs to set to firmware
|
* @handle: wma handle
|
||||||
|
* @tx_sw_retry_threshold: value needs to set to firmware
|
||||||
*
|
*
|
||||||
* This function sends WMI command to set the sw retry threshold per AC
|
* This function sends WMI command to set the sw retry threshold per AC
|
||||||
* for Tx.
|
* for Tx.
|
||||||
@@ -294,7 +295,8 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac
|
|||||||
* Return: QDF_STATUS.
|
* Return: QDF_STATUS.
|
||||||
*/
|
*/
|
||||||
QDF_STATUS wma_set_sw_retry_threshold
|
QDF_STATUS wma_set_sw_retry_threshold
|
||||||
(struct sir_set_tx_aggr_sw_retry_threshold *tx_rx_aggregation_size);
|
(WMA_HANDLE handle,
|
||||||
|
struct sir_set_tx_sw_retry_threshold *tx_sw_retry_threshold);
|
||||||
/**
|
/**
|
||||||
* wma_get_sar_limit() - get SAR limits from the target
|
* wma_get_sar_limit() - get SAR limits from the target
|
||||||
* @handle: wma handle
|
* @handle: wma handle
|
||||||
|
@@ -1174,10 +1174,14 @@ typedef struct sMaxTxPowerPerBandParams {
|
|||||||
* @enable_bcast_probe_rsp: enable broadcast probe response
|
* @enable_bcast_probe_rsp: enable broadcast probe response
|
||||||
* @fils_max_chan_guard_time: FILS max channel guard time
|
* @fils_max_chan_guard_time: FILS max channel guard time
|
||||||
* @pkt_err_disconn_th: packet drop threshold
|
* @pkt_err_disconn_th: packet drop threshold
|
||||||
* @tx_aggr_sw_retry_threshold_be: sw retry threashold for be
|
* @tx_aggr_sw_retry_threshold_be: aggr sw retry threshold for be
|
||||||
* @tx_aggr_sw_retry_threshold_bk: sw retry threashold for bk
|
* @tx_aggr_sw_retry_threshold_bk: aggr sw retry threshold for bk
|
||||||
* @tx_aggr_sw_retry_threshold_vi: sw retry threashold for vi
|
* @tx_aggr_sw_retry_threshold_vi: aggr sw retry threshold for vi
|
||||||
* @tx_aggr_sw_retry_threshold_vo: sw retry threashold for vo
|
* @tx_aggr_sw_retry_threshold_vo: aggr sw retry threshold for vo
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_be: non aggr sw retry threshold for be
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_bk: non aggr sw retry threshold for bk
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vi: non aggr sw retry threshold for vi
|
||||||
|
* @tx_non_aggr_sw_retry_threshold_vo: non aggr sw retry threshold for vo
|
||||||
*/
|
*/
|
||||||
struct add_sta_self_params {
|
struct add_sta_self_params {
|
||||||
tSirMacAddr self_mac_addr;
|
tSirMacAddr self_mac_addr;
|
||||||
@@ -1202,6 +1206,10 @@ struct add_sta_self_params {
|
|||||||
uint32_t tx_aggr_sw_retry_threshold_bk;
|
uint32_t tx_aggr_sw_retry_threshold_bk;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vi;
|
uint32_t tx_aggr_sw_retry_threshold_vi;
|
||||||
uint32_t tx_aggr_sw_retry_threshold_vo;
|
uint32_t tx_aggr_sw_retry_threshold_vo;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_be;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
uint32_t tx_non_aggr_sw_retry_threshold_vo;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2345,7 +2345,7 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
|
|||||||
struct vdev_create_params params = { 0 };
|
struct vdev_create_params params = { 0 };
|
||||||
u_int8_t vdev_id;
|
u_int8_t vdev_id;
|
||||||
struct sir_set_tx_rx_aggregation_size tx_rx_aggregation_size;
|
struct sir_set_tx_rx_aggregation_size tx_rx_aggregation_size;
|
||||||
struct sir_set_tx_aggr_sw_retry_threshold tx_aggr_sw_retry_threshold;
|
struct sir_set_tx_sw_retry_threshold tx_sw_retry_threshold;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct wlan_objmgr_peer *obj_peer;
|
struct wlan_objmgr_peer *obj_peer;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
@@ -2458,15 +2458,25 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
|
|||||||
tx_rx_aggregation_size.tx_aggregation_size_vo =
|
tx_rx_aggregation_size.tx_aggregation_size_vo =
|
||||||
self_sta_req->tx_aggregation_size_vo;
|
self_sta_req->tx_aggregation_size_vo;
|
||||||
|
|
||||||
tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_be =
|
tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_be =
|
||||||
self_sta_req->tx_aggr_sw_retry_threshold_be;
|
self_sta_req->tx_aggr_sw_retry_threshold_be;
|
||||||
tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_bk =
|
tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_bk =
|
||||||
self_sta_req->tx_aggr_sw_retry_threshold_bk;
|
self_sta_req->tx_aggr_sw_retry_threshold_bk;
|
||||||
tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_vi =
|
tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_vi =
|
||||||
self_sta_req->tx_aggr_sw_retry_threshold_vi;
|
self_sta_req->tx_aggr_sw_retry_threshold_vi;
|
||||||
tx_aggr_sw_retry_threshold.tx_aggr_sw_retry_threshold_vo =
|
tx_sw_retry_threshold.tx_aggr_sw_retry_threshold_vo =
|
||||||
self_sta_req->tx_aggr_sw_retry_threshold_vo;
|
self_sta_req->tx_aggr_sw_retry_threshold_vo;
|
||||||
tx_aggr_sw_retry_threshold.vdev_id = self_sta_req->session_id;
|
|
||||||
|
tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_be =
|
||||||
|
self_sta_req->tx_non_aggr_sw_retry_threshold_be;
|
||||||
|
tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_bk =
|
||||||
|
self_sta_req->tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_vi =
|
||||||
|
self_sta_req->tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
tx_sw_retry_threshold.tx_non_aggr_sw_retry_threshold_vo =
|
||||||
|
self_sta_req->tx_non_aggr_sw_retry_threshold_vo;
|
||||||
|
|
||||||
|
tx_sw_retry_threshold.vdev_id = self_sta_req->session_id;
|
||||||
|
|
||||||
|
|
||||||
switch (self_sta_req->type) {
|
switch (self_sta_req->type) {
|
||||||
@@ -2488,7 +2498,8 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
|
|||||||
wma_set_sta_sa_query_param(wma_handle, vdev_id);
|
wma_set_sta_sa_query_param(wma_handle, vdev_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = wma_set_sw_retry_threshold(&tx_aggr_sw_retry_threshold);
|
ret = wma_set_sw_retry_threshold(wma_handle,
|
||||||
|
&tx_sw_retry_threshold);
|
||||||
if (QDF_IS_STATUS_ERROR(ret))
|
if (QDF_IS_STATUS_ERROR(ret))
|
||||||
WMA_LOGE("failed to set retry threshold(err=%d)", ret);
|
WMA_LOGE("failed to set retry threshold(err=%d)", ret);
|
||||||
break;
|
break;
|
||||||
|
@@ -4790,72 +4790,112 @@ QDF_STATUS wma_set_tx_rx_aggregation_size_per_ac(
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS wma_set_sw_retry_threshold(
|
static QDF_STATUS wma_set_sw_retry_by_qos(
|
||||||
struct sir_set_tx_aggr_sw_retry_threshold *tx_sw_retry_threshold)
|
tp_wma_handle handle, uint8_t vdev_id,
|
||||||
|
wmi_vdev_custom_sw_retry_type_t retry_type,
|
||||||
|
wmi_traffic_ac ac_type,
|
||||||
|
uint32_t sw_retry)
|
||||||
{
|
{
|
||||||
tp_wma_handle wma_handle;
|
|
||||||
wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *cmd;
|
wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *cmd;
|
||||||
int32_t len;
|
int32_t len;
|
||||||
wmi_buf_t buf;
|
wmi_buf_t buf;
|
||||||
u_int8_t *buf_ptr;
|
u_int8_t *buf_ptr;
|
||||||
int ret;
|
int ret;
|
||||||
int queue_num;
|
|
||||||
uint32_t tx_aggr_retry[WMI_AC_MAX];
|
|
||||||
|
|
||||||
wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
|
len = sizeof(*cmd);
|
||||||
|
buf = wmi_buf_alloc(handle->wmi_handle, len);
|
||||||
|
|
||||||
|
if (!buf)
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
|
buf_ptr = (u_int8_t *)wmi_buf_data(buf);
|
||||||
|
cmd = (wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *)buf_ptr;
|
||||||
|
|
||||||
|
WMITLV_SET_HDR(&cmd->tlv_header,
|
||||||
|
WMITLV_TAG_STRUC_wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param,
|
||||||
|
WMITLV_GET_STRUCT_TLVLEN(
|
||||||
|
wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param));
|
||||||
|
|
||||||
|
cmd->vdev_id = vdev_id;
|
||||||
|
cmd->ac_type = ac_type;
|
||||||
|
cmd->sw_retry_type = retry_type;
|
||||||
|
cmd->sw_retry_th = sw_retry;
|
||||||
|
|
||||||
|
wma_debug("ac_type: %d re_type: %d threshold: %d vid: %d",
|
||||||
|
cmd->ac_type, cmd->sw_retry_type,
|
||||||
|
cmd->sw_retry_th, cmd->vdev_id);
|
||||||
|
|
||||||
|
ret = wmi_unified_cmd_send(handle->wmi_handle,
|
||||||
|
buf, len,
|
||||||
|
WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID);
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
wmi_buf_free(buf);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wma_set_sw_retry_threshold(
|
||||||
|
WMA_HANDLE handle,
|
||||||
|
struct sir_set_tx_sw_retry_threshold *tx_sw_retry_threshold)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret;
|
||||||
|
tp_wma_handle wma_handle;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
int retry_type, queue_num;
|
||||||
|
uint32_t tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_MAX][WMI_AC_MAX];
|
||||||
|
uint32_t sw_retry;
|
||||||
|
|
||||||
|
wma_handle = (tp_wma_handle)handle;
|
||||||
|
|
||||||
if (!tx_sw_retry_threshold) {
|
if (!tx_sw_retry_threshold) {
|
||||||
WMA_LOGE("%s: invalid pointer", __func__);
|
wma_err("%s: invalid pointer", __func__);
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wma_handle) {
|
if (!wma_handle) {
|
||||||
WMA_LOGE("%s: WMA context is invald!", __func__);
|
wma_err("%s: WMA context is invalid!", __func__);
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_aggr_retry[0] =
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_BE] =
|
||||||
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_be;
|
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_be;
|
||||||
tx_aggr_retry[1] =
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_BK] =
|
||||||
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_bk;
|
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_bk;
|
||||||
tx_aggr_retry[2] =
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_VI] =
|
||||||
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vi;
|
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vi;
|
||||||
tx_aggr_retry[3] =
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR][WMI_AC_VO] =
|
||||||
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vo;
|
tx_sw_retry_threshold->tx_aggr_sw_retry_threshold_vo;
|
||||||
|
|
||||||
for (queue_num = 0; queue_num < WMI_AC_MAX; queue_num++) {
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_BE] =
|
||||||
if (tx_aggr_retry[queue_num] == 0)
|
tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_be;
|
||||||
continue;
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_BK] =
|
||||||
|
tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_bk;
|
||||||
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_VI] =
|
||||||
|
tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_vi;
|
||||||
|
tx_sw_retry[WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR][WMI_AC_VO] =
|
||||||
|
tx_sw_retry_threshold->tx_non_aggr_sw_retry_threshold_vo;
|
||||||
|
|
||||||
len = sizeof(*cmd);
|
retry_type = WMI_VDEV_CUSTOM_SW_RETRY_TYPE_NONAGGR;
|
||||||
buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
|
while (retry_type < WMI_VDEV_CUSTOM_SW_RETRY_TYPE_MAX) {
|
||||||
if (!buf)
|
for (queue_num = 0; queue_num < WMI_AC_MAX; queue_num++) {
|
||||||
return QDF_STATUS_E_NOMEM;
|
if (tx_sw_retry[retry_type][queue_num] == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
buf_ptr = (u_int8_t *)wmi_buf_data(buf);
|
vdev_id = tx_sw_retry_threshold->vdev_id;
|
||||||
cmd =
|
sw_retry = tx_sw_retry[retry_type][queue_num];
|
||||||
(wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param *)buf_ptr;
|
ret = wma_set_sw_retry_by_qos(wma_handle,
|
||||||
|
vdev_id,
|
||||||
|
retry_type,
|
||||||
|
queue_num,
|
||||||
|
sw_retry);
|
||||||
|
|
||||||
WMITLV_SET_HDR(&cmd->tlv_header,
|
if (QDF_IS_STATUS_ERROR(ret))
|
||||||
WMITLV_TAG_STRUC_wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param,
|
return ret;
|
||||||
WMITLV_GET_STRUCT_TLVLEN(
|
|
||||||
wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param));
|
|
||||||
|
|
||||||
cmd->vdev_id = tx_sw_retry_threshold->vdev_id;
|
|
||||||
cmd->ac_type = queue_num;
|
|
||||||
cmd->sw_retry_type = WMI_VDEV_CUSTOM_SW_RETRY_TYPE_AGGR;
|
|
||||||
cmd->sw_retry_th = tx_aggr_retry[queue_num];
|
|
||||||
|
|
||||||
WMA_LOGD("queue: %d type: %d threshold: %d vdev: %d",
|
|
||||||
queue_num, cmd->sw_retry_type,
|
|
||||||
cmd->sw_retry_th, cmd->vdev_id);
|
|
||||||
|
|
||||||
ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
|
|
||||||
WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID);
|
|
||||||
if (ret) {
|
|
||||||
wmi_buf_free(buf);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
retry_type++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
Reference in New Issue
Block a user