qcacld-3.0: Add flag CONNECTIVITY_PKTLOG
Add new flag CONNECTIVITY_PKTLOG to make independent of FEATURE_PKTLOG and REMOVE_PKT_LOG for packet logging. This is because 32 tx/rx pkt logging is connection related and this feature is independent of pkt log feature. Here driver will send first 32 tx/rx pkts consisting of mgmt and data pkts to userspace which can be used for debugging Change-Id: If987ac8b6cb10b464a4ec2ace1c55215c0aa3614 CRs-Fixed: 3222970
这个提交包含在:
2
Kbuild
2
Kbuild
@@ -3217,6 +3217,8 @@ cppflags-$(CONFIG_WLAN_FASTPATH) += -DWLAN_FEATURE_FASTPATH
|
|||||||
|
|
||||||
cppflags-$(CONFIG_FEATURE_PKTLOG) += -DFEATURE_PKTLOG
|
cppflags-$(CONFIG_FEATURE_PKTLOG) += -DFEATURE_PKTLOG
|
||||||
|
|
||||||
|
cppflags-$(CONFIG_CONNECTIVITY_PKTLOG) += -DCONNECTIVITY_PKTLOG
|
||||||
|
|
||||||
ifeq ($(CONFIG_WLAN_NAPI), y)
|
ifeq ($(CONFIG_WLAN_NAPI), y)
|
||||||
cppflags-y += -DFEATURE_NAPI
|
cppflags-y += -DFEATURE_NAPI
|
||||||
cppflags-y += -DHIF_IRQ_AFFINITY
|
cppflags-y += -DHIF_IRQ_AFFINITY
|
||||||
|
@@ -1352,6 +1352,8 @@ ifneq ($(CONFIG_HIF_USB), y)
|
|||||||
CONFIG_WLAN_LOGGING_SOCK_SVC := y
|
CONFIG_WLAN_LOGGING_SOCK_SVC := y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
CONFIG_CONNECTIVITY_PKTLOG := y
|
||||||
|
|
||||||
ifneq ($(TARGET_BUILD_VARIANT),user)
|
ifneq ($(TARGET_BUILD_VARIANT),user)
|
||||||
CONFIG_DESC_DUP_DETECT_DEBUG := y
|
CONFIG_DESC_DUP_DETECT_DEBUG := y
|
||||||
endif
|
endif
|
||||||
|
@@ -818,7 +818,7 @@ typedef void (*sme_get_raom_scan_ch_callback)(
|
|||||||
void *context);
|
void *context);
|
||||||
|
|
||||||
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
||||||
defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
|
defined(CONNECTIVITY_PKTLOG)
|
||||||
/**
|
/**
|
||||||
* csr_packetdump_timer_stop() - stops packet dump timer
|
* csr_packetdump_timer_stop() - stops packet dump timer
|
||||||
*
|
*
|
||||||
|
@@ -282,7 +282,7 @@ struct csr_roamstruct {
|
|||||||
int32_t sPendingCommands;
|
int32_t sPendingCommands;
|
||||||
struct csr_roam_session *roamSession;
|
struct csr_roam_session *roamSession;
|
||||||
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
||||||
defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
|
defined(CONNECTIVITY_PKTLOG)
|
||||||
qdf_mc_timer_t packetdump_timer;
|
qdf_mc_timer_t packetdump_timer;
|
||||||
#endif
|
#endif
|
||||||
spinlock_t roam_state_lock;
|
spinlock_t roam_state_lock;
|
||||||
|
@@ -1233,7 +1233,7 @@ void csr_set_global_cfgs(struct mac_context *mac)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
#if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
|
||||||
defined(FEATURE_PKTLOG) && !defined(REMOVE_PKT_LOG)
|
defined(CONNECTIVITY_PKTLOG)
|
||||||
/**
|
/**
|
||||||
* csr_packetdump_timer_handler() - packet dump timer
|
* csr_packetdump_timer_handler() - packet dump timer
|
||||||
* handler
|
* handler
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
#include "cds_utils.h"
|
#include "cds_utils.h"
|
||||||
#include "wlan_dlm_api.h"
|
#include "wlan_dlm_api.h"
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
|
||||||
#include "pktlog_ac.h"
|
#include "pktlog_ac.h"
|
||||||
#else
|
#else
|
||||||
#include "pktlog_ac_fmt.h"
|
#include "pktlog_ac_fmt.h"
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
#include <../../core/src/vdev_mgr_ops.h>
|
#include <../../core/src/vdev_mgr_ops.h>
|
||||||
#include "wlan_pkt_capture_ucfg_api.h"
|
#include "wlan_pkt_capture_ucfg_api.h"
|
||||||
|
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
|
||||||
#include <wlan_logging_sock_svc.h>
|
#include <wlan_logging_sock_svc.h>
|
||||||
#endif
|
#endif
|
||||||
#include "wlan_cm_roam_api.h"
|
#include "wlan_cm_roam_api.h"
|
||||||
@@ -2696,35 +2696,102 @@ static inline void wma_mgmt_unmap_buf(tp_wma_handle wma_handle, qdf_nbuf_t buf)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
|
||||||
/**
|
/**
|
||||||
* wma_mgmt_pktdump_status_map() - map MGMT Tx completion status with
|
* wma_mgmt_qdf_status_map() - map MGMT Tx completion status with
|
||||||
* packet dump Tx status
|
* packet dump Tx status
|
||||||
* @status: MGMT Tx completion status
|
* @status: MGMT Tx completion status
|
||||||
*
|
*
|
||||||
* Return: packet dump tx_status enum
|
* Return: packet dump tx_status enum
|
||||||
*/
|
*/
|
||||||
static inline enum tx_status
|
static inline enum qdf_dp_tx_rx_status
|
||||||
wma_mgmt_pktdump_status_map(WMI_MGMT_TX_COMP_STATUS_TYPE status)
|
wma_mgmt_qdf_status_map(WMI_MGMT_TX_COMP_STATUS_TYPE status)
|
||||||
{
|
{
|
||||||
enum tx_status pktdump_status;
|
enum qdf_dp_tx_rx_status pktdump_status;
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK:
|
case WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK:
|
||||||
pktdump_status = tx_status_ok;
|
pktdump_status = QDF_TX_RX_STATUS_OK;
|
||||||
break;
|
break;
|
||||||
case WMI_MGMT_TX_COMP_TYPE_DISCARD:
|
case WMI_MGMT_TX_COMP_TYPE_DISCARD:
|
||||||
pktdump_status = tx_status_discard;
|
pktdump_status = QDF_TX_RX_STATUS_DROP;
|
||||||
break;
|
break;
|
||||||
case WMI_MGMT_TX_COMP_TYPE_COMPLETE_NO_ACK:
|
case WMI_MGMT_TX_COMP_TYPE_COMPLETE_NO_ACK:
|
||||||
pktdump_status = tx_status_no_ack;
|
pktdump_status = QDF_TX_RX_STATUS_NO_ACK;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pktdump_status = tx_status_discard;
|
pktdump_status = QDF_TX_RX_STATUS_DROP;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return pktdump_status;
|
return pktdump_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wma_mgmt_pktdump_tx_handler() - calls tx cb if CONNECTIVITY_PKTLOG
|
||||||
|
* feature is enabled
|
||||||
|
* @wma_handle: wma handle
|
||||||
|
* @buf: nbuf
|
||||||
|
* @vdev_id : vdev id
|
||||||
|
* @status : status
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void wma_mgmt_pktdump_tx_handler(tp_wma_handle wma_handle,
|
||||||
|
qdf_nbuf_t buf, uint8_t vdev_id,
|
||||||
|
uint32_t status)
|
||||||
|
{
|
||||||
|
ol_txrx_pktdump_cb packetdump_cb;
|
||||||
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
enum qdf_dp_tx_rx_status pktdump_status;
|
||||||
|
|
||||||
|
packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
|
||||||
|
pktdump_status = wma_mgmt_qdf_status_map(status);
|
||||||
|
if (packetdump_cb)
|
||||||
|
packetdump_cb(soc, WMI_PDEV_ID_SOC, vdev_id,
|
||||||
|
buf, pktdump_status, QDF_TX_MGMT_PKT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wma_mgmt_pktdump_rx_handler() - calls rx cb if CONNECTIVITY_PKTLOG
|
||||||
|
* feature is enabled
|
||||||
|
* @mgmt_rx_params: mgmt rx params
|
||||||
|
* @rx_pkt: cds packet
|
||||||
|
* @wma_handle: wma handle
|
||||||
|
* mgt_type: management type
|
||||||
|
* mgt_subtype: management subtype
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void wma_mgmt_pktdump_rx_handler(
|
||||||
|
struct mgmt_rx_event_params *mgmt_rx_params,
|
||||||
|
cds_pkt_t *rx_pkt, tp_wma_handle wma_handle,
|
||||||
|
uint8_t mgt_type, uint8_t mgt_subtype)
|
||||||
|
{
|
||||||
|
ol_txrx_pktdump_cb packetdump_cb;
|
||||||
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
|
packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
|
||||||
|
if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
|
||||||
|
mgt_subtype != MGMT_SUBTYPE_BEACON) &&
|
||||||
|
packetdump_cb)
|
||||||
|
packetdump_cb(soc, mgmt_rx_params->pdev_id,
|
||||||
|
rx_pkt->pkt_meta.session_id, rx_pkt->pkt_buf,
|
||||||
|
QDF_TX_RX_STATUS_OK, QDF_RX_MGMT_PKT);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
static inline void wma_mgmt_pktdump_tx_handler(tp_wma_handle wma_handle,
|
||||||
|
qdf_nbuf_t buf, uint8_t vdev_id,
|
||||||
|
uint32_t status)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void wma_mgmt_pktdump_rx_handler(
|
||||||
|
struct mgmt_rx_event_params *mgmt_rx_params,
|
||||||
|
cds_pkt_t *rx_pkt, tp_wma_handle wma_handle,
|
||||||
|
uint8_t mgt_type, uint8_t mgt_subtype)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2742,11 +2809,6 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
|
|||||||
qdf_nbuf_t buf = NULL;
|
qdf_nbuf_t buf = NULL;
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
uint8_t vdev_id = 0;
|
uint8_t vdev_id = 0;
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
|
||||||
ol_txrx_pktdump_cb packetdump_cb;
|
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
|
||||||
enum tx_status pktdump_status;
|
|
||||||
#endif
|
|
||||||
struct wmi_mgmt_params mgmt_params = {};
|
struct wmi_mgmt_params mgmt_params = {};
|
||||||
|
|
||||||
if (wma_validate_handle(wma_handle))
|
if (wma_validate_handle(wma_handle))
|
||||||
@@ -2770,14 +2832,7 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
|
|||||||
vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
|
vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
|
||||||
mgmt_params.vdev_id = vdev_id;
|
mgmt_params.vdev_id = vdev_id;
|
||||||
|
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
wma_mgmt_pktdump_tx_handler(wma_handle, buf, vdev_id, status);
|
||||||
packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
|
|
||||||
pktdump_status = wma_mgmt_pktdump_status_map(status);
|
|
||||||
if (packetdump_cb)
|
|
||||||
packetdump_cb(soc, WMI_PDEV_ID_SOC, vdev_id,
|
|
||||||
buf, pktdump_status, TX_MGMT_PKT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = mgmt_txrx_tx_completion_handler(pdev, desc_id, status,
|
ret = mgmt_txrx_tx_completion_handler(pdev, desc_id, status,
|
||||||
&mgmt_params);
|
&mgmt_params);
|
||||||
|
|
||||||
@@ -3544,10 +3599,6 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
|
|||||||
int status;
|
int status;
|
||||||
tp_wma_handle wma_handle = (tp_wma_handle)
|
tp_wma_handle wma_handle = (tp_wma_handle)
|
||||||
cds_get_context(QDF_MODULE_ID_WMA);
|
cds_get_context(QDF_MODULE_ID_WMA);
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
|
||||||
ol_txrx_pktdump_cb packetdump_cb;
|
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
|
||||||
#endif
|
|
||||||
static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
|
static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
|
||||||
static uint8_t limit_prints_load_unload = RATE_LIMIT - 1;
|
static uint8_t limit_prints_load_unload = RATE_LIMIT - 1;
|
||||||
static uint8_t limit_prints_recovery = RATE_LIMIT - 1;
|
static uint8_t limit_prints_recovery = RATE_LIMIT - 1;
|
||||||
@@ -3720,16 +3771,9 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
|
|||||||
cds_pkt_return_packet(rx_pkt);
|
cds_pkt_return_packet(rx_pkt);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
wma_mgmt_pktdump_rx_handler(mgmt_rx_params, rx_pkt,
|
||||||
|
wma_handle, mgt_type, mgt_subtype);
|
||||||
|
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
|
||||||
packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
|
|
||||||
if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
|
|
||||||
mgt_subtype != MGMT_SUBTYPE_BEACON) &&
|
|
||||||
packetdump_cb)
|
|
||||||
packetdump_cb(soc, mgmt_rx_params->pdev_id,
|
|
||||||
rx_pkt->pkt_meta.session_id, rx_pkt->pkt_buf,
|
|
||||||
QDF_STATUS_SUCCESS, RX_MGMT_PKT);
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
#ifndef _PKTLOG_FMT_H_
|
#ifndef _PKTLOG_FMT_H_
|
||||||
#define _PKTLOG_FMT_H_
|
#define _PKTLOG_FMT_H_
|
||||||
|
|
||||||
#ifndef REMOVE_PKT_LOG
|
#if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG)
|
||||||
|
|
||||||
#define CUR_PKTLOG_VER 10010 /* Packet log version */
|
#define CUR_PKTLOG_VER 10010 /* Packet log version */
|
||||||
#define PKTLOG_MAGIC_NUM 7735225
|
#define PKTLOG_MAGIC_NUM 7735225
|
||||||
@@ -308,6 +309,7 @@ struct ath_pktlog_buf {
|
|||||||
* @TX_DATA_PKT: TX data Packet
|
* @TX_DATA_PKT: TX data Packet
|
||||||
* @RX_MGMT_PKT: RX management Packet
|
* @RX_MGMT_PKT: RX management Packet
|
||||||
* @RX_DATA_PKT: RX data Packet
|
* @RX_DATA_PKT: RX data Packet
|
||||||
|
* @INVALID_PKT: Invalid packet
|
||||||
*
|
*
|
||||||
* This enum has packet types
|
* This enum has packet types
|
||||||
*/
|
*/
|
||||||
@@ -318,6 +320,7 @@ enum pkt_type {
|
|||||||
TX_DATA_PKT,
|
TX_DATA_PKT,
|
||||||
RX_MGMT_PKT,
|
RX_MGMT_PKT,
|
||||||
RX_DATA_PKT,
|
RX_DATA_PKT,
|
||||||
|
INVALID_PKT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
在新工单中引用
屏蔽一个用户