qcacld-3.0: Dptrace enhancements
* Log EAPOL, ARP, DHCP, MGMT, ROAM Events, ICMP, Data packets, TX-Completions by default. * Set default verbosity as low (existing is high) * Throttle ICMP and Data packets if threshold exceeds. * Enable live mode by default. Added ini entry to disable it and configure high throughput thresh - gDptraceConfig * Log only SA and DA for proto packets (and not 32 bytes) * Format prints to fit in 1 line. CRs-Fixed: 2051134 Change-Id: Ia94732e49023950f458a7402650d4b8f5e1d5563
This commit is contained in:
@@ -2205,7 +2205,6 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev,
|
|||||||
qdf_dp_trace_set_track(msdu, QDF_RX);
|
qdf_dp_trace_set_track(msdu, QDF_RX);
|
||||||
QDF_NBUF_CB_TX_PACKET_TRACK(msdu) = QDF_NBUF_TX_PKT_DATA_TRACK;
|
QDF_NBUF_CB_TX_PACKET_TRACK(msdu) = QDF_NBUF_TX_PKT_DATA_TRACK;
|
||||||
QDF_NBUF_CB_RX_CTX_ID(msdu) = rx_ctx_id;
|
QDF_NBUF_CB_RX_CTX_ID(msdu) = rx_ctx_id;
|
||||||
ol_rx_log_packet(pdev, peer_id, msdu);
|
|
||||||
DPTRACE(qdf_dp_trace(msdu,
|
DPTRACE(qdf_dp_trace(msdu,
|
||||||
QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
|
@@ -1626,17 +1626,6 @@ ol_rx_in_order_deliver(struct ol_txrx_vdev_t *vdev,
|
|||||||
ol_rx_data_process(peer, msdu_list);
|
ol_rx_data_process(peer, msdu_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ol_rx_log_packet(htt_pdev_handle htt_pdev,
|
|
||||||
uint8_t peer_id, qdf_nbuf_t msdu)
|
|
||||||
{
|
|
||||||
struct ol_txrx_peer_t *peer;
|
|
||||||
|
|
||||||
peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id);
|
|
||||||
if (peer)
|
|
||||||
qdf_dp_trace_log_pkt(peer->vdev->vdev_id, msdu, QDF_RX,
|
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev,
|
ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev,
|
||||||
uint32_t msdu_count,
|
uint32_t msdu_count,
|
||||||
|
@@ -52,7 +52,6 @@ struct hdd_context;
|
|||||||
#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (255)
|
#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (255)
|
||||||
#define TX_SCHED_WRR_PARAM_STRING_LENGTH (50)
|
#define TX_SCHED_WRR_PARAM_STRING_LENGTH (50)
|
||||||
#define TX_SCHED_WRR_PARAMS_NUM (5)
|
#define TX_SCHED_WRR_PARAMS_NUM (5)
|
||||||
|
|
||||||
#define CFG_ENABLE_RX_THREAD (1 << 0)
|
#define CFG_ENABLE_RX_THREAD (1 << 0)
|
||||||
#define CFG_ENABLE_RPS (1 << 1)
|
#define CFG_ENABLE_RPS (1 << 1)
|
||||||
#define CFG_ENABLE_NAPI (1 << 2)
|
#define CFG_ENABLE_NAPI (1 << 2)
|
||||||
@@ -9127,6 +9126,67 @@ enum dot11p_mode {
|
|||||||
#define CFG_ENABLE_DP_TRACE_MAX (1)
|
#define CFG_ENABLE_DP_TRACE_MAX (1)
|
||||||
#define CFG_ENABLE_DP_TRACE_DEFAULT (1)
|
#define CFG_ENABLE_DP_TRACE_DEFAULT (1)
|
||||||
|
|
||||||
|
/* Max length of gDptraceConfig string. e.g.- "1, 6, 1, 62" */
|
||||||
|
#define DP_TRACE_CONFIG_STRING_LENGTH (20)
|
||||||
|
|
||||||
|
/* At max 4 DP Trace config parameters are allowed. Refer - gDptraceConfig */
|
||||||
|
#define DP_TRACE_CONFIG_NUM_PARAMS (4)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Default value of live mode in case it cannot be determined from cfg string
|
||||||
|
* gDptraceConfig
|
||||||
|
*/
|
||||||
|
#define DP_TRACE_CONFIG_DEFAULT_LIVE_MODE (1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Default value of thresh (packets/second) beyond which DP Trace is disabled.
|
||||||
|
* Use this default in case the value cannot be determined from cfg string
|
||||||
|
* gDptraceConfig
|
||||||
|
*/
|
||||||
|
#define DP_TRACE_CONFIG_DEFAULT_THRESH (4)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Number of intervals of BW timer to wait before enabling/disabling DP Trace.
|
||||||
|
* Since throughput threshold to disable live logging for DP Trace is very low,
|
||||||
|
* we calculate throughput based on # packets received in a second.
|
||||||
|
* For example assuming bandwidth timer interval is 100ms, and if more than 4
|
||||||
|
* packets are received in 10 * 100 ms interval, we want to disable DP Trace
|
||||||
|
* live logging. DP_TRACE_CONFIG_DEFAULT_THRESH_TIME_LIMIT is the default
|
||||||
|
* value, to be used in case the real value cannot be derived from
|
||||||
|
* bw timer interval
|
||||||
|
*/
|
||||||
|
#define DP_TRACE_CONFIG_DEFAULT_THRESH_TIME_LIMIT (10)
|
||||||
|
|
||||||
|
/* Default proto bitmap in case its missing in gDptraceConfig string */
|
||||||
|
#define DP_TRACE_CONFIG_DEFAULT_BITMAP \
|
||||||
|
(QDF_NBUF_PKT_TRAC_TYPE_EAPOL |\
|
||||||
|
QDF_NBUF_PKT_TRAC_TYPE_DHCP |\
|
||||||
|
QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION |\
|
||||||
|
QDF_NBUF_PKT_TRAC_TYPE_ARP |\
|
||||||
|
QDF_NBUF_PKT_TRAC_TYPE_ICMP)\
|
||||||
|
|
||||||
|
/* Default verbosity, in case its missing in gDptraceConfig string*/
|
||||||
|
#define DP_TRACE_CONFIG_DEFAULT_VERBOSTY QDF_DP_TRACE_VERBOSITY_LOW
|
||||||
|
/*
|
||||||
|
* Config DPTRACE
|
||||||
|
* The sequence of params is important. If some param is missing, defaults are
|
||||||
|
* considered.
|
||||||
|
* Param 1: Enable/Disable DP Trace live mode (uint8_t)
|
||||||
|
* Param 2: DP Trace live mode high bandwidth thresh.(uint8_t)
|
||||||
|
* (packets/second) beyond which DP Trace is disabled. Decimal Val.
|
||||||
|
* MGMT, DHCP, EAPOL, ARP pkts are not counted. ICMP and Data are.
|
||||||
|
* Param 3: Default Verbosity (0-3)
|
||||||
|
* Param 4: Proto Bitmap (uint8_t). Decimal Value.
|
||||||
|
* (decimal 62 = 0x3e)
|
||||||
|
* e.g., to disable live mode, use the following param in the ini file.
|
||||||
|
* gDptraceConfig = 0
|
||||||
|
* e.g., to enable dptrace live mode and set the thresh as 4,
|
||||||
|
* use the following param in the ini file.
|
||||||
|
* gDptraceConfig = 1, 4
|
||||||
|
*/
|
||||||
|
#define CFG_ENABLE_DP_TRACE_CONFIG "gDptraceConfig"
|
||||||
|
#define CFG_ENABLE_DP_TRACE_CONFIG_DEFAULT "1, 8, 1, 62"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This parameter will set the weight to calculate the average low pass
|
* This parameter will set the weight to calculate the average low pass
|
||||||
* filter for channel congestion.
|
* filter for channel congestion.
|
||||||
@@ -12302,6 +12362,7 @@ struct hdd_config {
|
|||||||
bool enable_fatal_event;
|
bool enable_fatal_event;
|
||||||
bool bpf_enabled;
|
bool bpf_enabled;
|
||||||
bool enable_dp_trace;
|
bool enable_dp_trace;
|
||||||
|
uint8_t dp_trace_config[DP_TRACE_CONFIG_STRING_LENGTH];
|
||||||
bool adaptive_dwell_mode_enabled;
|
bool adaptive_dwell_mode_enabled;
|
||||||
enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode;
|
enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode;
|
||||||
enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode;
|
enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode;
|
||||||
|
@@ -2774,4 +2774,12 @@ hdd_nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_dp_trace_init() - initialize DP Trace by calling the QDF API
|
||||||
|
* @config: hdd config
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*/
|
||||||
|
void hdd_dp_trace_init(struct hdd_config *config);
|
||||||
|
|
||||||
#endif /* end #if !defined(WLAN_HDD_MAIN_H) */
|
#endif /* end #if !defined(WLAN_HDD_MAIN_H) */
|
||||||
|
@@ -4096,6 +4096,12 @@ struct reg_table_entry g_registry_table[] = {
|
|||||||
CFG_ENABLE_DP_TRACE_MIN,
|
CFG_ENABLE_DP_TRACE_MIN,
|
||||||
CFG_ENABLE_DP_TRACE_MAX),
|
CFG_ENABLE_DP_TRACE_MAX),
|
||||||
|
|
||||||
|
|
||||||
|
REG_VARIABLE_STRING(CFG_ENABLE_DP_TRACE_CONFIG, WLAN_PARAM_String,
|
||||||
|
struct hdd_config, dp_trace_config,
|
||||||
|
VAR_FLAGS_OPTIONAL,
|
||||||
|
(void *) CFG_ENABLE_DP_TRACE_CONFIG_DEFAULT),
|
||||||
|
|
||||||
REG_VARIABLE(CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME, WLAN_PARAM_Integer,
|
REG_VARIABLE(CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME, WLAN_PARAM_Integer,
|
||||||
struct hdd_config, scan_adaptive_dwell_mode,
|
struct hdd_config, scan_adaptive_dwell_mode,
|
||||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||||
@@ -6232,10 +6238,12 @@ void hdd_cfg_print(struct hdd_context *pHddCtx)
|
|||||||
hdd_debug("Name = [%s] Value = [%s]",
|
hdd_debug("Name = [%s] Value = [%s]",
|
||||||
CFG_ENABLE_TX_SCHED_WRR_BE_NAME,
|
CFG_ENABLE_TX_SCHED_WRR_BE_NAME,
|
||||||
pHddCtx->config->tx_sched_wrr_be);
|
pHddCtx->config->tx_sched_wrr_be);
|
||||||
|
hdd_info("Name = [%s] Value = [%u]",
|
||||||
hdd_debug("Name = [%s] Value = [%u]",
|
|
||||||
CFG_ENABLE_DP_TRACE,
|
CFG_ENABLE_DP_TRACE,
|
||||||
pHddCtx->config->enable_dp_trace);
|
pHddCtx->config->enable_dp_trace);
|
||||||
|
hdd_debug("Name = [%s] Value = [%s]",
|
||||||
|
CFG_ENABLE_DP_TRACE_CONFIG,
|
||||||
|
pHddCtx->config->dp_trace_config);
|
||||||
hdd_debug("Name = [%s] Value = [%u]",
|
hdd_debug("Name = [%s] Value = [%u]",
|
||||||
CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME,
|
CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME,
|
||||||
pHddCtx->config->scan_adaptive_dwell_mode);
|
pHddCtx->config->scan_adaptive_dwell_mode);
|
||||||
|
@@ -2949,6 +2949,8 @@ static int __iw_softap_set_two_ints_getnone(struct net_device *dev,
|
|||||||
qdf_dp_trace_enable_live_mode();
|
qdf_dp_trace_enable_live_mode();
|
||||||
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
||||||
qdf_dp_trace_clear_buffer();
|
qdf_dp_trace_clear_buffer();
|
||||||
|
else if (value[1] == DISABLE_DP_TRACE_LIVE_MODE)
|
||||||
|
qdf_dp_trace_disable_live_mode();
|
||||||
break;
|
break;
|
||||||
case QCSAP_ENABLE_FW_PROFILE:
|
case QCSAP_ENABLE_FW_PROFILE:
|
||||||
hdd_debug("QCSAP_ENABLE_FW_PROFILE: %d %d",
|
hdd_debug("QCSAP_ENABLE_FW_PROFILE: %d %d",
|
||||||
|
@@ -6435,6 +6435,9 @@ static void hdd_pld_request_bus_bandwidth(struct hdd_context *hdd_ctx,
|
|||||||
hdd_napi_apply_throughput_policy(hdd_ctx, tx_packets, rx_packets);
|
hdd_napi_apply_throughput_policy(hdd_ctx, tx_packets, rx_packets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qdf_dp_trace_throttle_live_mode(
|
||||||
|
(next_vote_level > PLD_BUS_WIDTH_NONE) ? true : false);
|
||||||
|
|
||||||
/* fine-tuning parameters for RX Flows */
|
/* fine-tuning parameters for RX Flows */
|
||||||
temp_rx = (rx_packets + hdd_ctx->prev_rx) / 2;
|
temp_rx = (rx_packets + hdd_ctx->prev_rx) / 2;
|
||||||
|
|
||||||
@@ -9679,6 +9682,46 @@ static void wlan_init_bug_report_lock(void)
|
|||||||
qdf_spinlock_create(&p_cds_context->bug_report_lock);
|
qdf_spinlock_create(&p_cds_context->bug_report_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hdd_dp_trace_init(struct hdd_config *config)
|
||||||
|
{
|
||||||
|
|
||||||
|
bool live_mode = DP_TRACE_CONFIG_DEFAULT_LIVE_MODE;
|
||||||
|
uint8_t thresh = DP_TRACE_CONFIG_DEFAULT_THRESH;
|
||||||
|
uint16_t thresh_time_limit = DP_TRACE_CONFIG_DEFAULT_THRESH_TIME_LIMIT;
|
||||||
|
uint8_t verbosity = DP_TRACE_CONFIG_DEFAULT_VERBOSTY;
|
||||||
|
uint8_t proto_bitmap = DP_TRACE_CONFIG_DEFAULT_BITMAP;
|
||||||
|
uint8_t config_params[DP_TRACE_CONFIG_NUM_PARAMS];
|
||||||
|
uint8_t num_entries = 0;
|
||||||
|
|
||||||
|
hdd_string_to_u8_array(config->dp_trace_config, config_params,
|
||||||
|
&num_entries, sizeof(config_params));
|
||||||
|
|
||||||
|
/* calculating, num bw timer intervals in a second (1000ms) */
|
||||||
|
if (config->busBandwidthComputeInterval)
|
||||||
|
thresh_time_limit =
|
||||||
|
(1000 / config->busBandwidthComputeInterval);
|
||||||
|
else
|
||||||
|
hdd_err("busBandwidthComputeInterval is 0, using defaults");
|
||||||
|
|
||||||
|
switch (num_entries) {
|
||||||
|
case 4:
|
||||||
|
proto_bitmap = config_params[3];
|
||||||
|
case 3:
|
||||||
|
verbosity = config_params[2];
|
||||||
|
case 2:
|
||||||
|
thresh = config_params[1];
|
||||||
|
case 1:
|
||||||
|
live_mode = config_params[0];
|
||||||
|
default:
|
||||||
|
hdd_info("live_mode %u thresh %u time_limit %u verbosity %u bitmap 0x%x",
|
||||||
|
live_mode, thresh, thresh_time_limit,
|
||||||
|
verbosity, proto_bitmap);
|
||||||
|
};
|
||||||
|
|
||||||
|
qdf_dp_trace_init(live_mode, thresh, thresh_time_limit,
|
||||||
|
verbosity, proto_bitmap);
|
||||||
|
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* hdd_wlan_startup() - HDD init function
|
* hdd_wlan_startup() - HDD init function
|
||||||
* @dev: Pointer to the underlying device
|
* @dev: Pointer to the underlying device
|
||||||
@@ -9748,7 +9791,7 @@ int hdd_wlan_startup(struct device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hdd_ctx->config->enable_dp_trace)
|
if (hdd_ctx->config->enable_dp_trace)
|
||||||
qdf_dp_trace_init();
|
hdd_dp_trace_init(hdd_ctx->config);
|
||||||
|
|
||||||
if (hdd_ipa_init(hdd_ctx) == QDF_STATUS_E_FAILURE)
|
if (hdd_ipa_init(hdd_ctx) == QDF_STATUS_E_FAILURE)
|
||||||
goto err_wiphy_unregister;
|
goto err_wiphy_unregister;
|
||||||
|
@@ -1384,7 +1384,7 @@ QDF_STATUS hdd_wlan_re_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pHddCtx->config->enable_dp_trace)
|
if (pHddCtx->config->enable_dp_trace)
|
||||||
qdf_dp_trace_init();
|
hdd_dp_trace_init(pHddCtx->config);
|
||||||
|
|
||||||
hdd_bus_bandwidth_init(pHddCtx);
|
hdd_bus_bandwidth_init(pHddCtx);
|
||||||
|
|
||||||
|
@@ -697,6 +697,7 @@ QDF_STATUS hdd_softap_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
|||||||
struct hdd_context *pHddCtx = NULL;
|
struct hdd_context *pHddCtx = NULL;
|
||||||
struct qdf_mac_addr src_mac;
|
struct qdf_mac_addr src_mac;
|
||||||
uint8_t staid;
|
uint8_t staid;
|
||||||
|
bool proto_pkt_logged = false;
|
||||||
|
|
||||||
/* Sanity check on inputs */
|
/* Sanity check on inputs */
|
||||||
if (unlikely((NULL == context) || (NULL == rxBuf))) {
|
if (unlikely((NULL == context) || (NULL == rxBuf))) {
|
||||||
@@ -760,12 +761,17 @@ QDF_STATUS hdd_softap_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
hdd_event_eapol_log(skb, QDF_RX);
|
hdd_event_eapol_log(skb, QDF_RX);
|
||||||
|
proto_pkt_logged = qdf_dp_trace_log_pkt(pAdapter->sessionId,
|
||||||
|
skb, QDF_RX,
|
||||||
|
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||||
DPTRACE(qdf_dp_trace(skb,
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
qdf_nbuf_data_addr(skb),
|
qdf_nbuf_data_addr(skb),
|
||||||
sizeof(qdf_nbuf_data(skb)), QDF_RX));
|
sizeof(qdf_nbuf_data(skb)), QDF_RX));
|
||||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
if (!proto_pkt_logged) {
|
||||||
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
|
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
(uint8_t *)skb->data, qdf_nbuf_len(skb),
|
(uint8_t *)skb->data, qdf_nbuf_len(skb),
|
||||||
QDF_RX));
|
QDF_RX));
|
||||||
@@ -776,6 +782,7 @@ QDF_STATUS hdd_softap_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
|||||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
||||||
QDF_RX));
|
QDF_RX));
|
||||||
|
}
|
||||||
|
|
||||||
skb->protocol = eth_type_trans(skb, skb->dev);
|
skb->protocol = eth_type_trans(skb, skb->dev);
|
||||||
|
|
||||||
|
@@ -390,7 +390,6 @@ void wlan_hdd_classify_pkt(struct sk_buff *skb)
|
|||||||
else if (qdf_nbuf_is_icmp_pkt(skb))
|
else if (qdf_nbuf_is_icmp_pkt(skb))
|
||||||
QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
|
QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
|
||||||
QDF_NBUF_CB_PACKET_TYPE_ICMP;
|
QDF_NBUF_CB_PACKET_TYPE_ICMP;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -533,6 +532,7 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
uint8_t STAId;
|
uint8_t STAId;
|
||||||
struct hdd_station_ctx *pHddStaCtx = &pAdapter->sessionCtx.station;
|
struct hdd_station_ctx *pHddStaCtx = &pAdapter->sessionCtx.station;
|
||||||
struct qdf_mac_addr *mac_addr;
|
struct qdf_mac_addr *mac_addr;
|
||||||
|
bool pkt_proto_logged = false;
|
||||||
#ifdef QCA_PKT_PROTO_TRACE
|
#ifdef QCA_PKT_PROTO_TRACE
|
||||||
uint8_t proto_type = 0;
|
uint8_t proto_type = 0;
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter);
|
||||||
@@ -704,24 +704,30 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
++pAdapter->stats.tx_packets;
|
++pAdapter->stats.tx_packets;
|
||||||
|
|
||||||
hdd_event_eapol_log(skb, QDF_TX);
|
hdd_event_eapol_log(skb, QDF_TX);
|
||||||
qdf_dp_trace_log_pkt(pAdapter->sessionId, skb, QDF_TX,
|
pkt_proto_logged = qdf_dp_trace_log_pkt(pAdapter->sessionId,
|
||||||
|
skb, QDF_TX,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID);
|
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||||
QDF_NBUF_CB_TX_PACKET_TRACK(skb) = QDF_NBUF_TX_PKT_DATA_TRACK;
|
QDF_NBUF_CB_TX_PACKET_TRACK(skb) = QDF_NBUF_TX_PKT_DATA_TRACK;
|
||||||
QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, QDF_NBUF_TX_PKT_HDD);
|
QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, QDF_NBUF_TX_PKT_HDD);
|
||||||
|
|
||||||
qdf_dp_trace_set_track(skb, QDF_TX);
|
qdf_dp_trace_set_track(skb, QDF_TX);
|
||||||
|
|
||||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
|
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(skb),
|
QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(skb),
|
||||||
sizeof(qdf_nbuf_data(skb)),
|
sizeof(qdf_nbuf_data(skb)),
|
||||||
QDF_TX));
|
QDF_TX));
|
||||||
|
if (!pkt_proto_logged) {
|
||||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)skb->data,
|
QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)skb->data,
|
||||||
qdf_nbuf_len(skb), QDF_TX));
|
qdf_nbuf_len(skb), QDF_TX));
|
||||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE) {
|
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE) {
|
||||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
|
QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE), QDF_TX));
|
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
||||||
|
QDF_TX));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hdd_is_tx_allowed(skb, STAId)) {
|
if (!hdd_is_tx_allowed(skb, STAId)) {
|
||||||
@@ -1151,6 +1157,7 @@ QDF_STATUS hdd_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
|||||||
unsigned int cpu_index;
|
unsigned int cpu_index;
|
||||||
struct qdf_mac_addr *mac_addr;
|
struct qdf_mac_addr *mac_addr;
|
||||||
bool wake_lock = false;
|
bool wake_lock = false;
|
||||||
|
bool proto_pkt_logged = false;
|
||||||
|
|
||||||
/* Sanity check on inputs */
|
/* Sanity check on inputs */
|
||||||
if (unlikely((NULL == context) || (NULL == rxBuf))) {
|
if (unlikely((NULL == context) || (NULL == rxBuf))) {
|
||||||
@@ -1209,22 +1216,32 @@ QDF_STATUS hdd_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
hdd_event_eapol_log(skb, QDF_RX);
|
hdd_event_eapol_log(skb, QDF_RX);
|
||||||
|
proto_pkt_logged = qdf_dp_trace_log_pkt(pAdapter->sessionId,
|
||||||
|
skb, QDF_RX,
|
||||||
|
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||||
|
|
||||||
DPTRACE(qdf_dp_trace(skb,
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
qdf_nbuf_data_addr(skb),
|
qdf_nbuf_data_addr(skb),
|
||||||
sizeof(qdf_nbuf_data(skb)), QDF_RX));
|
sizeof(qdf_nbuf_data(skb)), QDF_RX));
|
||||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
|
||||||
|
if (!proto_pkt_logged) {
|
||||||
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
|
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
(uint8_t *)skb->data, qdf_nbuf_len(skb), QDF_RX));
|
(uint8_t *)skb->data, qdf_nbuf_len(skb),
|
||||||
|
QDF_RX));
|
||||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
||||||
DPTRACE(qdf_dp_trace(skb,
|
DPTRACE(qdf_dp_trace(skb,
|
||||||
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
(uint8_t *)
|
||||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||||
|
(qdf_nbuf_len(skb) -
|
||||||
|
QDF_DP_TRACE_RECORD_SIZE),
|
||||||
QDF_RX));
|
QDF_RX));
|
||||||
|
}
|
||||||
mac_addr = (struct qdf_mac_addr *)(skb->data+QDF_MAC_ADDR_SIZE);
|
mac_addr = (struct qdf_mac_addr *)(skb->data+QDF_MAC_ADDR_SIZE);
|
||||||
|
|
||||||
ucfg_tdls_update_rx_pkt_cnt(pAdapter->hdd_vdev, mac_addr);
|
ucfg_tdls_update_rx_pkt_cnt(pAdapter->hdd_vdev, mac_addr);
|
||||||
|
@@ -13086,6 +13086,8 @@ static int __iw_set_two_ints_getnone(struct net_device *dev,
|
|||||||
qdf_dp_trace_enable_live_mode();
|
qdf_dp_trace_enable_live_mode();
|
||||||
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
||||||
qdf_dp_trace_clear_buffer();
|
qdf_dp_trace_clear_buffer();
|
||||||
|
else if (value[1] == DISABLE_DP_TRACE_LIVE_MODE)
|
||||||
|
qdf_dp_trace_disable_live_mode();
|
||||||
break;
|
break;
|
||||||
case WE_SET_MON_MODE_CHAN:
|
case WE_SET_MON_MODE_CHAN:
|
||||||
ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]);
|
ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]);
|
||||||
|
Reference in New Issue
Block a user