qcacmn: Add API to read mgmt Rx REO snapshots
Add APIs to read management rx-reordering snapshots. CRs-Fixed: 2955865 Change-Id: I1f36705607b0bae92d422d85223f825ed0b96ef9
This commit is contained in:

committed by
Madan Koyyalamudi

parent
c775b5586a
commit
ff18a53051
@@ -24,8 +24,17 @@
|
||||
|
||||
#include <qdf_types.h>
|
||||
#include <wlan_objmgr_psoc_obj.h>
|
||||
#include <wlan_mgmt_txrx_rx_reo_utils_api.h>
|
||||
|
||||
#ifdef WLAN_MGMT_RX_REO_SUPPORT
|
||||
|
||||
#define MGMT_RX_REO_SNAPSHOT_READ_RETRY_LIMIT (5)
|
||||
#define REO_SNAPSHOT_GET_VALID(l) (1)
|
||||
#define REO_SNAPSHOT_GET_MGMT_PKT_CTR(l) (1)
|
||||
#define REO_SNAPSHOT_GET_REDUNDANT_MGMT_PKT_CTR(h) (1)
|
||||
#define REO_SNAPSHOT_IS_CONSISTENT(c, rc) (1)
|
||||
#define REO_SNAPSHOT_GET_GLOBAL_TIMESTAMP(l, h) (1)
|
||||
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_register_event_handlers() - Register management
|
||||
* rx-reordering related event handlers.
|
||||
@@ -45,6 +54,17 @@ target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc);
|
||||
*/
|
||||
QDF_STATUS
|
||||
target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_tx_ops_register() - Register management rx-reordring
|
||||
* txops
|
||||
* @mgmt_txrx_tx_ops: Pointer to mgmt_txrx module's txops
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
target_if_mgmt_rx_reo_tx_ops_register(
|
||||
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops);
|
||||
#else
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_register_event_handlers() - Register management
|
||||
@@ -71,5 +91,19 @@ target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_tx_ops_register() - Register management rx-reordring
|
||||
* txops
|
||||
* @mgmt_txrx_tx_ops: Pointer to mgmt_txrx module's txops
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
target_if_mgmt_rx_reo_tx_ops_register(
|
||||
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif /* WLAN_MGMT_RX_REO_SUPPORT */
|
||||
#endif /* _TARGET_IF_MGMT_TXRX_RX_REO_H_ */
|
||||
|
@@ -77,6 +77,7 @@ QDF_STATUS
|
||||
target_if_mgmt_txrx_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
|
||||
{
|
||||
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!tx_ops) {
|
||||
mgmt_txrx_err("txops is NULL");
|
||||
@@ -89,5 +90,11 @@ target_if_mgmt_txrx_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
|
||||
mgmt_txrx_tx_ops->unreg_ev_handler =
|
||||
target_if_mgmt_txrx_unregister_event_handler;
|
||||
|
||||
status = target_if_mgmt_rx_reo_tx_ops_register(mgmt_txrx_tx_ops);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mgmt_txrx_err("Failed to register mgmt Rx REO tx ops");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -22,6 +22,8 @@
|
||||
#include <wlan_objmgr_psoc_obj.h>
|
||||
#include <qdf_status.h>
|
||||
#include <target_if.h>
|
||||
#include <wlan_mgmt_txrx_rx_reo_public_structs.h>
|
||||
#include <target_if_mgmt_txrx_rx_reo.h>
|
||||
|
||||
QDF_STATUS
|
||||
target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc)
|
||||
@@ -30,7 +32,7 @@ target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc)
|
||||
|
||||
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
|
||||
if (!wmi_handle) {
|
||||
mgmt_txrx_err("Invalid WMI handle");
|
||||
mgmt_rx_reo_err("Invalid WMI handle");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
@@ -46,7 +48,7 @@ target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc)
|
||||
|
||||
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
|
||||
if (!wmi_handle) {
|
||||
mgmt_txrx_err("Invalid WMI handle");
|
||||
mgmt_rx_reo_err("Invalid WMI handle");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
@@ -54,3 +56,113 @@ target_if_mgmt_rx_reo_unregister_event_handlers(struct wlan_objmgr_psoc *psoc)
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_read_snapshot() - Read management rx-reorder snapshot
|
||||
* @snapshot_address: Snapshot address
|
||||
* @id: Snapshot ID
|
||||
* @snapshot_value: Pointer to snapshot value
|
||||
*
|
||||
* Read management rx-reorder snapshots from target.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_mgmt_rx_reo_read_snapshot(
|
||||
struct mgmt_rx_reo_snapshot *snapshot_address,
|
||||
enum mgmt_rx_reo_snapshot_id id,
|
||||
struct mgmt_rx_reo_snapshot_params *snapshot_value)
|
||||
{
|
||||
bool snapshot_valid;
|
||||
uint16_t mgmt_pkt_ctr;
|
||||
uint16_t redundant_mgmt_pkt_ctr;
|
||||
uint32_t global_timestamp;
|
||||
uint32_t mgmt_rx_reo_snapshot_low;
|
||||
uint32_t mgmt_rx_reo_snapshot_high;
|
||||
uint8_t retry_count;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (!snapshot_address) {
|
||||
mgmt_rx_reo_err("Mgmt Rx REO snapshot address null");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
if (!snapshot_value) {
|
||||
mgmt_rx_reo_err("Mgmt Rx REO snapshot null");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
switch (id) {
|
||||
case MGMT_RX_REO_SNAPSHOT_MAC_HW:
|
||||
case MGMT_RX_REO_SNAPSHOT_FW_CONSUMED:
|
||||
case MGMT_RX_REO_SNAPSHOT_FW_FORWADED:
|
||||
retry_count = 0;
|
||||
for (; retry_count < MGMT_RX_REO_SNAPSHOT_READ_RETRY_LIMIT;
|
||||
retry_count++) {
|
||||
mgmt_rx_reo_snapshot_low =
|
||||
snapshot_address->mgmt_rx_reo_snapshot_low;
|
||||
mgmt_rx_reo_snapshot_high =
|
||||
snapshot_address->mgmt_rx_reo_snapshot_high;
|
||||
|
||||
snapshot_valid = REO_SNAPSHOT_GET_VALID(
|
||||
mgmt_rx_reo_snapshot_low);
|
||||
if (!snapshot_valid) {
|
||||
mgmt_rx_reo_debug("Invalid REO snapshot value");
|
||||
snapshot_value->valid = false;
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
global_timestamp = REO_SNAPSHOT_GET_GLOBAL_TIMESTAMP(
|
||||
mgmt_rx_reo_snapshot_low,
|
||||
mgmt_rx_reo_snapshot_high);
|
||||
mgmt_pkt_ctr = REO_SNAPSHOT_GET_MGMT_PKT_CTR(
|
||||
mgmt_rx_reo_snapshot_low);
|
||||
redundant_mgmt_pkt_ctr =
|
||||
REO_SNAPSHOT_GET_REDUNDANT_MGMT_PKT_CTR(
|
||||
mgmt_rx_reo_snapshot_high);
|
||||
if (REO_SNAPSHOT_IS_CONSISTENT(
|
||||
mgmt_pkt_ctr, redundant_mgmt_pkt_ctr))
|
||||
break;
|
||||
|
||||
mgmt_rx_reo_info("Inconsistent snapshot value low=0x%x high=0x%x",
|
||||
mgmt_rx_reo_snapshot_low,
|
||||
mgmt_rx_reo_snapshot_high);
|
||||
}
|
||||
|
||||
if (retry_count == MGMT_RX_REO_SNAPSHOT_READ_RETRY_LIMIT) {
|
||||
mgmt_rx_reo_debug("Read retry limit reached");
|
||||
snapshot_value->valid = false;
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
snapshot_value->valid = true;
|
||||
snapshot_value->mgmt_pkt_ctr = mgmt_pkt_ctr;
|
||||
snapshot_value->global_timestamp = global_timestamp;
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
default:
|
||||
mgmt_rx_reo_err("Invalid snapshot id %d", id);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
target_if_mgmt_rx_reo_tx_ops_register(
|
||||
struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops)
|
||||
{
|
||||
struct wlan_lmac_if_mgmt_rx_reo_tx_ops *mgmt_rx_reo_tx_ops;
|
||||
|
||||
if (!mgmt_txrx_tx_ops) {
|
||||
mgmt_rx_reo_err("mgmt_txrx txops NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
mgmt_rx_reo_tx_ops = &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops;
|
||||
mgmt_rx_reo_tx_ops->read_mgmt_rx_reo_snapshot =
|
||||
target_if_mgmt_rx_reo_read_snapshot;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user