Loading drivers/net/wireless/ath/wil6210/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ wil6210-y += netdev.o wil6210-y += cfg80211.o wil6210-y += pcie_bus.o wil6210-$(CONFIG_WIL6210_DEBUGFS) += debugfs.o wil6210-y += sysfs.o wil6210-y += wmi.o wil6210-y += interrupt.o wil6210-y += txrx.o Loading drivers/net/wireless/ath/wil6210/pcie_bus.c +3 −12 Original line number Diff line number Diff line // SPDX-License-Identifier: ISC /* * Copyright (c) 2012-2017 Qualcomm Atheros, Inc. * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <linux/module.h> Loading Loading @@ -450,6 +439,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) wil_err(wil, "register_pm_notifier failed: %d\n", rc); wil6210_debugfs_init(wil); wil6210_sysfs_init(wil); wil_pm_runtime_allow(wil); Loading Loading @@ -482,6 +472,7 @@ static void wil_pcie_remove(struct pci_dev *pdev) wil_pm_runtime_forbid(wil); wil6210_sysfs_remove(wil); wil6210_debugfs_remove(wil); rtnl_lock(); wil_p2p_wdev_free(wil); Loading drivers/net/wireless/ath/wil6210/sysfs.c 0 → 100644 +113 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: ISC /* Copyright (c) 2016,2018-2019 The Linux Foundation. All rights reserved. */ #include <linux/device.h> #include <linux/sysfs.h> #include "wil6210.h" #include "wmi.h" static ssize_t ftm_txrx_offset_show(struct device *dev, struct device_attribute *attr, char *buf) { struct wil6210_priv *wil = dev_get_drvdata(dev); struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev); struct { struct wmi_cmd_hdr wmi; struct wmi_tof_get_tx_rx_offset_event evt; } __packed reply; int rc; ssize_t len; if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities)) return -EOPNOTSUPP; memset(&reply, 0, sizeof(reply)); rc = wmi_call(wil, WMI_TOF_GET_TX_RX_OFFSET_CMDID, vif->mid, NULL, 0, WMI_TOF_GET_TX_RX_OFFSET_EVENTID, &reply, sizeof(reply), 100); if (rc < 0) return rc; if (reply.evt.status) { wil_err(wil, "get_tof_tx_rx_offset failed, error %d\n", reply.evt.status); return -EIO; } len = snprintf(buf, PAGE_SIZE, "%u %u\n", le32_to_cpu(reply.evt.tx_offset), le32_to_cpu(reply.evt.rx_offset)); return len; } static ssize_t ftm_txrx_offset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct wil6210_priv *wil = dev_get_drvdata(dev); struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev); struct wmi_tof_set_tx_rx_offset_cmd cmd; struct { struct wmi_cmd_hdr wmi; struct wmi_tof_set_tx_rx_offset_event evt; } __packed reply; unsigned int tx_offset, rx_offset; int rc; if (sscanf(buf, "%u %u", &tx_offset, &rx_offset) != 2) return -EINVAL; if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities)) return -EOPNOTSUPP; memset(&cmd, 0, sizeof(cmd)); cmd.tx_offset = cpu_to_le32(tx_offset); cmd.rx_offset = cpu_to_le32(rx_offset); memset(&reply, 0, sizeof(reply)); rc = wmi_call(wil, WMI_TOF_SET_TX_RX_OFFSET_CMDID, vif->mid, &cmd, sizeof(cmd), WMI_TOF_SET_TX_RX_OFFSET_EVENTID, &reply, sizeof(reply), 100); if (rc < 0) return rc; if (reply.evt.status) { wil_err(wil, "set_tof_tx_rx_offset failed, error %d\n", reply.evt.status); return -EIO; } return count; } static DEVICE_ATTR_RW(ftm_txrx_offset); static struct attribute *wil6210_sysfs_entries[] = { &dev_attr_ftm_txrx_offset.attr, NULL }; static struct attribute_group wil6210_attribute_group = { .name = "wil6210", .attrs = wil6210_sysfs_entries, }; int wil6210_sysfs_init(struct wil6210_priv *wil) { struct device *dev = wil_to_dev(wil); int err; err = sysfs_create_group(&dev->kobj, &wil6210_attribute_group); if (err) { wil_err(wil, "failed to create sysfs group: %d\n", err); return err; } return 0; } void wil6210_sysfs_remove(struct wil6210_priv *wil) { struct device *dev = wil_to_dev(wil); sysfs_remove_group(&dev->kobj, &wil6210_attribute_group); } drivers/net/wireless/ath/wil6210/wil6210.h +2 −0 Original line number Diff line number Diff line Loading @@ -1332,6 +1332,8 @@ static inline int wil6210_debugfs_init(struct wil6210_priv *wil) { return 0; } static inline void wil6210_debugfs_remove(struct wil6210_priv *wil) {} #endif int wil6210_sysfs_init(struct wil6210_priv *wil); void wil6210_sysfs_remove(struct wil6210_priv *wil); int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid, struct station_info *sinfo); Loading Loading
drivers/net/wireless/ath/wil6210/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ wil6210-y += netdev.o wil6210-y += cfg80211.o wil6210-y += pcie_bus.o wil6210-$(CONFIG_WIL6210_DEBUGFS) += debugfs.o wil6210-y += sysfs.o wil6210-y += wmi.o wil6210-y += interrupt.o wil6210-y += txrx.o Loading
drivers/net/wireless/ath/wil6210/pcie_bus.c +3 −12 Original line number Diff line number Diff line // SPDX-License-Identifier: ISC /* * Copyright (c) 2012-2017 Qualcomm Atheros, Inc. * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <linux/module.h> Loading Loading @@ -450,6 +439,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) wil_err(wil, "register_pm_notifier failed: %d\n", rc); wil6210_debugfs_init(wil); wil6210_sysfs_init(wil); wil_pm_runtime_allow(wil); Loading Loading @@ -482,6 +472,7 @@ static void wil_pcie_remove(struct pci_dev *pdev) wil_pm_runtime_forbid(wil); wil6210_sysfs_remove(wil); wil6210_debugfs_remove(wil); rtnl_lock(); wil_p2p_wdev_free(wil); Loading
drivers/net/wireless/ath/wil6210/sysfs.c 0 → 100644 +113 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: ISC /* Copyright (c) 2016,2018-2019 The Linux Foundation. All rights reserved. */ #include <linux/device.h> #include <linux/sysfs.h> #include "wil6210.h" #include "wmi.h" static ssize_t ftm_txrx_offset_show(struct device *dev, struct device_attribute *attr, char *buf) { struct wil6210_priv *wil = dev_get_drvdata(dev); struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev); struct { struct wmi_cmd_hdr wmi; struct wmi_tof_get_tx_rx_offset_event evt; } __packed reply; int rc; ssize_t len; if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities)) return -EOPNOTSUPP; memset(&reply, 0, sizeof(reply)); rc = wmi_call(wil, WMI_TOF_GET_TX_RX_OFFSET_CMDID, vif->mid, NULL, 0, WMI_TOF_GET_TX_RX_OFFSET_EVENTID, &reply, sizeof(reply), 100); if (rc < 0) return rc; if (reply.evt.status) { wil_err(wil, "get_tof_tx_rx_offset failed, error %d\n", reply.evt.status); return -EIO; } len = snprintf(buf, PAGE_SIZE, "%u %u\n", le32_to_cpu(reply.evt.tx_offset), le32_to_cpu(reply.evt.rx_offset)); return len; } static ssize_t ftm_txrx_offset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct wil6210_priv *wil = dev_get_drvdata(dev); struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev); struct wmi_tof_set_tx_rx_offset_cmd cmd; struct { struct wmi_cmd_hdr wmi; struct wmi_tof_set_tx_rx_offset_event evt; } __packed reply; unsigned int tx_offset, rx_offset; int rc; if (sscanf(buf, "%u %u", &tx_offset, &rx_offset) != 2) return -EINVAL; if (!test_bit(WMI_FW_CAPABILITY_FTM, wil->fw_capabilities)) return -EOPNOTSUPP; memset(&cmd, 0, sizeof(cmd)); cmd.tx_offset = cpu_to_le32(tx_offset); cmd.rx_offset = cpu_to_le32(rx_offset); memset(&reply, 0, sizeof(reply)); rc = wmi_call(wil, WMI_TOF_SET_TX_RX_OFFSET_CMDID, vif->mid, &cmd, sizeof(cmd), WMI_TOF_SET_TX_RX_OFFSET_EVENTID, &reply, sizeof(reply), 100); if (rc < 0) return rc; if (reply.evt.status) { wil_err(wil, "set_tof_tx_rx_offset failed, error %d\n", reply.evt.status); return -EIO; } return count; } static DEVICE_ATTR_RW(ftm_txrx_offset); static struct attribute *wil6210_sysfs_entries[] = { &dev_attr_ftm_txrx_offset.attr, NULL }; static struct attribute_group wil6210_attribute_group = { .name = "wil6210", .attrs = wil6210_sysfs_entries, }; int wil6210_sysfs_init(struct wil6210_priv *wil) { struct device *dev = wil_to_dev(wil); int err; err = sysfs_create_group(&dev->kobj, &wil6210_attribute_group); if (err) { wil_err(wil, "failed to create sysfs group: %d\n", err); return err; } return 0; } void wil6210_sysfs_remove(struct wil6210_priv *wil) { struct device *dev = wil_to_dev(wil); sysfs_remove_group(&dev->kobj, &wil6210_attribute_group); }
drivers/net/wireless/ath/wil6210/wil6210.h +2 −0 Original line number Diff line number Diff line Loading @@ -1332,6 +1332,8 @@ static inline int wil6210_debugfs_init(struct wil6210_priv *wil) { return 0; } static inline void wil6210_debugfs_remove(struct wil6210_priv *wil) {} #endif int wil6210_sysfs_init(struct wil6210_priv *wil); void wil6210_sysfs_remove(struct wil6210_priv *wil); int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid, struct station_info *sinfo); Loading