diff --git a/utils/pktlog/pktlog_ac.c b/utils/pktlog/pktlog_ac.c index 157581f91592..a7a0583e2217 100644 --- a/utils/pktlog/pktlog_ac.c +++ b/utils/pktlog/pktlog_ac.c @@ -585,10 +585,14 @@ static void pktlog_callback_registration(uint8_t callback_type) } #endif +#define ONE_MEGABYTE (1024 * 1024) + void pktlog_init(struct hif_opaque_softc *scn) { struct pktlog_dev_t *pl_dev = get_pktlog_handle(); struct ath_pktlog_info *pl_info; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + uint32_t buff_size; if (!pl_dev || !pl_dev->pl_info) { qdf_print("pl_dev or pl_info is invalid"); @@ -601,7 +605,9 @@ void pktlog_init(struct hif_opaque_softc *scn) PKTLOG_LOCK_INIT(pl_info); mutex_init(&pl_info->pktlog_mutex); - pl_info->buf_size = PKTLOG_DEFAULT_BUFSIZE; + buff_size = cdp_cfg_get(soc, cfg_dp_pktlog_buffer_size) * ONE_MEGABYTE; + + pl_info->buf_size = (buff_size ? buff_size : ONE_MEGABYTE); pl_info->buf = NULL; pl_info->log_state = 0; pl_info->init_saved_state = 0; @@ -780,14 +786,14 @@ int pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state, return err; } -#define ONE_MEGABYTE (1024 * 1024) -#define MAX_ALLOWED_PKTLOG_SIZE (64 * ONE_MEGABYTE) - static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) { struct pktlog_dev_t *pl_dev; struct ath_pktlog_info *pl_info; uint8_t pdev_id = WMI_PDEV_ID_SOC; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + uint32_t buff_size; + uint32_t max_allowed_buff_size; pl_dev = get_pktlog_handle(); @@ -815,10 +821,13 @@ static int __pktlog_setsize(struct hif_opaque_softc *scn, int32_t size) pl_info->curr_pkt_state = PKTLOG_OPR_IN_PROGRESS; - if (size < ONE_MEGABYTE || size > MAX_ALLOWED_PKTLOG_SIZE) { + buff_size = cdp_cfg_get(soc, cfg_dp_pktlog_buffer_size) * ONE_MEGABYTE; + max_allowed_buff_size = (buff_size ? buff_size : ONE_MEGABYTE); + + if (size < ONE_MEGABYTE || size > max_allowed_buff_size) { qdf_print("%s: Cannot Set Pktlog Buffer size of %d bytes.Min required is %d MB and Max allowed is %d MB.", __func__, size, (ONE_MEGABYTE / ONE_MEGABYTE), - (MAX_ALLOWED_PKTLOG_SIZE / ONE_MEGABYTE)); + (max_allowed_buff_size / ONE_MEGABYTE)); pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS; qdf_print("%s: Invalid requested buff size", __func__); return -EINVAL; diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index 7bb4917ed465..922bdd7d1963 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -316,6 +316,10 @@ #define WLAN_CFG_RX_FLOW_SEARCH_TABLE_SIZE_MIN 1 #define WLAN_CFG_RX_FLOW_SEARCH_TABLE_SIZE_MAX 16384 +#define WLAN_CFG_PKTLOG_BUFFER_SIZE 10 +#define WLAN_CFG_PKTLOG_MIN_BUFFER_SIZE 1 +#define WLAN_CFG_PKTLOG_MAX_BUFFER_SIZE 10 + /* DP INI Declerations */ #define CFG_DP_HTT_PACKET_TYPE \ CFG_INI_UINT("dp_htt_packet_type", \ @@ -781,6 +785,13 @@ #define CFG_DP_CONFIG_PKT_CAPTURE_MODE_ALL #endif /* WLAN_FEATURE_PKT_CAPTURE */ +#define CFG_DP_PKTLOG_BUFFER_SIZE \ + CFG_INI_UINT("PktlogBufSize", \ + WLAN_CFG_PKTLOG_MIN_BUFFER_SIZE, \ + WLAN_CFG_PKTLOG_MAX_BUFFER_SIZE, \ + WLAN_CFG_PKTLOG_BUFFER_SIZE, \ + CFG_VALUE_OR_DEFAULT, "Packet Log buffer size") + #define CFG_DP \ CFG(CFG_DP_HTT_PACKET_TYPE) \ CFG(CFG_DP_INT_BATCH_THRESHOLD_OTHER) \ @@ -852,6 +863,7 @@ CFG(CFG_DP_RX_FLOW_SEARCH_TABLE_PER_PDEV) \ CFG(CFG_DP_RX_MON_PROTOCOL_FLOW_TAG_ENABLE) \ CFG(CFG_DP_RXDMA_MONITOR_RX_DROP_THRESHOLD) \ - CFG_DP_CONFIG_PKT_CAPTURE_MODE_ALL + CFG_DP_CONFIG_PKT_CAPTURE_MODE_ALL \ + CFG(CFG_DP_PKTLOG_BUFFER_SIZE) #endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 98ddc48b6c17..4fe6820b7939 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -473,6 +473,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc) cfg_get(psoc, CFG_DP_INT_BATCH_THRESHOLD_OTHER); wlan_cfg_ctx->int_timer_threshold_other = cfg_get(psoc, CFG_DP_INT_TIMER_THRESHOLD_OTHER); + wlan_cfg_ctx->pktlog_buffer_size = + cfg_get(psoc, CFG_DP_PKTLOG_BUFFER_SIZE); /* This is default mapping and can be overridden by HW config * received from FW */ diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index 4e125882d219..2c2cb79caddc 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -179,6 +179,7 @@ struct wlan_srng_cfg { * @rx_flow_max_search: max skid length for each hash entry * @rx_toeplitz_hash_key: toeplitz key pointer used for hash computation over * 5 tuple flow entry + * @pktlog_buffer_size: packet log buffer size */ struct wlan_cfg_dp_soc_ctxt { int num_int_ctxts; @@ -274,6 +275,7 @@ struct wlan_cfg_dp_soc_ctxt { uint16_t rx_flow_search_table_size; uint16_t rx_flow_max_search; uint8_t *rx_toeplitz_hash_key; + uint8_t pktlog_buffer_size; }; /**