Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/debug.c =================================================================== --- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/debug.c +++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/debug.c @@ -1226,7 +1226,7 @@ static ssize_t ath11k_write_pktlog_filte struct htt_rx_ring_tlv_filter tlv_filter = {0}; u32 rx_filter = 0, ring_id, filter, mode; u8 buf[128] = {0}; - int ret; + int ret, rx_buf_sz; ssize_t rc; mutex_lock(&ar->conf_mutex); @@ -1264,6 +1264,17 @@ static ssize_t ath11k_write_pktlog_filte } } + /* Clear rx filter set for monitor mode and rx status */ + ring_id = ar->dp.rx_mon_status_refill_ring.refill_buf_ring.ring_id; + ret = ath11k_dp_tx_htt_rx_filter_setup(ar->ab, ring_id, ar->dp.mac_id, + HAL_RXDMA_MONITOR_STATUS, + rx_buf_sz, &tlv_filter); + if (ret) { + ath11k_warn(ar->ab, "failed to set rx filter for monitor status ring\n"); + goto out; + } + + #define HTT_RX_FILTER_TLV_LITE_MODE \ (HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \ HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \ @@ -1279,6 +1290,7 @@ static ssize_t ath11k_write_pktlog_filte HTT_RX_FILTER_TLV_FLAGS_MPDU_END | HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | HTT_RX_FILTER_TLV_FLAGS_ATTENTION; + rx_buf_sz = DP_RX_BUFFER_SIZE; } else if (mode == ATH11K_PKTLOG_MODE_LITE) { ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar, HTT_PPDU_STATS_TAG_PKTLOG); @@ -1288,7 +1300,12 @@ static ssize_t ath11k_write_pktlog_filte } rx_filter = HTT_RX_FILTER_TLV_LITE_MODE; + rx_buf_sz = DP_RX_BUFFER_SIZE_LITE; } else { + rx_buf_sz = DP_RX_BUFFER_SIZE; + tlv_filter = ath11k_mac_mon_status_filter_default; + rx_filter = tlv_filter.rx_filter; + ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar, HTT_PPDU_STATS_TAG_DEFAULT); if (ret) { @@ -1309,14 +1326,14 @@ static ssize_t ath11k_write_pktlog_filte ring_id = ar->dp.rx_mon_status_refill_ring.refill_buf_ring.ring_id; ret = ath11k_dp_tx_htt_rx_filter_setup(ar->ab, ring_id, ar->dp.mac_id, HAL_RXDMA_MONITOR_STATUS, - DP_RX_BUFFER_SIZE, &tlv_filter); + rx_buf_sz, &tlv_filter); if (ret) { ath11k_warn(ar->ab, "failed to set rx filter for monitor status ring\n"); goto out; } - ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "pktlog filter %d mode %s\n", - filter, ((mode == ATH11K_PKTLOG_MODE_FULL) ? "full" : "lite")); + ath11k_info(ar->ab, "pktlog mode %s\n", + ((mode == ATH11K_PKTLOG_MODE_FULL) ? "full" : "lite")); ar->debug.pktlog_filter = filter; ar->debug.pktlog_mode = mode; Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp.h =================================================================== --- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/dp.h +++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp.h @@ -190,6 +190,7 @@ struct ath11k_pdev_dp { #define DP_RXDMA_MONITOR_DESC_RING_SIZE 4096 #define DP_RX_BUFFER_SIZE 2048 +#define DP_RX_BUFFER_SIZE_LITE 1024 #define DP_RX_BUFFER_ALIGN_SIZE 128 #define DP_RXDMA_BUF_COOKIE_BUF_ID GENMASK(17, 0) Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp_rx.c =================================================================== --- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/dp_rx.c +++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -3260,6 +3260,8 @@ int ath11k_dp_rx_process_mon_status(stru struct ath11k_peer *peer; struct ath11k_sta *arsta; int num_buffs_reaped = 0; + u32 rx_buf_sz; + u16 log_type = 0; __skb_queue_head_init(&skb_list); @@ -3272,10 +3274,18 @@ int ath11k_dp_rx_process_mon_status(stru memset(&ppdu_info, 0, sizeof(ppdu_info)); ppdu_info.peer_id = HAL_INVALID_PEERID; - if (ath11k_debug_is_pktlog_rx_stats_enabled(ar)) { - trace_ath11k_htt_rxdesc(ar, skb->data, DP_RX_BUFFER_SIZE); + if (ath11k_debug_is_pktlog_lite_mode_enabled(ar)) { + log_type = ATH11K_PKTLOG_TYPE_LITE_RX; + rx_buf_sz = DP_RX_BUFFER_SIZE_LITE; + } else if (ath11k_debug_is_pktlog_rx_stats_enabled(ar)) { + log_type = ATH11K_PKTLOG_TYPE_RX_STATBUF; + rx_buf_sz = DP_RX_BUFFER_SIZE; + } + + if (log_type) { + trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz); ath11k_rx_stats_buf_pktlog_process(ar, skb->data, - DP_RX_BUFFER_SIZE); + log_type, rx_buf_sz); } hal_status = ath11k_hal_rx_parse_mon_status(ab, &ppdu_info, skb); @@ -3312,9 +3322,8 @@ int ath11k_dp_rx_process_mon_status(stru } if (ath11k_debug_is_pktlog_peer_valid(ar, peer->addr)) { - trace_ath11k_htt_rxdesc(ar, skb->data, DP_RX_BUFFER_SIZE); - ath11k_rx_stats_buf_pktlog_process(ar, skb->data, - DP_RX_BUFFER_SIZE); + trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz); + ath11k_rx_stats_buf_pktlog_process(ar, skb->data, log_type, rx_buf_sz); } spin_unlock_bh(&ab->base_lock); Index: backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/trace.h =================================================================== --- backports-20191227-4.4.60-b805aa84b44f.orig/drivers/net/wireless/ath/ath11k/trace.h +++ backports-20191227-4.4.60-b805aa84b44f/drivers/net/wireless/ath/ath11k/trace.h @@ -79,14 +79,15 @@ TRACE_EVENT(ath11k_htt_ppdu_stats, ); TRACE_EVENT(ath11k_htt_rxdesc, - TP_PROTO(struct ath11k *ar, const void *data, size_t len), + TP_PROTO(struct ath11k *ar, const void *data, size_t type, size_t len), - TP_ARGS(ar, data, len), + TP_ARGS(ar, data, type, len), TP_STRUCT__entry( __string(device, dev_name(ar->ab->dev)) __string(driver, dev_driver_string(ar->ab->dev)) __field(u16, len) + __field(u16, type) __dynamic_array(u8, rxdesc, len) ), @@ -94,6 +95,7 @@ TRACE_EVENT(ath11k_htt_rxdesc, __assign_str(device, dev_name(ar->ab->dev)); __assign_str(driver, dev_driver_string(ar->ab->dev)); __entry->len = len; + __entry->type = type; memcpy(__get_dynamic_array(rxdesc), data, len); ),