diff --git a/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt b/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt index 6df1efe8858..8e725450473 100644 --- a/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt +++ b/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt @@ -24,6 +24,8 @@ Required properties: Optional properties: - qcom,has_autodetect_xo: boolean flag to determine whether Iris XO auto detect should be performed during boot up. +- qcom,wlan-rx-buff-count: WLAN RX buffer count is a configurable value, +using a smaller count for this buffer will reduce the memory usage. Example: diff --git a/drivers/net/wireless/wcnss/wcnss_wlan.c b/drivers/net/wireless/wcnss/wcnss_wlan.c index a75687b255b..316d131e194 100644 --- a/drivers/net/wireless/wcnss/wcnss_wlan.c +++ b/drivers/net/wireless/wcnss/wcnss_wlan.c @@ -103,6 +103,8 @@ static DEFINE_SPINLOCK(reg_spinlock); #define CCU_PRONTO_LAST_ADDR1_OFFSET 0x10 #define CCU_PRONTO_LAST_ADDR2_OFFSET 0x14 +#define WCNSS_DEF_WLAN_RX_BUFF_COUNT 1024 + #define WCNSS_CTRL_CHANNEL "WCNSS_CTRL" #define WCNSS_MAX_FRAME_SIZE (4*1024) #define WCNSS_VERSION_LEN 30 @@ -258,6 +260,7 @@ static struct { const struct dev_pm_ops *pm_ops; int triggered; int smd_channel_ready; + u32 wlan_rx_buff_count; smd_channel_t *smd_ch; unsigned char wcnss_version[WCNSS_VERSION_LEN]; unsigned char fw_major; @@ -977,6 +980,17 @@ int fw_cal_data_available(void) return -ENODEV; } +u32 wcnss_get_wlan_rx_buff_count(void) +{ + if (penv) + return penv->wlan_rx_buff_count; + else + return WCNSS_DEF_WLAN_RX_BUFF_COUNT; + +} +EXPORT_SYMBOL(wcnss_get_wlan_rx_buff_count); + + static int wcnss_smd_tx(void *data, int len) { int ret = 0; @@ -1498,6 +1512,11 @@ wcnss_trigger_config(struct platform_device *pdev) int has_pronto_hw = of_property_read_bool(pdev->dev.of_node, "qcom,has_pronto_hw"); + if (of_property_read_u32(pdev->dev.of_node, + "qcom,wlan-rx-buff-count", &penv->wlan_rx_buff_count)) { + penv->wlan_rx_buff_count = WCNSS_DEF_WLAN_RX_BUFF_COUNT; + } + /* make sure we are only triggered once */ if (penv->triggered) return 0; diff --git a/include/linux/wcnss_wlan.h b/include/linux/wcnss_wlan.h index 2a53114b135..2ba585ed199 100644 --- a/include/linux/wcnss_wlan.h +++ b/include/linux/wcnss_wlan.h @@ -34,6 +34,7 @@ struct wcnss_wlan_config { #define HAVE_WCNSS_SUSPEND_RESUME_NOTIFY 1 #define HAVE_WCNSS_RESET_INTR 1 #define HAVE_WCNSS_CAL_DOWNLOAD 1 +#define HAVE_WCNSS_RX_BUFF_COUNT 1 struct device *wcnss_wlan_get_device(void); struct resource *wcnss_wlan_get_memory_map(struct device *dev); @@ -69,6 +70,7 @@ void wcnss_pronto_log_debug_regs(void); int wcnss_device_ready(void); void wcnss_riva_dump_pmic_regs(void); int wcnss_xo_auto_detect_enabled(void); +u32 wcnss_get_wlan_rx_buff_count(void); #define wcnss_wlan_get_drvdata(dev) dev_get_drvdata(dev) #define wcnss_wlan_set_drvdata(dev, data) dev_set_drvdata((dev), (data))