Merge "qcacmn: Fix ppdu info release during detach"

This commit is contained in:
Linux Build Service Account 2019-07-04 07:05:32 -07:00 • committed by Gerrit - the friendly Code Review server
commit f84fb21c59
24 changed files with 1108 additions and 1040 deletions

View file

@ -110,7 +110,15 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
DP_STATS_UPD(peer, tx.rnd_avg_tx_rate, ppdu_tx_rate);
if (peer->vdev) {
if (peer->bss_peer) {
/*
* In STA mode:
* We get ucast stats as BSS peer stats.
*
* In AP mode:
* We get mcast stats as BSS peer stats.
* We get ucast stats as assoc peer stats.
*/
if (peer->vdev->opmode == wlan_op_mode_ap && peer->bss_peer) {
peer->vdev->stats.tx.mcast_last_tx_rate = ratekbps;
peer->vdev->stats.tx.mcast_last_tx_rate_mcs = ppdu->mcs;
} else {

View file

@ -1028,6 +1028,8 @@ void dp_print_ast_stats(struct dp_soc *soc)
DP_PRINT_STATS(" Entries Added = %d", soc->stats.ast.added);
DP_PRINT_STATS(" Entries Deleted = %d", soc->stats.ast.deleted);
DP_PRINT_STATS(" Entries Agedout = %d", soc->stats.ast.aged_out);
DP_PRINT_STATS(" Entries MAP ERR = %d", soc->stats.ast.map_err);
DP_PRINT_STATS("AST Table:");
qdf_spin_lock_bh(&soc->ast_lock);
@ -3863,6 +3865,8 @@ static void dp_pdev_deinit(struct cdp_pdev *txrx_pdev, int force)
dp_htt_ppdu_stats_detach(pdev);
dp_tx_ppdu_stats_detach(pdev);
qdf_nbuf_free(pdev->sojourn_buf);
dp_cal_client_detach(&pdev->cal_client_ctx);
@ -3920,8 +3924,6 @@ static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force)
dp_mon_link_free(pdev);
dp_tx_ppdu_stats_detach(pdev);
/* Cleanup per PDEV REO rings if configured */
if (wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) {
dp_srng_cleanup(soc, &soc->reo_dest_ring[pdev->pdev_id],
@ -5091,6 +5093,10 @@ static void *dp_peer_create_wifi3(struct cdp_vdev *vdev_handle,
peer->ctrl_peer = ctrl_peer;
dp_local_peer_id_alloc(pdev, peer);
qdf_spinlock_create(&peer->peer_info_lock);
dp_peer_rx_bufq_resources_init(peer);
DP_STATS_INIT(peer);
DP_STATS_UPD(peer, rx.avg_rssi, INVALID_RSSI);

View file

@ -1089,10 +1089,22 @@ void dp_peer_ast_send_wds_del(struct dp_soc *soc,
ast_entry->delete_in_progress = true;
}
static void dp_peer_ast_free_entry(struct dp_soc *soc,
struct dp_ast_entry *ast_entry)
/**
* dp_peer_ast_free_entry_by_mac() - find ast entry by MAC address and delete
* @soc: soc handle
* @peer: peer handle
* @mac_addr: mac address of the AST entry to searc and delete
*
* find the ast entry from the peer list using the mac address and free
* the entry.
*
* Return: SUCCESS or NOENT
*/
static int dp_peer_ast_free_entry_by_mac(struct dp_soc *soc,
struct dp_peer *peer,
uint8_t *mac_addr)
{
struct dp_peer *peer = ast_entry->peer;
struct dp_ast_entry *ast_entry;
void *cookie = NULL;
txrx_ast_free_cb cb = NULL;
@ -1102,8 +1114,14 @@ static void dp_peer_ast_free_entry(struct dp_soc *soc,
*/
qdf_spin_lock_bh(&soc->ast_lock);
if (ast_entry->is_mapped)
ast_entry = dp_peer_ast_list_find(soc, peer, mac_addr);
if (!ast_entry) {
qdf_spin_unlock_bh(&soc->ast_lock);
return QDF_STATUS_E_NOENT;
} else if (ast_entry->is_mapped) {
soc->ast_table[ast_entry->ast_idx] = NULL;
}
TAILQ_REMOVE(&peer->ast_entry_list, ast_entry, ase_list_elem);
DP_STATS_INC(soc, ast.deleted, 1);
@ -1117,6 +1135,7 @@ static void dp_peer_ast_free_entry(struct dp_soc *soc,
if (ast_entry == peer->self_ast_entry)
peer->self_ast_entry = NULL;
soc->num_ast_entries--;
qdf_spin_unlock_bh(&soc->ast_lock);
if (cb) {
@ -1126,7 +1145,8 @@ static void dp_peer_ast_free_entry(struct dp_soc *soc,
CDP_TXRX_AST_DELETED);
}
qdf_mem_free(ast_entry);
soc->num_ast_entries--;
return QDF_STATUS_SUCCESS;
}
struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
@ -1448,19 +1468,51 @@ dp_rx_peer_map_handler(void *soc_handle, uint16_t peer_id,
peer_mac_addr[2], peer_mac_addr[3], peer_mac_addr[4],
peer_mac_addr[5], vdev_id);
if ((hw_peer_id < 0) ||
(hw_peer_id >= wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx))) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"invalid hw_peer_id: %d", hw_peer_id);
qdf_assert_always(0);
}
/* Peer map event for WDS ast entry get the peer from
* obj map
*/
if (is_wds) {
peer = soc->peer_id_to_obj_map[peer_id];
/*
* In certain cases like Auth attack on a repeater
* can result in the number of ast_entries falling
* in the same hash bucket to exceed the max_skid
* length supported by HW in root AP. In these cases
* the FW will return the hw_peer_id (ast_index) as
* 0xffff indicating HW could not add the entry in
* its table. Host has to delete the entry from its
* table in these cases.
*/
if (hw_peer_id == HTT_INVALID_PEER) {
DP_STATS_INC(soc, ast.map_err, 1);
if (!dp_peer_ast_free_entry_by_mac(soc,
peer,
peer_mac_addr))
return;
dp_alert("AST entry not found with peer %pK peer_id %u peer_mac %pM mac_addr %pM vdev_id %u next_hop %u",
peer, peer->peer_ids[0],
peer->mac_addr.raw, peer_mac_addr, vdev_id,
is_wds);
return;
}
} else {
/*
* It's the responsibility of the CP and FW to ensure
* that peer is created successfully. Ideally DP should
* not hit the below condition for directly assocaited
* peers.
*/
if ((hw_peer_id < 0) ||
(hw_peer_id >=
wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx))) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"invalid hw_peer_id: %d", hw_peer_id);
qdf_assert_always(0);
}
peer = dp_peer_find_add_id(soc, peer_mac_addr, peer_id,
hw_peer_id, vdev_id);
@ -1515,7 +1567,6 @@ dp_rx_peer_unmap_handler(void *soc_handle, uint16_t peer_id,
uint8_t is_wds)
{
struct dp_peer *peer;
struct dp_ast_entry *ast_entry;
struct dp_soc *soc = (struct dp_soc *)soc_handle;
uint8_t i;
@ -1534,16 +1585,8 @@ dp_rx_peer_unmap_handler(void *soc_handle, uint16_t peer_id,
/* If V2 Peer map messages are enabled AST entry has to be freed here
*/
if (soc->is_peer_map_unmap_v2 && is_wds) {
qdf_spin_lock_bh(&soc->ast_lock);
ast_entry = dp_peer_ast_list_find(soc, peer,
mac_addr);
qdf_spin_unlock_bh(&soc->ast_lock);
if (ast_entry) {
dp_peer_ast_free_entry(soc, ast_entry);
if (!dp_peer_ast_free_entry_by_mac(soc, peer, mac_addr))
return;
}
dp_alert("AST entry not found with peer %pK peer_id %u peer_mac %pM mac_addr %pM vdev_id %u next_hop %u",
peer, peer->peer_ids[0],

View file

@ -5260,7 +5260,7 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
pdev->stats.tx.dropped.age_out);
DP_PRINT_STATS(" headroom insufficient = %d",
pdev->stats.tx_i.dropped.headroom_insufficient);
DP_PRINT_STATS(" Multicast:");
DP_PRINT_STATS("Multicast:");
DP_PRINT_STATS(" Packets: %u",
pdev->stats.tx.mcast.num);
DP_PRINT_STATS(" Bytes: %llu",

View file

@ -3090,12 +3090,7 @@ void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
goto out;
}
if (qdf_likely(!peer->bss_peer)) {
DP_STATS_INC_PKT(peer, tx.ucast, 1, length);
if (ts->status == HAL_TX_TQM_RR_FRAME_ACKED)
DP_STATS_INC_PKT(peer, tx.tx_success, 1, length);
} else {
if (qdf_unlikely(peer->bss_peer && vdev->opmode == wlan_op_mode_ap)) {
if (ts->status != HAL_TX_TQM_RR_REM_CMD_REM) {
DP_STATS_INC_PKT(peer, tx.mcast, 1, length);
@ -3105,6 +3100,10 @@ void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
DP_STATS_INC_PKT(peer, tx.bcast, 1, length);
}
}
} else {
DP_STATS_INC_PKT(peer, tx.ucast, 1, length);
if (ts->status == HAL_TX_TQM_RR_FRAME_ACKED)
DP_STATS_INC_PKT(peer, tx.tx_success, 1, length);
}
dp_tx_update_peer_stats(tx_desc, ts, peer, ring_id);

View file

@ -644,6 +644,7 @@ struct dp_soc_stats {
uint32_t added;
uint32_t deleted;
uint32_t aged_out;
uint32_t map_err;
} ast;
/* SOC level TX stats */

View file

@ -118,12 +118,6 @@ struct CE_state;
#define HIF_MAX_GROUP 8
#endif
#ifdef CONFIG_SLUB_DEBUG_ON
#ifndef CONFIG_WIN
#define HIF_CONFIG_SLUB_DEBUG_ON
#endif
#endif
#ifndef NAPI_YIELD_BUDGET_BASED
#ifdef HIF_CONFIG_SLUB_DEBUG_ON
#define QCA_NAPI_DEF_SCALE_BIN_SHIFT 1

View file

@ -37,9 +37,6 @@
#include "ce_reg.h"
#include "ce_assignment.h"
#include "ce_tasklet.h"
#ifndef CONFIG_WIN
#include "qwlan_version.h"
#endif
#include "qdf_module.h"
#define CE_POLL_TIMEOUT 10 /* ms */
@ -2973,8 +2970,7 @@ int hif_wlan_enable(struct hif_softc *scn)
if (BYPASS_QMI)
return 0;
else
return pld_wlan_enable(scn->qdf_dev->dev, &cfg,
mode, QWLAN_VERSIONSTR);
return pld_wlan_enable(scn->qdf_dev->dev, &cfg, mode);
}
#ifdef WLAN_FEATURE_EPPING

View file

@ -76,10 +76,6 @@ enum ce_target_type {
CE_MAX_TARGET_TYPE
};
#ifdef CONFIG_WIN
#define QWLAN_VERSIONSTR "WIN"
#endif
enum ol_ath_hif_pkt_ecodes {
HIF_PIPE_NO_RESOURCE = 0
};

View file

@ -26,7 +26,6 @@
#include "hif_debug.h"
#include "epping_main.h"
#include "hif_main.h"
#include "qwlan_version.h"
#include "usb_api.h"
#define DELAY_FOR_TARGET_READY 200 /* 200ms */
@ -532,8 +531,7 @@ int hif_usb_bus_configure(struct hif_softc *scn)
else
mode = PLD_MISSION;
return pld_wlan_enable(scn->qdf_dev->dev, &cfg,
mode, QWLAN_VERSIONSTR);
return pld_wlan_enable(scn->qdf_dev->dev, &cfg, mode);
}
#else
/**
@ -706,7 +704,6 @@ void hif_usb_ramdump_handler(struct hif_opaque_softc *scn)
if (pattern == FW_ASSERT_PATTERN) {
HIF_ERROR("Firmware crash detected...\n");
HIF_ERROR("Host SW version: %s\n", QWLAN_VERSIONSTR);
HIF_ERROR("target_type: %d.target_version %d. target_revision%d.",
tgt_info->target_type,
tgt_info->target_version,

View file

@ -45,7 +45,7 @@ ATH_DEBUG_INSTANTIATE_MODULE_VAR(htc,
#endif
#if (defined(CONFIG_MCL) || defined(QCA_WIFI_QCA8074) || \
#if (defined(WMI_MULTI_MAC_SVC) || defined(QCA_WIFI_QCA8074) || \
defined(QCA_WIFI_QCA6018))
static const uint32_t svc_id[] = {WMI_CONTROL_SVC, WMI_CONTROL_SVC_WMAC1,
WMI_CONTROL_SVC_WMAC2};

View file

@ -1139,14 +1139,6 @@ static enum HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
return result;
}
if (!IS_TX_CREDIT_FLOW_ENABLED(pEndpoint)) {
tx_resources =
hif_get_free_queue_number(target->hif_dev,
pEndpoint->UL_PipeID);
} else {
tx_resources = 0;
}
LOCK_HTC_TX(target);
if (!HTC_QUEUE_EMPTY(&sendQueue)) {
@ -1185,6 +1177,14 @@ static enum HTC_SEND_QUEUE_RESULT htc_try_send(HTC_TARGET *target,
/* now drain the endpoint TX queue for transmission as long as we have
* enough transmit resources
*/
if (!IS_TX_CREDIT_FLOW_ENABLED(pEndpoint)) {
tx_resources =
hif_get_free_queue_number(target->hif_dev,
pEndpoint->UL_PipeID);
} else {
tx_resources = 0;
}
while (true) {
if (HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue) == 0)

View file

@ -118,7 +118,7 @@ QDF_STATUS target_if_crypto_set_key(struct wlan_objmgr_vdev *vdev,
struct cdp_peer *peer = NULL;
uint8_t peer_id;
uint8_t def_tx_idx;
void *pdev_wmi_handle;
wmi_unified_t pdev_wmi_handle;
bool pairwise;
QDF_STATUS status;

View file

@ -285,7 +285,7 @@ static QDF_STATUS target_if_dfs_set_phyerr_filter_offload(
bool dfs_phyerr_filter_offload)
{
QDF_STATUS status;
void *wmi_handle;
wmi_unified_t wmi_handle;
if (!pdev) {
target_if_err("null pdev");

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -140,7 +140,7 @@ QDF_STATUS target_if_green_ap_enable_egap(
struct wlan_green_ap_egap_params *egap_params)
{
struct wlan_pdev_green_ap_ctx *green_ap_ctx;
void *wmi_hdl;
wmi_unified_t wmi_hdl;
if (!pdev) {
green_ap_err("pdev context passed is NULL");
@ -175,7 +175,7 @@ QDF_STATUS target_if_green_ap_enable_egap(
QDF_STATUS target_if_green_ap_set_ps_on_off(struct wlan_objmgr_pdev *pdev,
bool value, uint8_t pdev_id)
{
void *wmi_hdl;
wmi_unified_t wmi_hdl;
if (!pdev) {
green_ap_err("pdev context passed is NULL");

View file

@ -117,7 +117,8 @@ int init_deinit_populate_service_bitmap(void *wmi_handle, uint8_t *event,
*
* Return: zero on successful population of fw_version command or failure flag
*/
int init_deinit_populate_fw_version_cmd(void *wmi_handle, uint8_t *event);
int
init_deinit_populate_fw_version_cmd(wmi_unified_t wmi_handle, uint8_t *event);
/**
* init_deinit_populate_target_cap() - populate target cap

View file

@ -142,7 +142,8 @@ int init_deinit_populate_service_bitmap(void *wmi_handle, uint8_t *event,
return 0;
}
int init_deinit_populate_fw_version_cmd(void *wmi_handle, uint8_t *event)
int init_deinit_populate_fw_version_cmd(wmi_unified_t wmi_handle,
uint8_t *event)
{
QDF_STATUS status;

View file

@ -378,7 +378,7 @@ QDF_STATUS
target_if_scan_start(struct wlan_objmgr_pdev *pdev,
struct scan_start_request *req)
{
void *pdev_wmi_handle;
wmi_unified_t pdev_wmi_handle;
pdev_wmi_handle = GET_WMI_HDL_FROM_PDEV(pdev);
if (!pdev_wmi_handle) {
@ -392,7 +392,7 @@ QDF_STATUS
target_if_scan_cancel(struct wlan_objmgr_pdev *pdev,
struct scan_cancel_param *req)
{
void *pdev_wmi_handle;
wmi_unified_t pdev_wmi_handle;
pdev_wmi_handle = GET_WMI_HDL_FROM_PDEV(pdev);
if (!pdev_wmi_handle) {

View file

@ -269,7 +269,7 @@ static QDF_STATUS wifi_pos_oem_data_req(struct wlan_objmgr_psoc *psoc,
struct oem_data_req *req)
{
QDF_STATUS status;
void *wmi_hdl = GET_WMI_HDL_FROM_PSOC(psoc);
wmi_unified_t wmi_hdl = GET_WMI_HDL_FROM_PSOC(psoc);
target_if_debug("Send oem data req to target");
@ -564,7 +564,7 @@ static QDF_STATUS target_if_wifi_pos_cfg_fw(struct wlan_objmgr_psoc *psoc,
{
uint8_t i;
QDF_STATUS status;
void *wmi_hdl = GET_WMI_HDL_FROM_PSOC(psoc);
wmi_unified_t wmi_hdl = GET_WMI_HDL_FROM_PSOC(psoc);
wmi_oem_dma_ring_cfg_req_fixed_param cfg = {0};
if (!wmi_hdl) {

View file

@ -235,7 +235,25 @@ typedef void (*wlan_objmgr_peer_status_handler)(
* @WLAN_CFR_ID: CFG Capture method
* @WLAN_VDEV_TARGET_IF_ID: Target interface layer
* @WLAN_RX_PKT_TAG_ID: RX protocol tag operations
* @WLAN_INTEROP_ISSUES_AP_ID: interop issues ap operation
* @WLAN_INTEROP_ISSUES_AP_ID: interop issues ap operation
* @WLAN_WDS_ID: WDS operations
* @WLAN_PROXY_ARP_ID: AP proxy ARP
* @WLAN_WNM_ID: wireless network management operations
* @WLAN_RRM_ID: Radio resource management operations
* @WLAN_TR69_ID: TR69 operations
* @WLAN_MGMT_RX_ID: Legacy offload management frame input handler
* @WLAN_MGMT_TX_ID: Legacy offload management frame output handler
* @WLAN_NSS_IF_ID: NSS offload interface operations
* @WLAN_MBO_ID: MBO operations
* @WLAN_RTT_ID: RTT operations
* @WLAN_ALD_ID: Ath Link Diagnostic operations
* @WLAN_ME_ID: Multicast enhancement operations
* @WLAN_MGMT_HANDLER_ID: Management frame handler
* @WLAN_MLME_HANDLER_ID: MLME handler
* @WLAN_DBDC_ID: Dual Band Dual Concurrent mode operations
* @WLAN_MLME_OBJMGR_ID: MLME object manager operations VAP, Node
* @WLAN_OFFCHAN_TX_ID: Offchannel Tx operations
* @WLAN_MISC_ID: power manager, PAPI, rate set, etc.
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
*/
/* New value added to the enum must also be reflected in function
@ -294,6 +312,24 @@ typedef enum {
WLAN_VDEV_TARGET_IF_ID = 49,
WLAN_RX_PKT_TAG_ID = 50,
WLAN_INTEROP_ISSUES_AP_ID = 51,
WLAN_WDS_ID = 52,
WLAN_PROXY_ARP_ID = 53,
WLAN_WNM_ID = 54,
WLAN_RRM_ID = 55,
WLAN_TR69_ID = 56,
WLAN_MGMT_RX_ID = 57,
WLAN_MGMT_TX_ID = 58,
WLAN_NSS_IF_ID = 59,
WLAN_MBO_ID = 60,
WLAN_RTT_ID = 61,
WLAN_ALD_ID = 62,
WLAN_ME_ID = 63,
WLAN_MGMT_HANDLER_ID = 64,
WLAN_MLME_HANDLER_ID = 65,
WLAN_DBDC_ID = 66,
WLAN_MLME_OBJMGR_ID = 67,
WLAN_OFFCHAN_TX_ID = 68,
WLAN_MISC_ID = 69,
WLAN_REF_ID_MAX,
} wlan_objmgr_ref_dbgid;
@ -359,6 +395,24 @@ static inline char *string_from_dbgid(wlan_objmgr_ref_dbgid id)
"WLAN_VDEV_TARGET_IF_ID",
"WLAN_RX_PKT_TAG_ID",
"WLAN_INTEROP_ISSUES_AP_ID",
"WLAN_WDS_ID",
"WLAN_PROXY_ARP_ID",
"WLAN_WNM_ID",
"WLAN_RRM_ID",
"WLAN_TR69_ID",
"WLAN_MGMT_RX_ID",
"WLAN_MGMT_TX_ID",
"WLAN_NSS_IF_ID",
"WLAN_MBO_ID",
"WLAN_RTT_ID",
"WLAN_ALD_ID",
"WLAN_ME_ID",
"WLAN_MGMT_HANDLER_ID",
"WLAN_MLME_HANDLER_ID",
"WLAN_DBDC_ID",
"WLAN_MLME_OBJMGR_ID",
"WLAN_OFFCHAN_TX_ID",
"WLAN_MISC_ID",
"WLAN_REF_ID_MAX"};
return (char *)strings[id];

View file

@ -159,7 +159,37 @@ typedef QDF_STATUS (*wlan_ser_umac_cmd_cb)(void *umac_cmd);
/**
* enum wlan_umac_cmd_id - Command Type
* @WLAN_SER_CMD_SCAN: Scan command
* @WLAN_SER_CMD_SCAN: Scan command
* @WLAN_SER_CMD_NONSCAN: Non-scan command
* @WLAN_SER_CMD_HDD_ISSUE_REASSOC_SAME_AP: HDD Reassoc cmd
* @WLAN_SER_CMD_SME_ISSUE_REASSOC_SAME_AP: SME Reassoc cmd
* @WLAN_SER_CMD_SME_ISSUE_DISASSOC_FOR_HANDOFF: SME Disassoc cmd
* @WLAN_SER_CMD_SME_ISSUE_ASSOC_TO_SIMILAR_AP: SME Assoc cmd
* @WLAN_SER_CMD_FORCE_IBSS_LEAVE: IBSS leave AP cmd
* @WLAN_SER_CMD_SME_ISSUE_FT_REASSOC: SME reassoc cmd
* @WLAN_SER_CMD_FORCE_DISASSOC_STA: Force diassoc for STA vap
* @WLAN_SER_CMD_FORCE_DEAUTH_STA: Force deauth for STA vap
* @WLAN_SER_CMD_PERFORM_PRE_AUTH: Pre auth ops cmd
* @WLAN_SER_CMD_WM_STATUS_CHANGE: WM status modification cmd
* @WLAN_SER_CMD_NDP_INIT_REQ: NDP init request cmd
* @WLAN_SER_CMD_NDP_RESP_REQ: NDP response to request cmd
* @WLAN_SER_CMD_NDP_DATA_END_INIT_REQ: NDP data end init request
* @WLAN_SER_CMD_NDP_END_ALL_REQ: NDP close all request
* @WLAN_SER_CMD_ADDTS: ADD Ts cmd
* @WLAN_SER_CMD_DELTS: Del Ts cmd
* @WLAN_SER_CMD_TDLS_SEND_MGMT: TDLS mgmt send cmd
* @WLAN_SER_CMD_TDLS_ADD_PEER: TDLS cmd to add peer
* @WLAN_SER_CMD_TDLS_DEL_PEER: TDLS cmd to del peer
* @WLAN_SER_CMD_SET_HW_MODE: Cmd to set hardware mode change
* @WLAN_SER_CMD_NSS_UPDATE: Cmd to update NSS config
* @WLAN_SER_CMD_SET_DUAL_MAC_CONFIG: Cmd to set dual mac
* @WLAN_SER_CMD_SET_ANTENNA_MODE: Set antenna mode
* @WLAN_SER_CMD_DEL_STA_SESSION: Cmd to del STA session
* @WLAN_SER_CMD_VDEV_START_BSS: Cmd to start a AP VDEV
* @WLAN_SER_CMD_VDEV_STOP_BSS: Cmd to stop a AP VDEV
* @WLAN_SER_CMD_VDEV_CONNECT: Cmd to start a STA VDEV
* @WLAN_SER_CMD_VDEV_DISCONNECT: Cmd to stop a STA VDEV
* @WLAN_SER_CMD_VDEV_RESTART: Cmd to restart a VDEV
*/
enum wlan_serialization_cmd_type {
/* all scan command before non-scan */

View file

@ -217,7 +217,13 @@ void reg_dmn_print_channels_in_opclass(uint8_t *country, uint8_t op_class)
uint16_t i = 0;
class = reg_get_class_from_country(country);
while (class && class->op_class) {
if (!class) {
reg_err("class is NULL");
return;
}
while (class->op_class) {
if (class->op_class == op_class) {
for (i = 0;
(i < REG_MAX_CHANNELS_PER_OPERATING_CLASS &&

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff