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
Šī revīzija ir iekļauta:

revīziju iesūtīja
snandini

vecāks
7ae88fbc8a
revīzija
f8f9682e02
@@ -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_NBUF_CB_TX_PACKET_TRACK(msdu) = QDF_NBUF_TX_PKT_DATA_TRACK;
|
||||
QDF_NBUF_CB_RX_CTX_ID(msdu) = rx_ctx_id;
|
||||
ol_rx_log_packet(pdev, peer_id, msdu);
|
||||
DPTRACE(qdf_dp_trace(msdu,
|
||||
QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
ol_rx_offload_paddr_deliver_ind_handler(htt_pdev_handle htt_pdev,
|
||||
uint32_t msdu_count,
|
||||
|
@@ -52,7 +52,6 @@ struct hdd_context;
|
||||
#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (255)
|
||||
#define TX_SCHED_WRR_PARAM_STRING_LENGTH (50)
|
||||
#define TX_SCHED_WRR_PARAMS_NUM (5)
|
||||
|
||||
#define CFG_ENABLE_RX_THREAD (1 << 0)
|
||||
#define CFG_ENABLE_RPS (1 << 1)
|
||||
#define CFG_ENABLE_NAPI (1 << 2)
|
||||
@@ -9124,9 +9123,70 @@ enum dot11p_mode {
|
||||
*/
|
||||
#define CFG_ENABLE_DP_TRACE "enable_dp_trace"
|
||||
#define CFG_ENABLE_DP_TRACE_MIN (0)
|
||||
#define CFG_ENABLE_DP_TRACE_MAX (1)
|
||||
#define CFG_ENABLE_DP_TRACE_MAX (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
|
||||
* filter for channel congestion.
|
||||
@@ -12302,6 +12362,7 @@ struct hdd_config {
|
||||
bool enable_fatal_event;
|
||||
bool bpf_enabled;
|
||||
bool enable_dp_trace;
|
||||
uint8_t dp_trace_config[DP_TRACE_CONFIG_STRING_LENGTH];
|
||||
bool adaptive_dwell_mode_enabled;
|
||||
enum wmi_dwelltime_adaptive_mode scan_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
|
||||
|
||||
/**
|
||||
* 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) */
|
||||
|
@@ -4096,6 +4096,12 @@ struct reg_table_entry g_registry_table[] = {
|
||||
CFG_ENABLE_DP_TRACE_MIN,
|
||||
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,
|
||||
struct hdd_config, scan_adaptive_dwell_mode,
|
||||
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]",
|
||||
CFG_ENABLE_TX_SCHED_WRR_BE_NAME,
|
||||
pHddCtx->config->tx_sched_wrr_be);
|
||||
|
||||
hdd_debug("Name = [%s] Value = [%u]",
|
||||
hdd_info("Name = [%s] Value = [%u]",
|
||||
CFG_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]",
|
||||
CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME,
|
||||
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();
|
||||
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
||||
qdf_dp_trace_clear_buffer();
|
||||
else if (value[1] == DISABLE_DP_TRACE_LIVE_MODE)
|
||||
qdf_dp_trace_disable_live_mode();
|
||||
break;
|
||||
case QCSAP_ENABLE_FW_PROFILE:
|
||||
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);
|
||||
}
|
||||
|
||||
qdf_dp_trace_throttle_live_mode(
|
||||
(next_vote_level > PLD_BUS_WIDTH_NONE) ? true : false);
|
||||
|
||||
/* fine-tuning parameters for RX Flows */
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
* @dev: Pointer to the underlying device
|
||||
@@ -9748,7 +9791,7 @@ int hdd_wlan_startup(struct device *dev)
|
||||
}
|
||||
|
||||
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)
|
||||
goto err_wiphy_unregister;
|
||||
|
@@ -1384,7 +1384,7 @@ QDF_STATUS hdd_wlan_re_init(void)
|
||||
}
|
||||
|
||||
if (pHddCtx->config->enable_dp_trace)
|
||||
qdf_dp_trace_init();
|
||||
hdd_dp_trace_init(pHddCtx->config);
|
||||
|
||||
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 qdf_mac_addr src_mac;
|
||||
uint8_t staid;
|
||||
bool proto_pkt_logged = false;
|
||||
|
||||
/* Sanity check on inputs */
|
||||
if (unlikely((NULL == context) || (NULL == rxBuf))) {
|
||||
@@ -760,22 +761,28 @@ QDF_STATUS hdd_softap_rx_packet_cbk(void *context, qdf_nbuf_t rxBuf)
|
||||
}
|
||||
}
|
||||
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,
|
||||
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
qdf_nbuf_data_addr(skb),
|
||||
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,
|
||||
(uint8_t *)skb->data, qdf_nbuf_len(skb),
|
||||
QDF_RX));
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
||||
QDF_RX));
|
||||
}
|
||||
|
||||
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))
|
||||
QDF_NBUF_CB_GET_PACKET_TYPE(skb) =
|
||||
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;
|
||||
struct hdd_station_ctx *pHddStaCtx = &pAdapter->sessionCtx.station;
|
||||
struct qdf_mac_addr *mac_addr;
|
||||
bool pkt_proto_logged = false;
|
||||
#ifdef QCA_PKT_PROTO_TRACE
|
||||
uint8_t proto_type = 0;
|
||||
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;
|
||||
|
||||
hdd_event_eapol_log(skb, QDF_TX);
|
||||
qdf_dp_trace_log_pkt(pAdapter->sessionId, skb, QDF_TX,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||
pkt_proto_logged = qdf_dp_trace_log_pkt(pAdapter->sessionId,
|
||||
skb, QDF_TX,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||
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_dp_trace_set_track(skb, QDF_TX);
|
||||
|
||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(skb),
|
||||
sizeof(qdf_nbuf_data(skb)),
|
||||
QDF_TX));
|
||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)skb->data,
|
||||
qdf_nbuf_len(skb), QDF_TX));
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE) {
|
||||
if (!pkt_proto_logged) {
|
||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE), QDF_TX));
|
||||
QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)skb->data,
|
||||
qdf_nbuf_len(skb), QDF_TX));
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE) {
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
QDF_DP_TRACE_HDD_TX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
||||
QDF_TX));
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
struct qdf_mac_addr *mac_addr;
|
||||
bool wake_lock = false;
|
||||
bool proto_pkt_logged = false;
|
||||
|
||||
/* Sanity check on inputs */
|
||||
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);
|
||||
proto_pkt_logged = qdf_dp_trace_log_pkt(pAdapter->sessionId,
|
||||
skb, QDF_RX,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID);
|
||||
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
qdf_nbuf_data_addr(skb),
|
||||
sizeof(qdf_nbuf_data(skb)), QDF_RX));
|
||||
DPTRACE(qdf_dp_trace(skb, QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)skb->data, qdf_nbuf_len(skb), QDF_RX));
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
||||
|
||||
if (!proto_pkt_logged) {
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||
(qdf_nbuf_len(skb)-QDF_DP_TRACE_RECORD_SIZE),
|
||||
(uint8_t *)skb->data, qdf_nbuf_len(skb),
|
||||
QDF_RX));
|
||||
|
||||
if (qdf_nbuf_len(skb) > QDF_DP_TRACE_RECORD_SIZE)
|
||||
DPTRACE(qdf_dp_trace(skb,
|
||||
QDF_DP_TRACE_HDD_RX_PACKET_RECORD,
|
||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||
(uint8_t *)
|
||||
&skb->data[QDF_DP_TRACE_RECORD_SIZE],
|
||||
(qdf_nbuf_len(skb) -
|
||||
QDF_DP_TRACE_RECORD_SIZE),
|
||||
QDF_RX));
|
||||
}
|
||||
mac_addr = (struct qdf_mac_addr *)(skb->data+QDF_MAC_ADDR_SIZE);
|
||||
|
||||
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();
|
||||
else if (value[1] == CLEAR_DP_TRACE_BUFFER)
|
||||
qdf_dp_trace_clear_buffer();
|
||||
else if (value[1] == DISABLE_DP_TRACE_LIVE_MODE)
|
||||
qdf_dp_trace_disable_live_mode();
|
||||
break;
|
||||
case WE_SET_MON_MODE_CHAN:
|
||||
ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]);
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user