From f42053713bc8881e25c2c03138efb9080b2f25a0 Mon Sep 17 00:00:00 2001 From: Min Liu Date: Thu, 21 May 2020 19:00:09 +0800 Subject: [PATCH] qcacld-3.0: Add a sysfs replacement for get_gtxBWMask file path: /sys/class/net/wlanxx/gtx_bw_mask example: cat gtx_bw_mask Change-Id: Ifbaa43b9889c37344bf39c6afe6e5c2536b123da CRs-Fixed: 2692000 --- core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.c | 72 ++++++++++++++++++++++- core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.h | 1 + 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.c b/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.c index 2a69b7fa7a..d377f5849a 100644 --- a/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.c +++ b/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.c @@ -45,6 +45,22 @@ static int hdd_sysfs_set_green_tx_param(struct hdd_adapter *adapter, #define hdd_sysfs_set_green_tx_param(adapter, id, value) \ hdd_sysfs_set_green_tx_param(adapter, id, #id, value) +static int hdd_sysfs_get_green_tx_param(struct hdd_adapter *adapter, + green_tx_param id, + const char *id_string) +{ + int value; + + value = wma_cli_get_command(adapter->vdev_id, id, GTX_CMD); + + hdd_debug("%s %d", id_string, value); + + return value; +} + +#define hdd_sysfs_get_green_tx_param(adapter, id) \ + hdd_sysfs_get_green_tx_param(adapter, id, #id) + static ssize_t __hdd_sysfs_gtx_bw_mask_store(struct net_device *net_dev, char const *buf, size_t count) @@ -120,8 +136,60 @@ hdd_sysfs_gtx_bw_mask_store(struct device *dev, return errno_size; } -static DEVICE_ATTR(gtx_bw_mask, 0220, - NULL, hdd_sysfs_gtx_bw_mask_store); +static ssize_t +__hdd_sysfs_gtx_bw_mask_show(struct net_device *net_dev, char *buf) +{ + struct hdd_adapter *adapter = netdev_priv(net_dev); + struct hdd_context *hdd_ctx; + int ret, value; + + if (hdd_validate_adapter(adapter)) { + hdd_err_rl("adapter validate fail"); + return -EINVAL; + } + + hdd_ctx = WLAN_HDD_GET_CTX(adapter); + ret = wlan_hdd_validate_context(hdd_ctx); + if (ret != 0) + return ret; + + if (!wlan_hdd_validate_modules_state(hdd_ctx)) + return -EINVAL; + + value = hdd_sysfs_get_green_tx_param(adapter, + WMI_VDEV_PARAM_GTX_BW_MASK); + if (value < 0) { + hdd_err_rl("failed to get green tx BW Mask"); + return -EINVAL; + } + + scnprintf(buf, PAGE_SIZE, "%d", value); + + return ret; +} + +static ssize_t +hdd_sysfs_gtx_bw_mask_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct net_device *net_dev = container_of(dev, struct net_device, dev); + struct osif_vdev_sync *vdev_sync; + ssize_t errno_size; + + errno_size = osif_vdev_sync_op_start(net_dev, &vdev_sync); + if (errno_size) + return errno_size; + + errno_size = __hdd_sysfs_gtx_bw_mask_show(net_dev, buf); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno_size; +} + +static DEVICE_ATTR(gtx_bw_mask, 0660, hdd_sysfs_gtx_bw_mask_show, + hdd_sysfs_gtx_bw_mask_store); int hdd_sysfs_gtx_bw_mask_create(struct hdd_adapter *adapter) { diff --git a/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.h b/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.h index bc5eed9379..e7ee039c3c 100644 --- a/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.h +++ b/core/hdd/src/wlan_hdd_sysfs_gtx_bw_mask.h @@ -33,6 +33,7 @@ * (wlanxx is adapter name) * usage: * echo [arg_0] > gtx_bw_mask + * cat gtx_bw_mask * * Return: 0 on success and errno on failure */