wifi: ath: create common testmode_i.h file for ath drivers
authorAaradhana Sahu <quic_aarasahu@quicinc.com>
Sun, 19 Jan 2025 08:36:54 +0000 (14:06 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Wed, 22 Jan 2025 18:31:41 +0000 (10:31 -0800)
User space application requires that the testmode interface
is exactly same between ath drivers. Move testmode_i.h file
in ath directory to ensure that all ath driver uses same testmode
interface instead of duplicating testmode_i.h for each ath drivers.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1

Signed-off-by: Aaradhana Sahu <quic_aarasahu@quicinc.com>
Reviewed-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
Link: https://patch.msgid.link/20250119083657.1937557-2-quic_aarasahu@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/testmode.c
drivers/net/wireless/ath/ath11k/testmode_i.h [deleted file]
drivers/net/wireless/ath/testmode_i.h [new file with mode: 0644]

index 302d66092b973d5d2cda5cc29c4a7bfa831902db..9be1cd742339c95ffa74c09bee924f4eff15134a 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include "testmode.h"
 #include "wmi.h"
 #include "hw.h"
 #include "core.h"
-#include "testmode_i.h"
+#include "../testmode_i.h"
 
 #define ATH11K_FTM_SEGHDR_CURRENT_SEQ          GENMASK(3, 0)
 #define ATH11K_FTM_SEGHDR_TOTAL_SEGMENTS       GENMASK(7, 4)
 
-static const struct nla_policy ath11k_tm_policy[ATH11K_TM_ATTR_MAX + 1] = {
-       [ATH11K_TM_ATTR_CMD]            = { .type = NLA_U32 },
-       [ATH11K_TM_ATTR_DATA]           = { .type = NLA_BINARY,
-                                           .len = ATH11K_TM_DATA_MAX_LEN },
-       [ATH11K_TM_ATTR_WMI_CMDID]      = { .type = NLA_U32 },
-       [ATH11K_TM_ATTR_VERSION_MAJOR]  = { .type = NLA_U32 },
-       [ATH11K_TM_ATTR_VERSION_MINOR]  = { .type = NLA_U32 },
+static const struct nla_policy ath11k_tm_policy[ATH_TM_ATTR_MAX + 1] = {
+       [ATH_TM_ATTR_CMD]               = { .type = NLA_U32 },
+       [ATH_TM_ATTR_DATA]              = { .type = NLA_BINARY,
+                                           .len = ATH_TM_DATA_MAX_LEN },
+       [ATH_TM_ATTR_WMI_CMDID]         = { .type = NLA_U32 },
+       [ATH_TM_ATTR_VERSION_MAJOR]     = { .type = NLA_U32 },
+       [ATH_TM_ATTR_VERSION_MINOR]     = { .type = NLA_U32 },
 };
 
 static struct ath11k *ath11k_tm_get_ar(struct ath11k_base *ab)
@@ -73,9 +73,9 @@ static void ath11k_tm_wmi_event_unsegmented(struct ath11k_base *ab, u32 cmd_id,
                goto out;
        }
 
-       if (nla_put_u32(nl_skb, ATH11K_TM_ATTR_CMD, ATH11K_TM_CMD_WMI) ||
-           nla_put_u32(nl_skb, ATH11K_TM_ATTR_WMI_CMDID, cmd_id) ||
-           nla_put(nl_skb, ATH11K_TM_ATTR_DATA, skb->len, skb->data)) {
+       if (nla_put_u32(nl_skb, ATH_TM_ATTR_CMD, ATH_TM_CMD_WMI) ||
+           nla_put_u32(nl_skb, ATH_TM_ATTR_WMI_CMDID, cmd_id) ||
+           nla_put(nl_skb, ATH_TM_ATTR_DATA, skb->len, skb->data)) {
                ath11k_warn(ab, "failed to populate testmode unsegmented event\n");
                kfree_skb(nl_skb);
                goto out;
@@ -140,7 +140,7 @@ static int ath11k_tm_process_event(struct ath11k_base *ab, u32 cmd_id,
 
        data_pos = ab->testmode.data_pos;
 
-       if ((data_pos + datalen) > ATH11K_FTM_EVENT_MAX_BUF_LENGTH) {
+       if ((data_pos + datalen) > ATH_FTM_EVENT_MAX_BUF_LENGTH) {
                ath11k_warn(ab, "Invalid ftm event length at %d: %d\n",
                            data_pos, datalen);
                ret = -EINVAL;
@@ -172,10 +172,10 @@ static int ath11k_tm_process_event(struct ath11k_base *ab, u32 cmd_id,
                goto out;
        }
 
-       if (nla_put_u32(nl_skb, ATH11K_TM_ATTR_CMD,
-                       ATH11K_TM_CMD_WMI_FTM) ||
-           nla_put_u32(nl_skb, ATH11K_TM_ATTR_WMI_CMDID, cmd_id) ||
-           nla_put(nl_skb, ATH11K_TM_ATTR_DATA, data_pos,
+       if (nla_put_u32(nl_skb, ATH_TM_ATTR_CMD,
+                       ATH_TM_CMD_WMI_FTM) ||
+           nla_put_u32(nl_skb, ATH_TM_ATTR_WMI_CMDID, cmd_id) ||
+           nla_put(nl_skb, ATH_TM_ATTR_DATA, data_pos,
                    &ab->testmode.eventdata[0])) {
                ath11k_warn(ab, "failed to populate segmented testmode event");
                kfree_skb(nl_skb);
@@ -235,23 +235,23 @@ static int ath11k_tm_cmd_get_version(struct ath11k *ar, struct nlattr *tb[])
 
        ath11k_dbg(ar->ab, ATH11K_DBG_TESTMODE,
                   "cmd get version_major %d version_minor %d\n",
-                  ATH11K_TESTMODE_VERSION_MAJOR,
-                  ATH11K_TESTMODE_VERSION_MINOR);
+                  ATH_TESTMODE_VERSION_MAJOR,
+                  ATH_TESTMODE_VERSION_MINOR);
 
        skb = cfg80211_testmode_alloc_reply_skb(ar->hw->wiphy,
                                                nla_total_size(sizeof(u32)));
        if (!skb)
                return -ENOMEM;
 
-       ret = nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MAJOR,
-                         ATH11K_TESTMODE_VERSION_MAJOR);
+       ret = nla_put_u32(skb, ATH_TM_ATTR_VERSION_MAJOR,
+                         ATH_TESTMODE_VERSION_MAJOR);
        if (ret) {
                kfree_skb(skb);
                return ret;
        }
 
-       ret = nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MINOR,
-                         ATH11K_TESTMODE_VERSION_MINOR);
+       ret = nla_put_u32(skb, ATH_TM_ATTR_VERSION_MINOR,
+                         ATH_TESTMODE_VERSION_MINOR);
        if (ret) {
                kfree_skb(skb);
                return ret;
@@ -277,7 +277,7 @@ static int ath11k_tm_cmd_testmode_start(struct ath11k *ar, struct nlattr *tb[])
                goto err;
        }
 
-       ar->ab->testmode.eventdata = kzalloc(ATH11K_FTM_EVENT_MAX_BUF_LENGTH,
+       ar->ab->testmode.eventdata = kzalloc(ATH_FTM_EVENT_MAX_BUF_LENGTH,
                                             GFP_KERNEL);
        if (!ar->ab->testmode.eventdata) {
                ret = -ENOMEM;
@@ -310,25 +310,25 @@ static int ath11k_tm_cmd_wmi(struct ath11k *ar, struct nlattr *tb[],
 
        mutex_lock(&ar->conf_mutex);
 
-       if (!tb[ATH11K_TM_ATTR_DATA]) {
+       if (!tb[ATH_TM_ATTR_DATA]) {
                ret = -EINVAL;
                goto out;
        }
 
-       if (!tb[ATH11K_TM_ATTR_WMI_CMDID]) {
+       if (!tb[ATH_TM_ATTR_WMI_CMDID]) {
                ret = -EINVAL;
                goto out;
        }
 
-       buf = nla_data(tb[ATH11K_TM_ATTR_DATA]);
-       buf_len = nla_len(tb[ATH11K_TM_ATTR_DATA]);
+       buf = nla_data(tb[ATH_TM_ATTR_DATA]);
+       buf_len = nla_len(tb[ATH_TM_ATTR_DATA]);
        if (!buf_len) {
                ath11k_warn(ar->ab, "No data present in testmode wmi command\n");
                ret = -EINVAL;
                goto out;
        }
 
-       cmd_id = nla_get_u32(tb[ATH11K_TM_ATTR_WMI_CMDID]);
+       cmd_id = nla_get_u32(tb[ATH_TM_ATTR_WMI_CMDID]);
 
        /* Make sure that the buffer length is long enough to
         * hold TLV and pdev/vdev id.
@@ -409,13 +409,13 @@ static int ath11k_tm_cmd_wmi_ftm(struct ath11k *ar, struct nlattr *tb[])
                goto out;
        }
 
-       if (!tb[ATH11K_TM_ATTR_DATA]) {
+       if (!tb[ATH_TM_ATTR_DATA]) {
                ret = -EINVAL;
                goto out;
        }
 
-       buf = nla_data(tb[ATH11K_TM_ATTR_DATA]);
-       buf_len = nla_len(tb[ATH11K_TM_ATTR_DATA]);
+       buf = nla_data(tb[ATH_TM_ATTR_DATA]);
+       buf_len = nla_len(tb[ATH_TM_ATTR_DATA]);
        cmd_id = WMI_PDEV_UTF_CMDID;
 
        ath11k_dbg(ar->ab, ATH11K_DBG_TESTMODE,
@@ -476,25 +476,25 @@ int ath11k_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                  void *data, int len)
 {
        struct ath11k *ar = hw->priv;
-       struct nlattr *tb[ATH11K_TM_ATTR_MAX + 1];
+       struct nlattr *tb[ATH_TM_ATTR_MAX + 1];
        int ret;
 
-       ret = nla_parse(tb, ATH11K_TM_ATTR_MAX, data, len, ath11k_tm_policy,
+       ret = nla_parse(tb, ATH_TM_ATTR_MAX, data, len, ath11k_tm_policy,
                        NULL);
        if (ret)
                return ret;
 
-       if (!tb[ATH11K_TM_ATTR_CMD])
+       if (!tb[ATH_TM_ATTR_CMD])
                return -EINVAL;
 
-       switch (nla_get_u32(tb[ATH11K_TM_ATTR_CMD])) {
-       case ATH11K_TM_CMD_GET_VERSION:
+       switch (nla_get_u32(tb[ATH_TM_ATTR_CMD])) {
+       case ATH_TM_CMD_GET_VERSION:
                return ath11k_tm_cmd_get_version(ar, tb);
-       case ATH11K_TM_CMD_WMI:
+       case ATH_TM_CMD_WMI:
                return ath11k_tm_cmd_wmi(ar, tb, vif);
-       case ATH11K_TM_CMD_TESTMODE_START:
+       case ATH_TM_CMD_TESTMODE_START:
                return ath11k_tm_cmd_testmode_start(ar, tb);
-       case ATH11K_TM_CMD_WMI_FTM:
+       case ATH_TM_CMD_WMI_FTM:
                return ath11k_tm_cmd_wmi_ftm(ar, tb);
        default:
                return -EOPNOTSUPP;
diff --git a/drivers/net/wireless/ath/ath11k/testmode_i.h b/drivers/net/wireless/ath/ath11k/testmode_i.h
deleted file mode 100644 (file)
index 91b8387..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause-Clear */
-/*
- * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
- */
-
-/* "API" level of the ath11k testmode interface. Bump it after every
- * incompatible interface change.
- */
-#define ATH11K_TESTMODE_VERSION_MAJOR 1
-
-/* Bump this after every _compatible_ interface change, for example
- * addition of a new command or an attribute.
- */
-#define ATH11K_TESTMODE_VERSION_MINOR 1
-
-#define ATH11K_TM_DATA_MAX_LEN         5000
-#define ATH11K_FTM_EVENT_MAX_BUF_LENGTH 2048
-
-enum ath11k_tm_attr {
-       __ATH11K_TM_ATTR_INVALID                = 0,
-       ATH11K_TM_ATTR_CMD                      = 1,
-       ATH11K_TM_ATTR_DATA                     = 2,
-       ATH11K_TM_ATTR_WMI_CMDID                = 3,
-       ATH11K_TM_ATTR_VERSION_MAJOR            = 4,
-       ATH11K_TM_ATTR_VERSION_MINOR            = 5,
-       ATH11K_TM_ATTR_WMI_OP_VERSION           = 6,
-
-       /* keep last */
-       __ATH11K_TM_ATTR_AFTER_LAST,
-       ATH11K_TM_ATTR_MAX              = __ATH11K_TM_ATTR_AFTER_LAST - 1,
-};
-
-/* All ath11k testmode interface commands specified in
- * ATH11K_TM_ATTR_CMD
- */
-enum ath11k_tm_cmd {
-       /* Returns the supported ath11k testmode interface version in
-        * ATH11K_TM_ATTR_VERSION. Always guaranteed to work. User space
-        * uses this to verify it's using the correct version of the
-        * testmode interface
-        */
-       ATH11K_TM_CMD_GET_VERSION = 0,
-
-       /* The command used to transmit a WMI command to the firmware and
-        * the event to receive WMI events from the firmware. Without
-        * struct wmi_cmd_hdr header, only the WMI payload. Command id is
-        * provided with ATH11K_TM_ATTR_WMI_CMDID and payload in
-        * ATH11K_TM_ATTR_DATA.
-        */
-       ATH11K_TM_CMD_WMI = 1,
-
-       /* Boots the UTF firmware, the netdev interface must be down at the
-        * time.
-        */
-       ATH11K_TM_CMD_TESTMODE_START = 2,
-
-       /* The command used to transmit a FTM WMI command to the firmware
-        * and the event to receive WMI events from the firmware. The data
-        * received only contain the payload, need to add the tlv header
-        * and send the cmd to firmware with command id WMI_PDEV_UTF_CMDID.
-        * The data payload size could be large and the driver needs to
-        * send segmented data to firmware.
-        */
-       ATH11K_TM_CMD_WMI_FTM = 3,
-};
diff --git a/drivers/net/wireless/ath/testmode_i.h b/drivers/net/wireless/ath/testmode_i.h
new file mode 100644 (file)
index 0000000..980ef2f
--- /dev/null
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: BSD-3-Clause-Clear */
+/*
+ * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023-2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+
+/* "API" level of the ath testmode interface. Bump it after every
+ * incompatible interface change.
+ */
+#define ATH_TESTMODE_VERSION_MAJOR 1
+
+/* Bump this after every _compatible_ interface change, for example
+ * addition of a new command or an attribute.
+ */
+#define ATH_TESTMODE_VERSION_MINOR 1
+
+#define ATH_TM_DATA_MAX_LEN            5000
+#define ATH_FTM_EVENT_MAX_BUF_LENGTH   2048
+
+enum ath_tm_attr {
+       __ATH_TM_ATTR_INVALID           = 0,
+       ATH_TM_ATTR_CMD                 = 1,
+       ATH_TM_ATTR_DATA                = 2,
+       ATH_TM_ATTR_WMI_CMDID           = 3,
+       ATH_TM_ATTR_VERSION_MAJOR       = 4,
+       ATH_TM_ATTR_VERSION_MINOR       = 5,
+       ATH_TM_ATTR_WMI_OP_VERSION      = 6,
+
+       /* keep last */
+       __ATH_TM_ATTR_AFTER_LAST,
+       ATH_TM_ATTR_MAX                 = __ATH_TM_ATTR_AFTER_LAST - 1,
+};
+
+/* All ath testmode interface commands specified in
+ * ATH_TM_ATTR_CMD
+ */
+enum ath_tm_cmd {
+       /* Returns the supported ath testmode interface version in
+        * ATH_TM_ATTR_VERSION. Always guaranteed to work. User space
+        * uses this to verify it's using the correct version of the
+        * testmode interface
+        */
+       ATH_TM_CMD_GET_VERSION = 0,
+
+       /* The command used to transmit a WMI command to the firmware and
+        * the event to receive WMI events from the firmware. Without
+        * struct wmi_cmd_hdr header, only the WMI payload. Command id is
+        * provided with ATH_TM_ATTR_WMI_CMDID and payload in
+        * ATH_TM_ATTR_DATA.
+        */
+       ATH_TM_CMD_WMI = 1,
+
+       /* Boots the UTF firmware, the netdev interface must be down at the
+        * time.
+        */
+       ATH_TM_CMD_TESTMODE_START = 2,
+
+       /* The command used to transmit a FTM WMI command to the firmware
+        * and the event to receive WMI events from the firmware. The data
+        * received only contain the payload, need to add the tlv header
+        * and send the cmd to firmware with command id WMI_PDEV_UTF_CMDID.
+        * The data payload size could be large and the driver needs to
+        * send segmented data to firmware.
+        */
+       ATH_TM_CMD_WMI_FTM = 3,
+};