|
@@ -1,6 +1,6 @@
|
|
/*
|
|
/*
|
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
|
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
|
|
|
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
@@ -27,14 +27,38 @@
|
|
#include <wlan_mlo_mgr_cmn.h>
|
|
#include <wlan_mlo_mgr_cmn.h>
|
|
#include <wlan_mlo_mgr_setup.h>
|
|
#include <wlan_mlo_mgr_setup.h>
|
|
|
|
|
|
-static struct mgmt_rx_reo_context *g_rx_reo_ctx;
|
|
|
|
|
|
+static struct mgmt_rx_reo_context *g_rx_reo_ctx[WLAN_MAX_MLO_GROUPS];
|
|
|
|
|
|
-#define mgmt_rx_reo_get_context() (g_rx_reo_ctx)
|
|
|
|
-#define mgmt_rx_reo_set_context(c) (g_rx_reo_ctx = c)
|
|
|
|
|
|
+#define mgmt_rx_reo_get_context(_grp_id) (g_rx_reo_ctx[_grp_id])
|
|
|
|
+#define mgmt_rx_reo_set_context(grp_id, c) (g_rx_reo_ctx[grp_id] = c)
|
|
|
|
|
|
#define MGMT_RX_REO_PKT_CTR_HALF_RANGE (0x8000)
|
|
#define MGMT_RX_REO_PKT_CTR_HALF_RANGE (0x8000)
|
|
#define MGMT_RX_REO_PKT_CTR_FULL_RANGE (MGMT_RX_REO_PKT_CTR_HALF_RANGE << 1)
|
|
#define MGMT_RX_REO_PKT_CTR_FULL_RANGE (MGMT_RX_REO_PKT_CTR_HALF_RANGE << 1)
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * wlan_mgmt_rx_reo_get_ctx_from_pdev - Get MGMT Rx REO Context from pdev
|
|
|
|
+ * @pdev: Pointer to pdev structure object
|
|
|
|
+ *
|
|
|
|
+ * API to get the MGMT RX reo context of the pdev using the appropriate
|
|
|
|
+ * MLO group id.
|
|
|
|
+ *
|
|
|
|
+ * Return: Mgmt rx reo context for the pdev
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+static inline struct mgmt_rx_reo_context*
|
|
|
|
+wlan_mgmt_rx_reo_get_ctx_from_pdev(struct wlan_objmgr_pdev *pdev)
|
|
|
|
+{
|
|
|
|
+ uint8_t ml_grp_id;
|
|
|
|
+
|
|
|
|
+ ml_grp_id = wlan_get_mlo_grp_id_from_pdev(pdev);
|
|
|
|
+ if (ml_grp_id >= WLAN_MAX_MLO_GROUPS) {
|
|
|
|
+ mgmt_rx_reo_err("REO context - Invalid ML Group ID");
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return mgmt_rx_reo_get_context(ml_grp_id);
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* mgmt_rx_reo_compare_pkt_ctrs_gte() - Compare given mgmt packet counters
|
|
* mgmt_rx_reo_compare_pkt_ctrs_gte() - Compare given mgmt packet counters
|
|
* @ctr1: Management packet counter1
|
|
* @ctr1: Management packet counter1
|
|
@@ -309,15 +333,17 @@ mgmt_rx_reo_sim_is_valid_link(struct mgmt_rx_reo_sim_context *sim_context,
|
|
|
|
|
|
/**
|
|
/**
|
|
* mgmt_rx_reo_is_valid_link() - Check whether the given HW link is valid
|
|
* mgmt_rx_reo_is_valid_link() - Check whether the given HW link is valid
|
|
|
|
+ * @link_id: HW Link ID to be verified
|
|
|
|
+ * @grp_id: MLO Group id on which the Link ID belongs to
|
|
*
|
|
*
|
|
* Return: true if @link_id is a valid link else false
|
|
* Return: true if @link_id is a valid link else false
|
|
*/
|
|
*/
|
|
static bool
|
|
static bool
|
|
-mgmt_rx_reo_is_valid_link(uint8_t link_id)
|
|
|
|
|
|
+mgmt_rx_reo_is_valid_link(uint8_t ml_grp_id, uint8_t link_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
|
|
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
@@ -382,16 +408,17 @@ mgmt_rx_reo_get_num_mlo_links(struct mgmt_rx_reo_context *reo_context,
|
|
/**
|
|
/**
|
|
* mgmt_rx_reo_sim_get_context() - Helper API to get the management
|
|
* mgmt_rx_reo_sim_get_context() - Helper API to get the management
|
|
* rx reorder simulation context
|
|
* rx reorder simulation context
|
|
|
|
+ * @ml_grp_id: MLO group id for the rx reordering
|
|
*
|
|
*
|
|
* Return: On success returns the pointer to management rx reorder
|
|
* Return: On success returns the pointer to management rx reorder
|
|
* simulation context. On failure returns NULL.
|
|
* simulation context. On failure returns NULL.
|
|
*/
|
|
*/
|
|
static struct mgmt_rx_reo_sim_context *
|
|
static struct mgmt_rx_reo_sim_context *
|
|
-mgmt_rx_reo_sim_get_context(void)
|
|
|
|
|
|
+mgmt_rx_reo_sim_get_context(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
return NULL;
|
|
return NULL;
|
|
@@ -1063,7 +1090,7 @@ wlan_mgmt_rx_reo_algo_calculate_wait_count(
|
|
goto update_pending_frames;
|
|
goto update_pending_frames;
|
|
}
|
|
}
|
|
|
|
|
|
- pdev = wlan_get_pdev_from_mlo_link_id(link,
|
|
|
|
|
|
+ pdev = wlan_get_pdev_from_mlo_link_id(link, grp_id,
|
|
WLAN_MGMT_RX_REO_ID);
|
|
WLAN_MGMT_RX_REO_ID);
|
|
|
|
|
|
/* No need to wait for any frames if the pdev is not found */
|
|
/* No need to wait for any frames if the pdev is not found */
|
|
@@ -2367,6 +2394,7 @@ mgmt_rx_reo_prepare_list_entry(
|
|
struct mgmt_rx_reo_list_entry *list_entry;
|
|
struct mgmt_rx_reo_list_entry *list_entry;
|
|
struct wlan_objmgr_pdev *pdev;
|
|
struct wlan_objmgr_pdev *pdev;
|
|
uint8_t link_id;
|
|
uint8_t link_id;
|
|
|
|
+ uint8_t ml_grp_id;
|
|
|
|
|
|
if (!frame_desc) {
|
|
if (!frame_desc) {
|
|
mgmt_rx_reo_err("frame descriptor is null");
|
|
mgmt_rx_reo_err("frame descriptor is null");
|
|
@@ -2379,8 +2407,10 @@ mgmt_rx_reo_prepare_list_entry(
|
|
}
|
|
}
|
|
|
|
|
|
link_id = mgmt_rx_reo_get_link_id(frame_desc->rx_params);
|
|
link_id = mgmt_rx_reo_get_link_id(frame_desc->rx_params);
|
|
|
|
+ ml_grp_id = mgmt_rx_reo_get_mlo_grp_id(frame_desc->rx_params);
|
|
|
|
|
|
- pdev = wlan_get_pdev_from_mlo_link_id(link_id, WLAN_MGMT_RX_REO_ID);
|
|
|
|
|
|
+ pdev = wlan_get_pdev_from_mlo_link_id(link_id, ml_grp_id,
|
|
|
|
+ WLAN_MGMT_RX_REO_ID);
|
|
if (!pdev) {
|
|
if (!pdev) {
|
|
mgmt_rx_reo_err("pdev corresponding to link %u is null",
|
|
mgmt_rx_reo_err("pdev corresponding to link %u is null",
|
|
link_id);
|
|
link_id);
|
|
@@ -3359,7 +3389,7 @@ wlan_mgmt_rx_reo_algo_entry(struct wlan_objmgr_pdev *pdev,
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
}
|
|
}
|
|
|
|
|
|
- reo_ctx = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_ctx = wlan_mgmt_rx_reo_get_ctx_from_pdev(pdev);
|
|
if (!reo_ctx) {
|
|
if (!reo_ctx) {
|
|
mgmt_rx_reo_err("REO context is NULL");
|
|
mgmt_rx_reo_err("REO context is NULL");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -3505,6 +3535,7 @@ failure:
|
|
* mgmt_rx_reo_sim_init() - Initialize management rx reorder simulation
|
|
* mgmt_rx_reo_sim_init() - Initialize management rx reorder simulation
|
|
* context.
|
|
* context.
|
|
* @reo_context: Pointer to reo context
|
|
* @reo_context: Pointer to reo context
|
|
|
|
+ * @ml_grp_id: MLO group id which it belongs to
|
|
*
|
|
*
|
|
* Return: QDF_STATUS of operation
|
|
* Return: QDF_STATUS of operation
|
|
*/
|
|
*/
|
|
@@ -3767,7 +3798,7 @@ mgmt_rx_reo_sim_process_rx_frame(struct wlan_objmgr_pdev *pdev, qdf_nbuf_t buf,
|
|
|
|
|
|
reo_params = mgmt_rx_params->reo_params;
|
|
reo_params = mgmt_rx_params->reo_params;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = wlan_mgmt_rx_reo_get_ctx_from_pdev(pdev);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
mgmt_rx_reo_err("Mgmt reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -3922,6 +3953,7 @@ mgmt_rx_reo_sim_frame_handler_host(void *arg)
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
struct wlan_objmgr_pdev *pdev;
|
|
struct wlan_objmgr_pdev *pdev;
|
|
|
|
+ uint8_t ml_grp_id;
|
|
|
|
|
|
if (!frame_fw) {
|
|
if (!frame_fw) {
|
|
mgmt_rx_reo_err("HOST-%d : Pointer to FW frame struct is null",
|
|
mgmt_rx_reo_err("HOST-%d : Pointer to FW frame struct is null",
|
|
@@ -3938,6 +3970,8 @@ mgmt_rx_reo_sim_frame_handler_host(void *arg)
|
|
goto error_free_fw_frame;
|
|
goto error_free_fw_frame;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ml_grp_id = sim_context->mlo_grp_id;
|
|
|
|
+
|
|
fw_to_host_delay_us = MGMT_RX_REO_SIM_DELAY_FW_TO_HOST_MIN +
|
|
fw_to_host_delay_us = MGMT_RX_REO_SIM_DELAY_FW_TO_HOST_MIN +
|
|
mgmt_rx_reo_sim_get_random_unsigned_int(
|
|
mgmt_rx_reo_sim_get_random_unsigned_int(
|
|
MGMT_RX_REO_SIM_DELAY_FW_TO_HOST_MIN_MAX_DELTA);
|
|
MGMT_RX_REO_SIM_DELAY_FW_TO_HOST_MIN_MAX_DELTA);
|
|
@@ -3985,7 +4019,8 @@ mgmt_rx_reo_sim_frame_handler_host(void *arg)
|
|
rx_params->reo_params->mgmt_pkt_ctr = frame_fw->params.mgmt_pkt_ctr;
|
|
rx_params->reo_params->mgmt_pkt_ctr = frame_fw->params.mgmt_pkt_ctr;
|
|
rx_params->reo_params->valid = true;
|
|
rx_params->reo_params->valid = true;
|
|
|
|
|
|
- pdev = wlan_get_pdev_from_mlo_link_id(link_id, WLAN_MGMT_RX_REO_SIM_ID);
|
|
|
|
|
|
+ pdev = wlan_get_pdev_from_mlo_link_id(
|
|
|
|
+ link_id, ml_grp_id, WLAN_MGMT_RX_REO_SIM_ID);
|
|
if (!pdev) {
|
|
if (!pdev) {
|
|
mgmt_rx_reo_err("No pdev corresponding to link_id %d", link_id);
|
|
mgmt_rx_reo_err("No pdev corresponding to link_id %d", link_id);
|
|
goto error_free_mgmt_rx_event_params;
|
|
goto error_free_mgmt_rx_event_params;
|
|
@@ -4029,6 +4064,7 @@ error_print:
|
|
* @link_id: link id
|
|
* @link_id: link id
|
|
* @id: snapshot id
|
|
* @id: snapshot id
|
|
* @value: snapshot value
|
|
* @value: snapshot value
|
|
|
|
+ * @ml_grp_id: MLO group id which it belongs to
|
|
*
|
|
*
|
|
* This API writes the snapshots used for management frame reordering. MAC HW
|
|
* This API writes the snapshots used for management frame reordering. MAC HW
|
|
* and FW can use this API to update the MAC HW/FW consumed/FW forwarded
|
|
* and FW can use this API to update the MAC HW/FW consumed/FW forwarded
|
|
@@ -4037,7 +4073,7 @@ error_print:
|
|
* Return: QDF_STATUS
|
|
* Return: QDF_STATUS
|
|
*/
|
|
*/
|
|
static QDF_STATUS
|
|
static QDF_STATUS
|
|
-mgmt_rx_reo_sim_write_snapshot(uint8_t link_id,
|
|
|
|
|
|
+mgmt_rx_reo_sim_write_snapshot(uint8_t link_id, uint8_t ml_grp_id,
|
|
enum mgmt_rx_reo_shared_snapshot_id id,
|
|
enum mgmt_rx_reo_shared_snapshot_id id,
|
|
struct mgmt_rx_reo_shared_snapshot value)
|
|
struct mgmt_rx_reo_shared_snapshot value)
|
|
{
|
|
{
|
|
@@ -4045,7 +4081,9 @@ mgmt_rx_reo_sim_write_snapshot(uint8_t link_id,
|
|
struct mgmt_rx_reo_shared_snapshot *snapshot_address;
|
|
struct mgmt_rx_reo_shared_snapshot *snapshot_address;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- pdev = wlan_get_pdev_from_mlo_link_id(link_id, WLAN_MGMT_RX_REO_SIM_ID);
|
|
|
|
|
|
+ pdev = wlan_get_pdev_from_mlo_link_id(
|
|
|
|
+ link_id, ml_grp_id,
|
|
|
|
+ WLAN_MGMT_RX_REO_SIM_ID);
|
|
|
|
|
|
if (!pdev) {
|
|
if (!pdev) {
|
|
mgmt_rx_reo_err("pdev is null");
|
|
mgmt_rx_reo_err("pdev is null");
|
|
@@ -4146,6 +4184,7 @@ mgmt_rx_reo_sim_frame_handler_fw(void *arg)
|
|
enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
|
|
enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
|
|
struct mgmt_rx_reo_shared_snapshot snapshot_value;
|
|
struct mgmt_rx_reo_shared_snapshot snapshot_value;
|
|
bool ret;
|
|
bool ret;
|
|
|
|
+ uint8_t ml_grp_id;
|
|
|
|
|
|
if (!frame_hw) {
|
|
if (!frame_hw) {
|
|
mgmt_rx_reo_err("FW-%d : Pointer to HW frame struct is null",
|
|
mgmt_rx_reo_err("FW-%d : Pointer to HW frame struct is null",
|
|
@@ -4162,6 +4201,8 @@ mgmt_rx_reo_sim_frame_handler_fw(void *arg)
|
|
goto error_free_mac_hw_frame;
|
|
goto error_free_mac_hw_frame;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ml_grp_id = sim_context->mlo_grp_id;
|
|
|
|
+
|
|
mac_hw_to_fw_delay_us = MGMT_RX_REO_SIM_DELAY_MAC_HW_TO_FW_MIN +
|
|
mac_hw_to_fw_delay_us = MGMT_RX_REO_SIM_DELAY_MAC_HW_TO_FW_MIN +
|
|
mgmt_rx_reo_sim_get_random_unsigned_int(
|
|
mgmt_rx_reo_sim_get_random_unsigned_int(
|
|
MGMT_RX_REO_SIM_DELAY_MAC_HW_TO_FW_MIN_MAX_DELTA);
|
|
MGMT_RX_REO_SIM_DELAY_MAC_HW_TO_FW_MIN_MAX_DELTA);
|
|
@@ -4211,8 +4252,9 @@ mgmt_rx_reo_sim_frame_handler_fw(void *arg)
|
|
frame_hw->params.global_timestamp,
|
|
frame_hw->params.global_timestamp,
|
|
frame_hw->params.mgmt_pkt_ctr);
|
|
frame_hw->params.mgmt_pkt_ctr);
|
|
|
|
|
|
- status = mgmt_rx_reo_sim_write_snapshot(link_id, snapshot_id,
|
|
|
|
- snapshot_value);
|
|
|
|
|
|
+ status = mgmt_rx_reo_sim_write_snapshot(
|
|
|
|
+ link_id, ml_grp_id,
|
|
|
|
+ snapshot_id, snapshot_value);
|
|
|
|
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
mgmt_rx_reo_err("FW-%d : Failed to write snapshot %d",
|
|
mgmt_rx_reo_err("FW-%d : Failed to write snapshot %d",
|
|
@@ -4389,6 +4431,7 @@ mgmt_rx_reo_sim_mac_hw_thread(void *data)
|
|
struct mgmt_rx_reo_shared_snapshot snapshot_value;
|
|
struct mgmt_rx_reo_shared_snapshot snapshot_value;
|
|
int8_t num_mlo_links;
|
|
int8_t num_mlo_links;
|
|
bool ret;
|
|
bool ret;
|
|
|
|
+ uint8_t ml_grp_id;
|
|
|
|
|
|
num_mlo_links = mgmt_rx_reo_sim_get_num_mlo_links(sim_context);
|
|
num_mlo_links = mgmt_rx_reo_sim_get_num_mlo_links(sim_context);
|
|
if (num_mlo_links < 0 ||
|
|
if (num_mlo_links < 0 ||
|
|
@@ -4430,6 +4473,7 @@ mgmt_rx_reo_sim_mac_hw_thread(void *data)
|
|
|
|
|
|
frame_mac_hw->params = frame;
|
|
frame_mac_hw->params = frame;
|
|
frame_mac_hw->sim_context = sim_context;
|
|
frame_mac_hw->sim_context = sim_context;
|
|
|
|
+ ml_grp_id = sim_context->ml_grp_id;
|
|
|
|
|
|
status = mgmt_rx_reo_sim_add_frame_to_pending_list(
|
|
status = mgmt_rx_reo_sim_add_frame_to_pending_list(
|
|
&sim_context->master_frame_list, &frame);
|
|
&sim_context->master_frame_list, &frame);
|
|
@@ -4452,8 +4496,9 @@ mgmt_rx_reo_sim_mac_hw_thread(void *data)
|
|
frame.global_timestamp,
|
|
frame.global_timestamp,
|
|
frame.mgmt_pkt_ctr);
|
|
frame.mgmt_pkt_ctr);
|
|
|
|
|
|
- status = mgmt_rx_reo_sim_write_snapshot(link_id, snapshot_id,
|
|
|
|
- snapshot_value);
|
|
|
|
|
|
+ status = mgmt_rx_reo_sim_write_snapshot(
|
|
|
|
+ link_id, ml_grp_id
|
|
|
|
+ snapshot_id, snapshot_value);
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
mgmt_rx_reo_err("HW-%d : Failed to write snapshot %d",
|
|
mgmt_rx_reo_err("HW-%d : Failed to write snapshot %d",
|
|
link_id, snapshot_id);
|
|
link_id, snapshot_id);
|
|
@@ -4730,7 +4775,7 @@ mgmt_rx_reo_sim_pdev_object_destroy_notification(struct wlan_objmgr_pdev *pdev)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_sim_start(void)
|
|
|
|
|
|
+mgmt_rx_reo_sim_start(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
@@ -4739,7 +4784,7 @@ mgmt_rx_reo_sim_start(void)
|
|
uint8_t id;
|
|
uint8_t id;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -4806,7 +4851,7 @@ error_destroy_fw_and_host_work_queues_till_last_link:
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_sim_stop(void)
|
|
|
|
|
|
+mgmt_rx_reo_sim_stop(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
struct mgmt_rx_reo_sim_context *sim_context;
|
|
@@ -4814,7 +4859,7 @@ mgmt_rx_reo_sim_stop(void)
|
|
uint8_t link_id;
|
|
uint8_t link_id;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -4878,6 +4923,7 @@ mgmt_rx_reo_sim_stop(void)
|
|
* mgmt_rx_reo_sim_init() - Initialize management rx reorder simulation
|
|
* mgmt_rx_reo_sim_init() - Initialize management rx reorder simulation
|
|
* context.
|
|
* context.
|
|
* @reo_context: Pointer to reo context
|
|
* @reo_context: Pointer to reo context
|
|
|
|
+ * @ml_grp_id: MLO Group ID which it belongs to
|
|
*
|
|
*
|
|
* Return: QDF_STATUS of operation
|
|
* Return: QDF_STATUS of operation
|
|
*/
|
|
*/
|
|
@@ -4896,6 +4942,7 @@ mgmt_rx_reo_sim_init(struct mgmt_rx_reo_context *reo_context)
|
|
sim_context = &reo_context->sim_context;
|
|
sim_context = &reo_context->sim_context;
|
|
|
|
|
|
qdf_mem_zero(sim_context, sizeof(*sim_context));
|
|
qdf_mem_zero(sim_context, sizeof(*sim_context));
|
|
|
|
+ sim_context->mlo_grp_id = reo_context->mlo_grp_id;
|
|
|
|
|
|
status = mgmt_rx_reo_sim_init_master_frame_list(
|
|
status = mgmt_rx_reo_sim_init_master_frame_list(
|
|
&sim_context->master_frame_list);
|
|
&sim_context->master_frame_list);
|
|
@@ -5118,7 +5165,7 @@ mgmt_rx_reo_debug_info_init(struct wlan_objmgr_pdev *pdev)
|
|
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(psoc))
|
|
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(psoc))
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = wlan_mgmt_rx_reo_get_ctx_from_pdev(pdev);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5262,7 +5309,7 @@ mgmt_rx_reo_debug_info_deinit(struct wlan_objmgr_pdev *pdev)
|
|
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(psoc))
|
|
if (!wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(psoc))
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = wlan_mgmt_rx_reo_get_ctx_from_pdev(pdev);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5368,12 +5415,12 @@ mgmt_rx_reo_list_deinit(struct mgmt_rx_reo_list *reo_list)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_deinit_context(void)
|
|
|
|
|
|
+mgmt_rx_reo_deinit_context(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5400,23 +5447,27 @@ mgmt_rx_reo_deinit_context(void)
|
|
}
|
|
}
|
|
|
|
|
|
qdf_mem_free(reo_context);
|
|
qdf_mem_free(reo_context);
|
|
|
|
+ mgmt_rx_reo_set_context(ml_grp_id, NULL);
|
|
|
|
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_init_context(void)
|
|
|
|
|
|
+mgmt_rx_reo_init_context(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
QDF_STATUS temp;
|
|
QDF_STATUS temp;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
|
|
|
|
- reo_context = qdf_mem_malloc(sizeof(*reo_context));
|
|
|
|
|
|
+ reo_context = qdf_mem_malloc(sizeof(struct mgmt_rx_reo_context));
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("Failed to allocate reo context");
|
|
mgmt_rx_reo_err("Failed to allocate reo context");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
}
|
|
}
|
|
- mgmt_rx_reo_set_context(reo_context);
|
|
|
|
|
|
+
|
|
|
|
+ mgmt_rx_reo_set_context(ml_grp_id, reo_context);
|
|
|
|
+
|
|
|
|
+ reo_context->mlo_grp_id = ml_grp_id;
|
|
|
|
|
|
status = mgmt_rx_reo_list_init(&reo_context->reo_list);
|
|
status = mgmt_rx_reo_list_init(&reo_context->reo_list);
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
@@ -5772,11 +5823,11 @@ mgmt_rx_reo_psoc_obj_destroy_notification(struct wlan_objmgr_psoc *psoc)
|
|
}
|
|
}
|
|
|
|
|
|
bool
|
|
bool
|
|
-mgmt_rx_reo_is_simulation_in_progress(void)
|
|
|
|
|
|
+mgmt_rx_reo_is_simulation_in_progress(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return false;
|
|
return false;
|
|
@@ -5787,12 +5838,12 @@ mgmt_rx_reo_is_simulation_in_progress(void)
|
|
|
|
|
|
#ifdef WLAN_MGMT_RX_REO_DEBUG_SUPPORT
|
|
#ifdef WLAN_MGMT_RX_REO_DEBUG_SUPPORT
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_ingress_frame_stats(void)
|
|
|
|
|
|
+mgmt_rx_reo_print_ingress_frame_stats(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5808,12 +5859,12 @@ mgmt_rx_reo_print_ingress_frame_stats(void)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_ingress_frame_info(uint16_t num_frames)
|
|
|
|
|
|
+mgmt_rx_reo_print_ingress_frame_info(uint8_t ml_grp_id, uint16_t num_frames)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5830,12 +5881,12 @@ mgmt_rx_reo_print_ingress_frame_info(uint16_t num_frames)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_egress_frame_stats(void)
|
|
|
|
|
|
+mgmt_rx_reo_print_egress_frame_stats(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5851,12 +5902,12 @@ mgmt_rx_reo_print_egress_frame_stats(void)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_egress_frame_info(uint16_t num_frames)
|
|
|
|
|
|
+mgmt_rx_reo_print_egress_frame_info(uint8_t ml_grp_id, uint16_t num_frames)
|
|
{
|
|
{
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
struct mgmt_rx_reo_context *reo_context;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
|
|
|
|
- reo_context = mgmt_rx_reo_get_context();
|
|
|
|
|
|
+ reo_context = mgmt_rx_reo_get_context(ml_grp_id);
|
|
if (!reo_context) {
|
|
if (!reo_context) {
|
|
mgmt_rx_reo_err("reo context is null");
|
|
mgmt_rx_reo_err("reo context is null");
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
return QDF_STATUS_E_NULL_VALUE;
|
|
@@ -5873,25 +5924,25 @@ mgmt_rx_reo_print_egress_frame_info(uint16_t num_frames)
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_ingress_frame_stats(void)
|
|
|
|
|
|
+mgmt_rx_reo_print_ingress_frame_stats(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_ingress_frame_info(uint16_t num_frames)
|
|
|
|
|
|
+mgmt_rx_reo_print_ingress_frame_info(uint8_t ml_grp_id, uint16_t num_frames)
|
|
{
|
|
{
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_egress_frame_stats(void)
|
|
|
|
|
|
+mgmt_rx_reo_print_egress_frame_stats(uint8_t ml_grp_id)
|
|
{
|
|
{
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS
|
|
QDF_STATUS
|
|
-mgmt_rx_reo_print_egress_frame_info(uint16_t num_frames)
|
|
|
|
|
|
+mgmt_rx_reo_print_egress_frame_info(uint8_t ml_grp_id, uint16_t num_frames)
|
|
{
|
|
{
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|