| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/03 00:30 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies the Qualcomm ath12k Wi-Fi 7 driver (ath12k/mac.c) to set up MAC address lists for single-radio wiphy instances. The ath12k driver is a vendor-specific driver for physical Qualcomm Wi-Fi 7 PCIe/AHB devices (e.g., WCN7850, QCN9274) which cannot be emulated or reached in virtualized environments like standard QEMU or GCE.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/03 00:30 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 1ee08b2067fda94d95e85ab61c6cc33ca03f4e8c\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Thu Sep 3 00:30:09 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c\nindex 9a775602775d6..bee6701f10294 100644\n--- a/drivers/net/wireless/ath/ath12k/mac.c\n+++ b/drivers/net/wireless/ath/ath12k/mac.c\n@@ -14685,6 +14685,50 @@ static void ath12k_mac_cleanup_unregister(struct ath12k *ar)\n \tkfree(ar-\u003emac.sbands[NL80211_BAND_6GHZ].channels);\n }\n \n+static void ath12k_mac_cleanup_mac_address_list(struct ath12k_hw *ah)\n+{\n+\tkfree(ah-\u003ehw-\u003ewiphy-\u003eaddresses);\n+}\n+\n+static void ath12k_mac_setup_mac_address_list(struct ath12k_hw *ah,\n+\t\t\t\t\t const u8 *mac_addr)\n+{\n+\tstruct ath12k *ar = ath12k_ah_to_ar(ah, 0);\n+\tstruct mac_address *addresses;\n+\tu16 n_addresses;\n+\tint i;\n+\n+\t/* The pool is derived from one base address, so it can describe only a\n+\t * single-radio wiphy: with more radios each radio has its own base\n+\t * address, possibly from a different ath12k_base.\n+\t */\n+\tif (ah-\u003enum_radio != 1)\n+\t\treturn;\n+\n+\t/* Only the upper nibble of the first octet is varied, so at most 16\n+\t * addresses can be derived from one base.\n+\t */\n+\tn_addresses = min_t(u16, TARGET_NUM_VDEVS(ar-\u003eab), 16);\n+\tif (n_addresses \u003c= 1)\n+\t\treturn;\n+\n+\taddresses = kzalloc_objs(*addresses, n_addresses);\n+\tif (!addresses)\n+\t\treturn;\n+\n+\tether_addr_copy(addresses[0].addr, mac_addr);\n+\tfor (i = 1; i \u003c n_addresses; i++) {\n+\t\tether_addr_copy(addresses[i].addr, mac_addr);\n+\t\t/* set Local Administered Address bit */\n+\t\taddresses[i].addr[0] |= 0x2;\n+\n+\t\taddresses[i].addr[0] += i \u003c\u003c 4;\n+\t}\n+\n+\tah-\u003ehw-\u003ewiphy-\u003eaddresses = addresses;\n+\tah-\u003ehw-\u003ewiphy-\u003en_addresses = n_addresses;\n+}\n+\n static void ath12k_mac_hw_unregister(struct ath12k_hw *ah)\n {\n \tstruct ieee80211_hw *hw = ah-\u003ehw;\n@@ -14704,6 +14748,7 @@ static void ath12k_mac_hw_unregister(struct ath12k_hw *ah)\n \t\tath12k_mac_cleanup_unregister(ar);\n \n \tath12k_mac_cleanup_iface_combinations(ah);\n+\tath12k_mac_cleanup_mac_address_list(ah);\n \n \tSET_IEEE80211_DEV(hw, NULL);\n }\n@@ -14820,6 +14865,7 @@ static int ath12k_mac_hw_register(struct ath12k_hw *ah)\n \twiphy-\u003eavailable_antennas_tx = antennas_tx;\n \n \tSET_IEEE80211_PERM_ADDR(hw, mac_addr);\n+\tath12k_mac_setup_mac_address_list(ah, mac_addr);\n \tSET_IEEE80211_DEV(hw, ab-\u003edev);\n \n \tret = ath12k_mac_setup_iface_combinations(ah);\n@@ -15041,6 +15087,8 @@ static int ath12k_mac_hw_register(struct ath12k_hw *ah)\n \t\tath12k_mac_cleanup_unregister(ar);\n \t}\n \n+\tath12k_mac_cleanup_mac_address_list(ah);\n+\n \tSET_IEEE80211_DEV(hw, NULL);\n \n \treturn ret;\n"
} |
| 2/1 | 2026/09/03 00:30 | agent | patch-evaluator |
0mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Qualcomm ath12k Wi-Fi 7 driver (ath12k/mac.c) to set up MAC address lists for single-radio wiphy instances. The ath12k driver is a vendor-specific driver for physical Qualcomm Wi-Fi 7 PCIe/AHB devices (e.g., WCN7850, QCN9274) which cannot be emulated or reached in virtualized environments like standard QEMU or GCE.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit 1ee08b2067fda94d95e85ab61c6cc33ca03f4e8c
Author: syz-cluster <triage@syzkaller.com>
Date: Thu Sep 3 00:30:09 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index 9a775602775d6..bee6701f10294 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -14685,6 +14685,50 @@ static void ath12k_mac_cleanup_unregister(struct ath12k *ar)
kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels);
}
+static void ath12k_mac_cleanup_mac_address_list(struct ath12k_hw *ah)
+{
+ kfree(ah->hw->wiphy->addresses);
+}
+
+static void ath12k_mac_setup_mac_address_list(struct ath12k_hw *ah,
+ const u8 *mac_addr)
+{
+ struct ath12k *ar = ath12k_ah_to_ar(ah, 0);
+ struct mac_address *addresses;
+ u16 n_addresses;
+ int i;
+
+ /* The pool is derived from one base address, so it can describe only a
+ * single-radio wiphy: with more radios each radio has its own base
+ * address, possibly from a different ath12k_base.
+ */
+ if (ah->num_radio != 1)
+ return;
+
+ /* Only the upper nibble of the first octet is varied, so at most 16
+ * addresses can be derived from one base.
+ */
+ n_addresses = min_t(u16, TARGET_NUM_VDEVS(ar->ab), 16);
+ if (n_addresses <= 1)
+ return;
+
+ addresses = kzalloc_objs(*addresses, n_addresses);
+ if (!addresses)
+ return;
+
+ ether_addr_copy(addresses[0].addr, mac_addr);
+ for (i = 1; i < n_addresses; i++) {
+ ether_addr_copy(addresses[i].addr, mac_addr);
+ /* set Local Administered Address bit */
+ addresses[i].addr[0] |= 0x2;
+
+ addresses[i].addr[0] += i << 4;
+ }
+
+ ah->hw->wiphy->addresses = addresses;
+ ah->hw->wiphy->n_addresses = n_addresses;
+}
+
static void ath12k_mac_hw_unregister(struct ath12k_hw *ah)
{
struct ieee80211_hw *hw = ah->hw;
@@ -14704,6 +14748,7 @@ static void ath12k_mac_hw_unregister(struct ath12k_hw *ah)
ath12k_mac_cleanup_unregister(ar);
ath12k_mac_cleanup_iface_combinations(ah);
+ ath12k_mac_cleanup_mac_address_list(ah);
SET_IEEE80211_DEV(hw, NULL);
}
@@ -14820,6 +14865,7 @@ static int ath12k_mac_hw_register(struct ath12k_hw *ah)
wiphy->available_antennas_tx = antennas_tx;
SET_IEEE80211_PERM_ADDR(hw, mac_addr);
+ ath12k_mac_setup_mac_address_list(ah, mac_addr);
SET_IEEE80211_DEV(hw, ab->dev);
ret = ath12k_mac_setup_iface_combinations(ah);
@@ -15041,6 +15087,8 @@ static int ath12k_mac_hw_register(struct ath12k_hw *ah)
ath12k_mac_cleanup_unregister(ar);
}
+ ath12k_mac_cleanup_mac_address_list(ah);
+
SET_IEEE80211_DEV(hw, NULL);
return ret;
|
| 3/2 | 2026/09/03 00:30 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 2979 output: 37 thoughts: 127 Thoughts: **Assessing the Fuzzing Potential of This Patch** Okay, let's take a look at this patch and decide if it's fuzz-worthy. It's touching `drivers/net/wireless/ath/ath12k/mac.c`. Right, that's the Qualcomm Wi-Fi 7 (802.11be) driver. That immediately grabs my attention – Wi-Fi drivers are always interesting from a security perspective. The next question is: Can I even reach this thing without specialized hardware? I need to figure out if `ath12k` is accessible in virtualized environments – can I test this in QEMU or GCE? That's going to be crucial for my workflow. I need to understand the hardware it supports. Is it PCIe? USB? Understanding the interface is going to be vital to setting up a suitable testing environment. Time to dig into the `Kconfig` and related files with `grepper` and see what I can find out about its dependencies and how it's activated. |
| 4/2 | 2026/09/03 00:30 | tool | grepper |
0mArgs:{
"Expression": "ATH12K",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 13436 lines.\nUse more precise expression if possible.\n\ndrivers/net/wireless/ath/ath12k/Kconfig-1-# SPDX-License-Identifier: BSD-3-Clause-Clear\ndrivers/net/wireless/ath/ath12k/Kconfig:2:config ATH12K\ndrivers/net/wireless/ath/ath12k/Kconfig-3-\ttristate \"Qualcomm Wi-Fi 7 support (ath12k)\"\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-16-\ndrivers/net/wireless/ath/ath12k/Kconfig:17:config ATH12K_AHB\ndrivers/net/wireless/ath/ath12k/Kconfig-18-\tbool \"Qualcomm ath12k AHB support\"\ndrivers/net/wireless/ath/ath12k/Kconfig:19:\tdepends on ATH12K \u0026\u0026 REMOTEPROC\ndrivers/net/wireless/ath/ath12k/Kconfig-20-\tselect QCOM_MDT_LOADER\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-24-\ndrivers/net/wireless/ath/ath12k/Kconfig:25:config ATH12K_DEBUG\ndrivers/net/wireless/ath/ath12k/Kconfig-26-\tbool \"ath12k debugging\"\ndrivers/net/wireless/ath/ath12k/Kconfig:27:\tdepends on ATH12K\ndrivers/net/wireless/ath/ath12k/Kconfig-28-\thelp\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-34-\ndrivers/net/wireless/ath/ath12k/Kconfig:35:config ATH12K_DEBUGFS\ndrivers/net/wireless/ath/ath12k/Kconfig-36-\tbool \"Qualcomm ath12k debugfs support\"\ndrivers/net/wireless/ath/ath12k/Kconfig:37:\tdepends on ATH12K \u0026\u0026 MAC80211_DEBUGFS\ndrivers/net/wireless/ath/ath12k/Kconfig-38-\thelp\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-43-\ndrivers/net/wireless/ath/ath12k/Kconfig:44:config ATH12K_TRACING\ndrivers/net/wireless/ath/ath12k/Kconfig-45-\tbool \"ath12k tracing support\"\ndrivers/net/wireless/ath/ath12k/Kconfig:46:\tdepends on ATH12K \u0026\u0026 EVENT_TRACING\ndrivers/net/wireless/ath/ath12k/Kconfig-47-\thelp\n--\ndrivers/net/wireless/ath/ath12k/Kconfig-52-\ndrivers/net/wireless/ath/ath12k/Kconfig:53:config ATH12K_COREDUMP\ndrivers/net/wireless/ath/ath12k/Kconfig-54-\tbool \"ath12k coredump\"\ndrivers/net/wireless/ath/ath12k/Kconfig:55:\tdepends on ATH12K\ndrivers/net/wireless/ath/ath12k/Kconfig-56-\tselect WANT_DEV_COREDUMP\n--\ndrivers/net/wireless/ath/ath12k/Makefile-1-# SPDX-License-Identifier: BSD-3-Clause-Clear\ndrivers/net/wireless/ath/ath12k/Makefile:2:obj-$(CONFIG_ATH12K) += ath12k.o\ndrivers/net/wireless/ath/ath12k/Makefile-3-ath12k-y += core.o \\\n--\ndrivers/net/wireless/ath/ath12k/Makefile-24-\ndrivers/net/wireless/ath/ath12k/Makefile:25:ath12k-$(CONFIG_ATH12K_AHB) += ahb.o\ndrivers/net/wireless/ath/ath12k/Makefile-26-\ndrivers/net/wireless/ath/ath12k/Makefile:27:obj-$(CONFIG_ATH12K) += wifi7/\ndrivers/net/wireless/ath/ath12k/Makefile-28-\ndrivers/net/wireless/ath/ath12k/Makefile:29:ath12k-$(CONFIG_ATH12K_DEBUGFS) += debugfs.o debugfs_htt_stats.o debugfs_sta.o\ndrivers/net/wireless/ath/ath12k/Makefile-30-ath12k-$(CONFIG_ACPI) += acpi.o\ndrivers/net/wireless/ath/ath12k/Makefile:31:ath12k-$(CONFIG_ATH12K_TRACING) += trace.o\ndrivers/net/wireless/ath/ath12k/Makefile-32-ath12k-$(CONFIG_PM) += wow.o\ndrivers/net/wireless/ath/ath12k/Makefile:33:ath12k-$(CONFIG_ATH12K_COREDUMP) += coredump.o\ndrivers/net/wireless/ath/ath12k/Makefile-34-ath12k-$(CONFIG_NL80211_TESTMODE) += testmode.o\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=11=static int ath12k_acpi_dsm_get_data(struct ath12k_base *ab, int func)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-18-\tif (!root_handle) {\ndrivers/net/wireless/ath/ath12k/acpi.c:19:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"invalid acpi handler\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-20-\t\treturn -EOPNOTSUPP;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-26-\tif (!obj) {\ndrivers/net/wireless/ath/ath12k/acpi.c:27:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"acpi_evaluate_dsm() failed\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-28-\t\treturn -ENOENT;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-32-\t\tswitch (func) {\ndrivers/net/wireless/ath/ath12k/acpi.c:33:\t\tcase ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS:\ndrivers/net/wireless/ath/ath12k/acpi.c-34-\t\t\tab-\u003eacpi.func_bit = obj-\u003einteger.value;\ndrivers/net/wireless/ath/ath12k/acpi.c-35-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:36:\t\tcase ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG:\ndrivers/net/wireless/ath/ath12k/acpi.c-37-\t\t\tab-\u003eacpi.bit_flag = obj-\u003einteger.value;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-41-\t\tswitch (func) {\ndrivers/net/wireless/ath/ath12k/acpi.c:42:\t\tcase ATH12K_ACPI_DSM_FUNC_BDF_EXT:\ndrivers/net/wireless/ath/ath12k/acpi.c:43:\t\t\tif (obj-\u003estring.length \u003c= ATH12K_ACPI_BDF_ANCHOR_STRING_LEN ||\ndrivers/net/wireless/ath/ath12k/acpi.c:44:\t\t\t obj-\u003estring.length \u003e ATH12K_ACPI_BDF_MAX_LEN ||\ndrivers/net/wireless/ath/ath12k/acpi.c:45:\t\t\t memcmp(obj-\u003estring.pointer, ATH12K_ACPI_BDF_ANCHOR_STRING,\ndrivers/net/wireless/ath/ath12k/acpi.c:46:\t\t\t\t ATH12K_ACPI_BDF_ANCHOR_STRING_LEN)) {\ndrivers/net/wireless/ath/ath12k/acpi.c-47-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM BDF size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-59-\t\tswitch (func) {\ndrivers/net/wireless/ath/ath12k/acpi.c:60:\t\tcase ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS:\ndrivers/net/wireless/ath/ath12k/acpi.c:61:\t\t\tif (obj-\u003ebuffer.length \u003c ATH12K_ACPI_DSM_FUNC_MIN_BITMAP_SIZE ||\ndrivers/net/wireless/ath/ath12k/acpi.c:62:\t\t\t obj-\u003ebuffer.length \u003e ATH12K_ACPI_DSM_FUNC_MAX_BITMAP_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-63-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM func size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-73-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:74:\t\tcase ATH12K_ACPI_DSM_FUNC_TAS_CFG:\ndrivers/net/wireless/ath/ath12k/acpi.c:75:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_TAS_CFG_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-76-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM TAS config size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-85-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:86:\t\tcase ATH12K_ACPI_DSM_FUNC_TAS_DATA:\ndrivers/net/wireless/ath/ath12k/acpi.c:87:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_TAS_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-88-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM TAS data size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-97-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:98:\t\tcase ATH12K_ACPI_DSM_FUNC_BIOS_SAR:\ndrivers/net/wireless/ath/ath12k/acpi.c:99:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_BIOS_SAR_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-100-\t\t\t\tath12k_warn(ab, \"invalid ACPI BIOS SAR data size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-109-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:110:\t\tcase ATH12K_ACPI_DSM_FUNC_GEO_OFFSET:\ndrivers/net/wireless/ath/ath12k/acpi.c:111:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_GEO_OFFSET_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-112-\t\t\t\tath12k_warn(ab, \"invalid ACPI GEO OFFSET data size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-121-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:122:\t\tcase ATH12K_ACPI_DSM_FUNC_INDEX_CCA:\ndrivers/net/wireless/ath/ath12k/acpi.c:123:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_CCA_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-124-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM CCA data size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-133-\t\t\tbreak;\ndrivers/net/wireless/ath/ath12k/acpi.c:134:\t\tcase ATH12K_ACPI_DSM_FUNC_INDEX_BAND_EDGE:\ndrivers/net/wireless/ath/ath12k/acpi.c:135:\t\t\tif (obj-\u003ebuffer.length != ATH12K_ACPI_DSM_BAND_EDGE_DATA_SIZE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-136-\t\t\t\tath12k_warn(ab, \"invalid ACPI DSM band edge data size: %d\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=161=static int ath12k_acpi_set_power_limit(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-165-\ndrivers/net/wireless/ath/ath12k/acpi.c:166:\tif (tas_sar_power_table[0] != ATH12K_ACPI_TAS_DATA_VERSION ||\ndrivers/net/wireless/ath/ath12k/acpi.c:167:\t tas_sar_power_table[1] != ATH12K_ACPI_TAS_DATA_ENABLE) {\ndrivers/net/wireless/ath/ath12k/acpi.c-168-\t\tath12k_warn(ab, \"latest ACPI TAS data is invalid\\n\");\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-173-\t\t\t\t tas_sar_power_table,\ndrivers/net/wireless/ath/ath12k/acpi.c:174:\t\t\t\t ATH12K_ACPI_DSM_TAS_DATA_SIZE);\ndrivers/net/wireless/ath/ath12k/acpi.c-175-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=183=static int ath12k_acpi_set_bios_sar_power(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-186-\ndrivers/net/wireless/ath/ath12k/acpi.c:187:\tif (ab-\u003eacpi.bios_sar_data[0] != ATH12K_ACPI_POWER_LIMIT_VERSION ||\ndrivers/net/wireless/ath/ath12k/acpi.c:188:\t ab-\u003eacpi.bios_sar_data[1] != ATH12K_ACPI_POWER_LIMIT_ENABLE_FLAG) {\ndrivers/net/wireless/ath/ath12k/acpi.c-189-\t\tath12k_warn(ab, \"invalid latest ACPI BIOS SAR data\\n\");\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=202=static void ath12k_acpi_dsm_notify(acpi_handle handle, u32 event, void *data)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-206-\ndrivers/net/wireless/ath/ath12k/acpi.c:207:\tif (event == ATH12K_ACPI_NOTIFY_EVENT) {\ndrivers/net/wireless/ath/ath12k/acpi.c-208-\t\tath12k_warn(ab, \"unknown acpi notify %u\\n\", event);\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-212-\tif (!ab-\u003eacpi.acpi_tas_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:213:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"acpi_tas_enable is false\\n\");\ndrivers/net/wireless/ath/ath12k/acpi.c-214-\t\treturn;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-216-\ndrivers/net/wireless/ath/ath12k/acpi.c:217:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_DATA);\ndrivers/net/wireless/ath/ath12k/acpi.c-218-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-231-\ndrivers/net/wireless/ath/ath12k/acpi.c:232:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BIOS_SAR);\ndrivers/net/wireless/ath/ath12k/acpi.c-233-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=264=static int ath12k_acpi_set_tas_params(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-269-\t\t\t\t ab-\u003eacpi.tas_cfg,\ndrivers/net/wireless/ath/ath12k/acpi.c:270:\t\t\t\t ATH12K_ACPI_DSM_TAS_CFG_SIZE);\ndrivers/net/wireless/ath/ath12k/acpi.c-271-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-278-\t\t\t\t ab-\u003eacpi.tas_sar_power_table,\ndrivers/net/wireless/ath/ath12k/acpi.c:279:\t\t\t\t ATH12K_ACPI_DSM_TAS_DATA_SIZE);\ndrivers/net/wireless/ath/ath12k/acpi.c-280-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=299=void ath12k_acpi_set_dsm_func(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-324-\tif (ab-\u003eacpi.acpi_cca_enable) {\ndrivers/net/wireless/ath/ath12k/acpi.c:325:\t\tbuf = ab-\u003eacpi.cca_data + ATH12K_ACPI_CCA_THR_OFFSET_DATA_OFFSET;\ndrivers/net/wireless/ath/ath12k/acpi.c-326-\t\tret = ath12k_wmi_set_bios_cmd(ab,\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-328-\t\t\t\t\t buf,\ndrivers/net/wireless/ath/ath12k/acpi.c:329:\t\t\t\t\t ATH12K_ACPI_CCA_THR_OFFSET_LEN);\ndrivers/net/wireless/ath/ath12k/acpi.c-330-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=351=int ath12k_acpi_start(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-368-\ndrivers/net/wireless/ath/ath12k/acpi.c:369:\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS);\ndrivers/net/wireless/ath/ath12k/acpi.c-370-\tif (ret) {\ndrivers/net/wireless/ath/ath12k/acpi.c:371:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT, \"failed to get ACPI DSM data: %d\\n\", ret);\ndrivers/net/wireless/ath/ath12k/acpi.c-372-\t\treturn ret;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-374-\ndrivers/net/wireless/ath/ath12k/acpi.c:375:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_DISABLE_FLAG)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:376:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG);\ndrivers/net/wireless/ath/ath12k/acpi.c-377-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-381-\ndrivers/net/wireless/ath/ath12k/acpi.c:382:\t\tif (ATH12K_ACPI_CHEK_BIT_VALID(ab-\u003eacpi,\ndrivers/net/wireless/ath/ath12k/acpi.c:383:\t\t\t\t\t ATH12K_ACPI_DSM_DISABLE_11BE_BIT))\ndrivers/net/wireless/ath/ath12k/acpi.c-384-\t\t\tab-\u003eacpi.acpi_disable_11be = true;\ndrivers/net/wireless/ath/ath12k/acpi.c-385-\ndrivers/net/wireless/ath/ath12k/acpi.c:386:\t\tif (!ATH12K_ACPI_CHEK_BIT_VALID(ab-\u003eacpi,\ndrivers/net/wireless/ath/ath12k/acpi.c:387:\t\t\t\t\t\tATH12K_ACPI_DSM_DISABLE_RFKILL_BIT))\ndrivers/net/wireless/ath/ath12k/acpi.c-388-\t\t\tab-\u003eacpi.acpi_disable_rfkill = true;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-390-\ndrivers/net/wireless/ath/ath12k/acpi.c:391:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_BDF_EXT)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:392:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BDF_EXT);\ndrivers/net/wireless/ath/ath12k/acpi.c-393-\t\tif (ret || ab-\u003eacpi.bdf_string[0] == '\\0') {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-400-\ndrivers/net/wireless/ath/ath12k/acpi.c:401:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_TAS_CFG)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:402:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_CFG);\ndrivers/net/wireless/ath/ath12k/acpi.c-403-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-408-\ndrivers/net/wireless/ath/ath12k/acpi.c:409:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_TAS_DATA)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:410:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_DATA);\ndrivers/net/wireless/ath/ath12k/acpi.c-411-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-415-\ndrivers/net/wireless/ath/ath12k/acpi.c:416:\t\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_TAS_CFG) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:417:\t\t ab-\u003eacpi.tas_sar_power_table[0] == ATH12K_ACPI_TAS_DATA_VERSION \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:418:\t\t ab-\u003eacpi.tas_sar_power_table[1] == ATH12K_ACPI_TAS_DATA_ENABLE)\ndrivers/net/wireless/ath/ath12k/acpi.c-419-\t\t\tab-\u003eacpi.acpi_tas_enable = true;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-421-\ndrivers/net/wireless/ath/ath12k/acpi.c:422:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_BIOS_SAR)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:423:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_BIOS_SAR);\ndrivers/net/wireless/ath/ath12k/acpi.c-424-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-429-\ndrivers/net/wireless/ath/ath12k/acpi.c:430:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_GEO_OFFSET)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:431:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_GEO_OFFSET);\ndrivers/net/wireless/ath/ath12k/acpi.c-432-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-436-\ndrivers/net/wireless/ath/ath12k/acpi.c:437:\t\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_BIOS_SAR) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:438:\t\t ab-\u003eacpi.bios_sar_data[0] == ATH12K_ACPI_POWER_LIMIT_VERSION \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:439:\t\t ab-\u003eacpi.bios_sar_data[1] == ATH12K_ACPI_POWER_LIMIT_ENABLE_FLAG \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c-440-\t\t !ab-\u003eacpi.acpi_tas_enable)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-443-\ndrivers/net/wireless/ath/ath12k/acpi.c:444:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi, ATH12K_ACPI_FUNC_BIT_CCA)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:445:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_INDEX_CCA);\ndrivers/net/wireless/ath/ath12k/acpi.c-446-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-451-\ndrivers/net/wireless/ath/ath12k/acpi.c:452:\t\tif (ab-\u003eacpi.cca_data[0] == ATH12K_ACPI_CCA_THR_VERSION \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:453:\t\t ab-\u003eacpi.cca_data[ATH12K_ACPI_CCA_THR_OFFSET_DATA_OFFSET] ==\ndrivers/net/wireless/ath/ath12k/acpi.c:454:\t\t ATH12K_ACPI_CCA_THR_ENABLE_FLAG)\ndrivers/net/wireless/ath/ath12k/acpi.c-455-\t\t\tab-\u003eacpi.acpi_cca_enable = true;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-457-\ndrivers/net/wireless/ath/ath12k/acpi.c:458:\tif (ATH12K_ACPI_FUNC_BIT_VALID(ab-\u003eacpi,\ndrivers/net/wireless/ath/ath12k/acpi.c:459:\t\t\t\t ATH12K_ACPI_FUNC_BIT_BAND_EDGE_CHAN_POWER)) {\ndrivers/net/wireless/ath/ath12k/acpi.c:460:\t\tret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_INDEX_BAND_EDGE);\ndrivers/net/wireless/ath/ath12k/acpi.c-461-\t\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-466-\ndrivers/net/wireless/ath/ath12k/acpi.c:467:\t\tif (ab-\u003eacpi.band_edge_power[0] == ATH12K_ACPI_BAND_EDGE_VERSION \u0026\u0026\ndrivers/net/wireless/ath/ath12k/acpi.c:468:\t\t ab-\u003eacpi.band_edge_power[1] == ATH12K_ACPI_BAND_EDGE_ENABLE_FLAG)\ndrivers/net/wireless/ath/ath12k/acpi.c-469-\t\t\tab-\u003eacpi.acpi_band_edge_enable = true;\n--\ndrivers/net/wireless/ath/ath12k/acpi.c=485=int ath12k_acpi_check_bdf_variant_name(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.c-492-\tif (strscpy(ab-\u003eqmi.target.bdf_ext, ab-\u003eacpi.bdf_string + 4, max_len) \u003c 0)\ndrivers/net/wireless/ath/ath12k/acpi.c:493:\t\tath12k_dbg(ab, ATH12K_DBG_BOOT,\ndrivers/net/wireless/ath/ath12k/acpi.c-494-\t\t\t \"acpi bdf variant longer than the buffer (variant: %s)\\n\",\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-5- */\ndrivers/net/wireless/ath/ath12k/acpi.h:6:#ifndef ATH12K_ACPI_H\ndrivers/net/wireless/ath/ath12k/acpi.h:7:#define ATH12K_ACPI_H\ndrivers/net/wireless/ath/ath12k/acpi.h-8-\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-10-\ndrivers/net/wireless/ath/ath12k/acpi.h:11:#define ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS\t0\ndrivers/net/wireless/ath/ath12k/acpi.h:12:#define ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG\t2\ndrivers/net/wireless/ath/ath12k/acpi.h:13:#define ATH12K_ACPI_DSM_FUNC_BDF_EXT\t\t3\ndrivers/net/wireless/ath/ath12k/acpi.h:14:#define ATH12K_ACPI_DSM_FUNC_BIOS_SAR\t\t4\ndrivers/net/wireless/ath/ath12k/acpi.h:15:#define ATH12K_ACPI_DSM_FUNC_GEO_OFFSET\t\t5\ndrivers/net/wireless/ath/ath12k/acpi.h:16:#define ATH12K_ACPI_DSM_FUNC_INDEX_CCA\t\t6\ndrivers/net/wireless/ath/ath12k/acpi.h:17:#define ATH12K_ACPI_DSM_FUNC_TAS_CFG\t\t8\ndrivers/net/wireless/ath/ath12k/acpi.h:18:#define ATH12K_ACPI_DSM_FUNC_TAS_DATA\t\t9\ndrivers/net/wireless/ath/ath12k/acpi.h:19:#define ATH12K_ACPI_DSM_FUNC_INDEX_BAND_EDGE\t\t10\ndrivers/net/wireless/ath/ath12k/acpi.h-20-\ndrivers/net/wireless/ath/ath12k/acpi.h:21:#define ATH12K_ACPI_FUNC_BIT_DISABLE_FLAG\t\tBIT(1)\ndrivers/net/wireless/ath/ath12k/acpi.h:22:#define ATH12K_ACPI_FUNC_BIT_BDF_EXT\t\t\tBIT(2)\ndrivers/net/wireless/ath/ath12k/acpi.h:23:#define ATH12K_ACPI_FUNC_BIT_BIOS_SAR\t\t\tBIT(3)\ndrivers/net/wireless/ath/ath12k/acpi.h:24:#define ATH12K_ACPI_FUNC_BIT_GEO_OFFSET\t\t\tBIT(4)\ndrivers/net/wireless/ath/ath12k/acpi.h:25:#define ATH12K_ACPI_FUNC_BIT_CCA\t\t\tBIT(5)\ndrivers/net/wireless/ath/ath12k/acpi.h:26:#define ATH12K_ACPI_FUNC_BIT_TAS_CFG\t\t\tBIT(7)\ndrivers/net/wireless/ath/ath12k/acpi.h:27:#define ATH12K_ACPI_FUNC_BIT_TAS_DATA\t\t\tBIT(8)\ndrivers/net/wireless/ath/ath12k/acpi.h:28:#define ATH12K_ACPI_FUNC_BIT_BAND_EDGE_CHAN_POWER\tBIT(9)\ndrivers/net/wireless/ath/ath12k/acpi.h-29-\ndrivers/net/wireless/ath/ath12k/acpi.h:30:#define ATH12K_ACPI_NOTIFY_EVENT\t\t\t0x86\ndrivers/net/wireless/ath/ath12k/acpi.h:31:#define ATH12K_ACPI_FUNC_BIT_VALID(_acdata, _func)\t(((_acdata).func_bit) \u0026 (_func))\ndrivers/net/wireless/ath/ath12k/acpi.h:32:#define ATH12K_ACPI_CHEK_BIT_VALID(_acdata, _func)\t(((_acdata).bit_flag) \u0026 (_func))\ndrivers/net/wireless/ath/ath12k/acpi.h-33-\ndrivers/net/wireless/ath/ath12k/acpi.h:34:#define ATH12K_ACPI_TAS_DATA_VERSION\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:35:#define ATH12K_ACPI_TAS_DATA_ENABLE\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:36:#define ATH12K_ACPI_POWER_LIMIT_VERSION\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:37:#define ATH12K_ACPI_POWER_LIMIT_ENABLE_FLAG\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:38:#define ATH12K_ACPI_CCA_THR_VERSION\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:39:#define ATH12K_ACPI_CCA_THR_ENABLE_FLAG\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:40:#define ATH12K_ACPI_BAND_EDGE_VERSION\t\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h:41:#define ATH12K_ACPI_BAND_EDGE_ENABLE_FLAG\t0x1\ndrivers/net/wireless/ath/ath12k/acpi.h-42-\ndrivers/net/wireless/ath/ath12k/acpi.h:43:#define ATH12K_ACPI_GEO_OFFSET_DATA_OFFSET\t1\ndrivers/net/wireless/ath/ath12k/acpi.h:44:#define ATH12K_ACPI_DBS_BACKOFF_DATA_OFFSET\t2\ndrivers/net/wireless/ath/ath12k/acpi.h:45:#define ATH12K_ACPI_CCA_THR_OFFSET_DATA_OFFSET\t5\ndrivers/net/wireless/ath/ath12k/acpi.h:46:#define ATH12K_ACPI_BIOS_SAR_DBS_BACKOFF_LEN\t10\ndrivers/net/wireless/ath/ath12k/acpi.h:47:#define ATH12K_ACPI_POWER_LIMIT_DATA_OFFSET\t12\ndrivers/net/wireless/ath/ath12k/acpi.h:48:#define ATH12K_ACPI_BIOS_SAR_GEO_OFFSET_LEN\t18\ndrivers/net/wireless/ath/ath12k/acpi.h:49:#define ATH12K_ACPI_BIOS_SAR_TABLE_LEN\t\t22\ndrivers/net/wireless/ath/ath12k/acpi.h:50:#define ATH12K_ACPI_CCA_THR_OFFSET_LEN\t\t36\ndrivers/net/wireless/ath/ath12k/acpi.h-51-\ndrivers/net/wireless/ath/ath12k/acpi.h:52:#define ATH12K_ACPI_DSM_TAS_DATA_SIZE\t\t\t69\ndrivers/net/wireless/ath/ath12k/acpi.h:53:#define ATH12K_ACPI_DSM_BAND_EDGE_DATA_SIZE\t\t100\ndrivers/net/wireless/ath/ath12k/acpi.h:54:#define ATH12K_ACPI_DSM_TAS_CFG_SIZE\t\t\t108\ndrivers/net/wireless/ath/ath12k/acpi.h-55-\ndrivers/net/wireless/ath/ath12k/acpi.h:56:#define ATH12K_ACPI_DSM_FUNC_MIN_BITMAP_SIZE\t1\ndrivers/net/wireless/ath/ath12k/acpi.h:57:#define ATH12K_ACPI_DSM_FUNC_MAX_BITMAP_SIZE\t4\ndrivers/net/wireless/ath/ath12k/acpi.h-58-\ndrivers/net/wireless/ath/ath12k/acpi.h:59:#define ATH12K_ACPI_DSM_DISABLE_11BE_BIT\tBIT(0)\ndrivers/net/wireless/ath/ath12k/acpi.h:60:#define ATH12K_ACPI_DSM_DISABLE_RFKILL_BIT\tBIT(2)\ndrivers/net/wireless/ath/ath12k/acpi.h-61-\ndrivers/net/wireless/ath/ath12k/acpi.h:62:#define ATH12K_ACPI_BDF_ANCHOR_STRING_LEN\t3\ndrivers/net/wireless/ath/ath12k/acpi.h:63:#define ATH12K_ACPI_BDF_ANCHOR_STRING\t\t\"BDF\"\ndrivers/net/wireless/ath/ath12k/acpi.h:64:#define ATH12K_ACPI_BDF_MAX_LEN\t\t\t100\ndrivers/net/wireless/ath/ath12k/acpi.h-65-\ndrivers/net/wireless/ath/ath12k/acpi.h:66:#define ATH12K_ACPI_DSM_GEO_OFFSET_DATA_SIZE (ATH12K_ACPI_GEO_OFFSET_DATA_OFFSET + \\\ndrivers/net/wireless/ath/ath12k/acpi.h:67:\t\t\t\t\t ATH12K_ACPI_BIOS_SAR_GEO_OFFSET_LEN)\ndrivers/net/wireless/ath/ath12k/acpi.h:68:#define ATH12K_ACPI_DSM_BIOS_SAR_DATA_SIZE (ATH12K_ACPI_POWER_LIMIT_DATA_OFFSET + \\\ndrivers/net/wireless/ath/ath12k/acpi.h:69:\t\t\t\t\t ATH12K_ACPI_BIOS_SAR_TABLE_LEN)\ndrivers/net/wireless/ath/ath12k/acpi.h:70:#define ATH12K_ACPI_DSM_CCA_DATA_SIZE (ATH12K_ACPI_CCA_THR_OFFSET_DATA_OFFSET + \\\ndrivers/net/wireless/ath/ath12k/acpi.h:71:\t\t\t\t ATH12K_ACPI_CCA_THR_OFFSET_LEN)\ndrivers/net/wireless/ath/ath12k/acpi.h-72-\n--\ndrivers/net/wireless/ath/ath12k/acpi.h=107=static inline int ath12k_acpi_check_bdf_variant_name(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/acpi.h-113-\ndrivers/net/wireless/ath/ath12k/acpi.h:114:#endif /* ATH12K_ACPI_H */\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-19-\ndrivers/net/wireless/ath/ath12k/ahb.c:20:#define ATH12K_IRQ_CE0_OFFSET 4\ndrivers/net/wireless/ath/ath12k/ahb.c:21:#define ATH12K_UPD_IRQ_WRD_LEN 18\ndrivers/net/wireless/ath/ath12k/ahb.c-22-\ndrivers/net/wireless/ath/ath12k/ahb.c:23:static struct ath12k_ahb_driver *ath12k_ahb_family_drivers[ATH12K_DEVICE_FAMILY_MAX];\ndrivers/net/wireless/ath/ath12k/ahb.c-24-static const char ath12k_userpd_irq[][9] = {\"spawn\",\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=42=static DEFINE_MUTEX(ath12k_rproc_info_lock);\ndrivers/net/wireless/ath/ath12k/ahb.c-43-\ndrivers/net/wireless/ath/ath12k/ahb.c:44:static const char *irq_name[ATH12K_IRQ_NUM_MAX] = {\ndrivers/net/wireless/ath/ath12k/ahb.c-45-\t\"misc-pulse1\",\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=178=static void __ath12k_ahb_ext_irq_disable(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-181-\ndrivers/net/wireless/ath/ath12k/ahb.c:182:\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-183-\t\tstruct ath12k_ext_irq_grp *irq_grp = \u0026ab-\u003eext_irq_grp[i];\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=260=static void ath12k_ahb_sync_ce_irqs(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-268-\ndrivers/net/wireless/ath/ath12k/ahb.c:269:\t\tirq_idx = ATH12K_IRQ_CE0_OFFSET + i;\ndrivers/net/wireless/ath/ath12k/ahb.c-270-\t\tsynchronize_irq(ab-\u003eirq_num[irq_idx]);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=274=static void ath12k_ahb_sync_ext_irqs(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-278-\ndrivers/net/wireless/ath/ath12k/ahb.c:279:\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-280-\t\tstruct ath12k_ext_irq_grp *irq_grp = \u0026ab-\u003eext_irq_grp[i];\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=319=static void ath12k_ahb_ext_irq_enable(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-323-\ndrivers/net/wireless/ath/ath12k/ahb.c:324:\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-325-\t\tirq_grp = \u0026ab-\u003eext_irq_grp[i];\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=340=static void ath12k_ahb_stop(struct ath12k_base *ab)\ndrivers/net/wireless/ath/ath12k/ahb.c-341-{\ndrivers/net/wireless/ath/ath12k/ahb.c:342:\tif (!test_bit(ATH12K_FLAG_CRASH_FLUSH, \u0026ab-\u003edev_flags))\ndrivers/net/wireless/ath/ath12k/ahb.c-343-\t\tath12k_ahb_ce_irqs_disable(ab);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=350=static int ath12k_ahb_power_up(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-352-\tstruct ath12k_ahb *ab_ahb = ath12k_ab_to_ahb(ab);\ndrivers/net/wireless/ath/ath12k/ahb.c:353:\tchar fw_name[ATH12K_USERPD_FW_NAME_LEN];\ndrivers/net/wireless/ath/ath12k/ahb.c:354:\tchar fw2_name[ATH12K_USERPD_FW_NAME_LEN];\ndrivers/net/wireless/ath/ath12k/ahb.c-355-\tstruct device *dev = ab-\u003edev;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-378-\ndrivers/net/wireless/ath/ath12k/ahb.c:379:\tsnprintf(fw_name, sizeof(fw_name), \"%s/%s/%s%d%s\", ATH12K_FW_DIR,\ndrivers/net/wireless/ath/ath12k/ahb.c:380:\t\t ab-\u003ehw_params-\u003efw.dir, ATH12K_AHB_FW_PREFIX, ab_ahb-\u003euserpd_id,\ndrivers/net/wireless/ath/ath12k/ahb.c:381:\t\t ATH12K_AHB_FW_SUFFIX);\ndrivers/net/wireless/ath/ath12k/ahb.c-382-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-388-\ndrivers/net/wireless/ath/ath12k/ahb.c:389:\tath12k_dbg(ab, ATH12K_DBG_AHB, \"Booting fw image %s, size %zd\\n\", fw_name,\ndrivers/net/wireless/ath/ath12k/ahb.c-390-\t\t fw-\u003esize);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-397-\ndrivers/net/wireless/ath/ath12k/ahb.c:398:\tpasid = (u32_encode_bits(ab_ahb-\u003euserpd_id, ATH12K_USERPD_ID_MASK)) |\ndrivers/net/wireless/ath/ath12k/ahb.c:399:\t\tATH12K_AHB_UPD_SWID;\ndrivers/net/wireless/ath/ath12k/ahb.c-400-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-412-\ndrivers/net/wireless/ath/ath12k/ahb.c:413:\tsnprintf(fw2_name, sizeof(fw2_name), \"%s/%s/%s\", ATH12K_FW_DIR,\ndrivers/net/wireless/ath/ath12k/ahb.c:414:\t\t ab-\u003ehw_params-\u003efw.dir, ATH12K_AHB_FW2);\ndrivers/net/wireless/ath/ath12k/ahb.c-415-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-421-\ndrivers/net/wireless/ath/ath12k/ahb.c:422:\tath12k_dbg(ab, ATH12K_DBG_AHB, \"Booting fw image %s, size %zd\\n\", fw2_name,\ndrivers/net/wireless/ath/ath12k/ahb.c-423-\t\t fw2-\u003esize);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-455-\ttime_left = wait_for_completion_timeout(\u0026ab_ahb-\u003euserpd_spawned,\ndrivers/net/wireless/ath/ath12k/ahb.c:456:\t\t\t\t\t\tATH12K_USERPD_SPAWN_TIMEOUT);\ndrivers/net/wireless/ath/ath12k/ahb.c-457-\tif (!time_left) {\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-463-\ttime_left = wait_for_completion_timeout(\u0026ab_ahb-\u003euserpd_ready,\ndrivers/net/wireless/ath/ath12k/ahb.c:464:\t\t\t\t\t\tATH12K_USERPD_READY_TIMEOUT);\ndrivers/net/wireless/ath/ath12k/ahb.c-465-\tif (!time_left) {\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-472-\ndrivers/net/wireless/ath/ath12k/ahb.c:473:\tath12k_dbg(ab, ATH12K_DBG_AHB, \"UserPD%d is now UP\\n\", ab_ahb-\u003euserpd_id);\ndrivers/net/wireless/ath/ath12k/ahb.c-474-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=482=static void ath12k_ahb_power_down(struct ath12k_base *ab, bool is_suspend)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-492-\ttime_left = wait_for_completion_timeout(\u0026ab_ahb-\u003euserpd_stopped,\ndrivers/net/wireless/ath/ath12k/ahb.c:493:\t\t\t\t\t\tATH12K_USERPD_STOP_TIMEOUT);\ndrivers/net/wireless/ath/ath12k/ahb.c-494-\tif (!time_left) {\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-501-\tif (ab_ahb-\u003escm_auth_enabled) {\ndrivers/net/wireless/ath/ath12k/ahb.c:502:\t\tpasid = (u32_encode_bits(ab_ahb-\u003euserpd_id, ATH12K_USERPD_ID_MASK)) |\ndrivers/net/wireless/ath/ath12k/ahb.c:503:\t\t\t ATH12K_AHB_UPD_SWID;\ndrivers/net/wireless/ath/ath12k/ahb.c-504-\t\t/* Release the firmware */\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=581=static int ath12k_ahb_config_ext_irq(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-588-\tring_mask = ab-\u003ehw_params-\u003ering_mask;\ndrivers/net/wireless/ath/ath12k/ahb.c:589:\tfor (i = 0; i \u003c ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-590-\t\tirq_grp = \u0026ab-\u003eext_irq_grp[i];\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-605-\t\t\t BIT(ab-\u003ehal.tcl_to_wbm_rbm_map[j].wbm_ring_num) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:606:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX) {\ndrivers/net/wireless/ath/ath12k/ahb.c-607-\t\t\t\tirq_grp-\u003eirqs[num_irq++] =\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-611-\ndrivers/net/wireless/ath/ath12k/ahb.c:612:\t\tfor (j = 0; j \u003c ATH12K_EXT_IRQ_NUM_MAX; j++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-613-\t\t\tif (ring_mask-\u003erx[i] \u0026 BIT(j) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:614:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX) {\ndrivers/net/wireless/ath/ath12k/ahb.c-615-\t\t\t\tirq_grp-\u003eirqs[num_irq++] =\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-619-\t\t\tif (ring_mask-\u003erx_err[i] \u0026 BIT(j) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:620:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX)\ndrivers/net/wireless/ath/ath12k/ahb.c-621-\t\t\t\tirq_grp-\u003eirqs[num_irq++] = reo2host_exception;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-623-\t\t\tif (ring_mask-\u003erx_wbm_rel[i] \u0026 BIT(j) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:624:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX)\ndrivers/net/wireless/ath/ath12k/ahb.c-625-\t\t\t\tirq_grp-\u003eirqs[num_irq++] = wbm2host_rx_release;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-627-\t\t\tif (ring_mask-\u003ereo_status[i] \u0026 BIT(j) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:628:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX)\ndrivers/net/wireless/ath/ath12k/ahb.c-629-\t\t\t\tirq_grp-\u003eirqs[num_irq++] = reo2host_status;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-631-\t\t\tif (ring_mask-\u003erx_mon_dest[i] \u0026 BIT(j) \u0026\u0026\ndrivers/net/wireless/ath/ath12k/ahb.c:632:\t\t\t num_irq \u003c ATH12K_EXT_IRQ_NUM_MAX)\ndrivers/net/wireless/ath/ath12k/ahb.c-633-\t\t\t\tirq_grp-\u003eirqs[num_irq++] =\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=658=static int ath12k_ahb_config_irq(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-669-\ndrivers/net/wireless/ath/ath12k/ahb.c:670:\t\tirq_idx = ATH12K_IRQ_CE0_OFFSET + i;\ndrivers/net/wireless/ath/ath12k/ahb.c-671-\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=736=static irqreturn_t ath12k_userpd_irq_handler(int irq, void *data)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-740-\ndrivers/net/wireless/ath/ath12k/ahb.c:741:\tif (irq == ab_ahb-\u003euserpd_irq_num[ATH12K_USERPD_SPAWN_IRQ]) {\ndrivers/net/wireless/ath/ath12k/ahb.c-742-\t\tcomplete(\u0026ab_ahb-\u003euserpd_spawned);\ndrivers/net/wireless/ath/ath12k/ahb.c:743:\t} else if (irq == ab_ahb-\u003euserpd_irq_num[ATH12K_USERPD_READY_IRQ]) {\ndrivers/net/wireless/ath/ath12k/ahb.c-744-\t\tcomplete(\u0026ab_ahb-\u003euserpd_ready);\ndrivers/net/wireless/ath/ath12k/ahb.c:745:\t} else if (irq == ab_ahb-\u003euserpd_irq_num[ATH12K_USERPD_STOP_ACK_IRQ])\t{\ndrivers/net/wireless/ath/ath12k/ahb.c-746-\t\tcomplete(\u0026ab_ahb-\u003euserpd_stopped);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=755=static int ath12k_ahb_config_rproc_irq(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-760-\ndrivers/net/wireless/ath/ath12k/ahb.c:761:\tfor (i = 0; i \u003c ATH12K_USERPD_MAX_IRQ; i++) {\ndrivers/net/wireless/ath/ath12k/ahb.c-762-\t\tab_ahb-\u003euserpd_irq_num[i] = platform_get_irq_byname(ab-\u003epdev,\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-766-\ndrivers/net/wireless/ath/ath12k/ahb.c:767:\t\tupd_irq_name = devm_kzalloc(\u0026ab-\u003epdev-\u003edev, ATH12K_UPD_IRQ_WRD_LEN,\ndrivers/net/wireless/ath/ath12k/ahb.c-768-\t\t\t\t\t GFP_KERNEL);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-771-\ndrivers/net/wireless/ath/ath12k/ahb.c:772:\t\tscnprintf(upd_irq_name, ATH12K_UPD_IRQ_WRD_LEN, \"UserPD%u-%s\",\ndrivers/net/wireless/ath/ath12k/ahb.c-773-\t\t\t ab_ahb-\u003euserpd_id, ath12k_userpd_irq[i]);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=802=static int ath12k_ahb_root_pd_state_notifier(struct notifier_block *nb,\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-807-\ndrivers/net/wireless/ath/ath12k/ahb.c:808:\tif (event == ATH12K_RPROC_AFTER_POWERUP) {\ndrivers/net/wireless/ath/ath12k/ahb.c:809:\t\tath12k_generic_dbg(ATH12K_DBG_AHB, \"Root PD is UP\\n\");\ndrivers/net/wireless/ath/ath12k/ahb.c-810-\t\tcomplete(\u0026rproc_info-\u003erootpd_ready);\n--\ndrivers/net/wireless/ath/ath12k/ahb.c=886=static int ath12k_ahb_get_rproc(struct ath12k_base *ab)\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-895-\ndrivers/net/wireless/ath/ath12k/ahb.c:896:\tif (ab_ahb-\u003euserpd_id \u003e ATH12K_MAX_DEVICES)\ndrivers/net/wireless/ath/ath12k/ahb.c-897-\t\treturn -ENOSPC;\n--\ndrivers/net/wireless/ath/ath12k/ahb.c-899-\tif (g_rproc_info) {\ndrivers/net/wireless/ath/ath12k/ahb.c:900:\t\tif (g_rproc_info-\u003enum_userpd \u003e= ATH12K_MAX_DEVICES) {\n\n"
} |
| 5/2 | 2026/09/03 00:30 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 19288 output: 41 thoughts: 68 Thoughts: Here's my take on the situation: **Investigating the ATH12K Driver Configuration** Okay, so I need to track down a potential configuration or code issue related to the ATH12K wireless driver. My first instinct is to see if any clues are hiding in the usual suspects. I'll start by checking the Kconfig file – that's often where the enable/disable options and any compile-time dependencies are defined. So, let me take a look at `drivers/net/wireless/ath/ath12k/Kconfig` to see if there's anything obvious there. I'll also glance at the PCI-specific implementation in `drivers/net/wireless/ath/ath12k/pci.c`. Hopefully, between these two files, I can get a better handle on the situation and pinpoint the source of whatever I'm troubleshooting. |
| 6/2 | 2026/09/03 00:30 | tool | read-file |
0mArgs:{
"File": "drivers/net/wireless/ath/ath12k/Kconfig",
"FirstLine": 1,
"LineCount": 60
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: BSD-3-Clause-Clear\n 2:\tconfig ATH12K\n 3:\t\ttristate \"Qualcomm Wi-Fi 7 support (ath12k)\"\n 4:\t\tdepends on MAC80211 \u0026\u0026 HAS_DMA \u0026\u0026 PCI\n 5:\t\tselect QCOM_QMI_HELPERS\n 6:\t\tselect MHI_BUS\n 7:\t\tselect QRTR\n 8:\t\tselect QRTR_MHI\n 9:\t\tselect PCI_PWRCTRL_PWRSEQ if HAVE_PWRCTRL\n 10:\t\thelp\n 11:\t\t Enable support for Qualcomm Technologies Wi-Fi 7 (IEEE\n 12:\t\t 802.11be) family of chipsets, for example WCN7850 and\n 13:\t\t QCN9274.\n 14:\t\n 15:\t\t If you choose to build a module, it'll be called ath12k.\n 16:\t\n 17:\tconfig ATH12K_AHB\n 18:\t\tbool \"Qualcomm ath12k AHB support\"\n 19:\t\tdepends on ATH12K \u0026\u0026 REMOTEPROC\n 20:\t\tselect QCOM_MDT_LOADER\n 21:\t\tselect QCOM_PAS\n 22:\t\thelp\n 23:\t\t Enable support for Ath12k AHB bus chipsets, example IPQ5332.\n 24:\t\n 25:\tconfig ATH12K_DEBUG\n 26:\t\tbool \"ath12k debugging\"\n 27:\t\tdepends on ATH12K\n 28:\t\thelp\n 29:\t\t Enable debug support, for example debug messages which must\n 30:\t\t be enabled separately using the debug_mask module parameter.\n 31:\t\n 32:\t\t If unsure, say Y to make it easier to debug problems. But if\n 33:\t\t you want optimal performance choose N.\n 34:\t\n 35:\tconfig ATH12K_DEBUGFS\n 36:\t\tbool \"Qualcomm ath12k debugfs support\"\n 37:\t\tdepends on ATH12K \u0026\u0026 MAC80211_DEBUGFS\n 38:\t\thelp\n 39:\t\t Enable ath12k debugfs support\n 40:\t\n 41:\t\t If unsure, say Y to make it easier to debug problems. But if\n 42:\t\t you want optimal performance choose N.\n 43:\t\n 44:\tconfig ATH12K_TRACING\n 45:\t\tbool \"ath12k tracing support\"\n 46:\t\tdepends on ATH12K \u0026\u0026 EVENT_TRACING\n 47:\t\thelp\n 48:\t\t Enable ath12k tracing infrastructure.\n 49:\t\n 50:\t\t If unsure, say Y to make it easier to debug problems. But if\n 51:\t\t you want optimal performance choose N.\n 52:\t\n 53:\tconfig ATH12K_COREDUMP\n 54:\t\tbool \"ath12k coredump\"\n 55:\t\tdepends on ATH12K\n 56:\t\tselect WANT_DEV_COREDUMP\n 57:\t\thelp\n 58:\t\t Enable ath12k coredump collection\n 59:\t\n 60:\t\t If unsure, say Y to make it easier to debug problems. But if\n"
} |
| 7/2 | 2026/09/03 00:30 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 20423 output: 30 thoughts: 808 Thoughts: **Fuzzing Applicability: The Ath12k Conundrum** Okay, let's break this down systematically. The rules are clear: changes are **not** worth fuzzing if they're limited to documentation, comments, decorative logging, unreachable code paths in virtualized environments, or vendor-specific drivers requiring physical hardware. My primary concern is ath12k. Is it reachable through standard QEMU or even with clever tricks like `usb gadget` or `mac80211_hwsim`? My initial thought is no, this is a Qualcomm Wi-Fi 7 chipset driver, and it's PCIe or AHB based. It's designed for specific Qualcomm hardware (WCN7850, QCN9274, IPQ5332, etc.) and relies on MHI bus, QMI, and firmware loading. Standard QEMU doesn't emulate that. It emulates the usual suspects for networking, but definitely not ath12k. And no, mac80211_hwsim is a software simulator - totally separate from ath12k. Okay, let's be absolutely certain. The rules explicitly exclude code that's unreachable even with software-emulated hardware. It’s also very clear about vendor-specific PCIe drivers. Let's look again at the file structure within `drivers/net/wireless/ath/ath12k/`. This will confirm whether this is strictly a physical hardware driver or if there's any pretense of virtual support. No emulated hardware means no fuzzing. |
| 8/2 | 2026/09/03 00:30 | tool | codesearch-dir-index |
0mArgs:{
"Dir": "drivers/net/wireless/ath/ath12k"
}Results: {
"Files": [
"acpi.c",
"acpi.h",
"ahb.c",
"ahb.h",
"ce.c",
"ce.h",
"cmn_defs.h",
"core.c",
"core.h",
"coredump.c",
"coredump.h",
"dbring.c",
"dbring.h",
"debug.c",
"debug.h",
"debugfs.c",
"debugfs.h",
"debugfs_htt_stats.c",
"debugfs_htt_stats.h",
"debugfs_sta.c",
"debugfs_sta.h",
"dp.c",
"dp.h",
"dp_cmn.h",
"dp_htt.c",
"dp_htt.h",
"dp_mon.c",
"dp_mon.h",
"dp_peer.c",
"dp_peer.h",
"dp_rx.c",
"dp_rx.h",
"dp_tx.c",
"dp_tx.h",
"fw.c",
"fw.h",
"hal.c",
"hal.h",
"hif.h",
"htc.c",
"htc.h",
"hw.h",
"mac.c",
"mac.h",
"mhi.c",
"mhi.h",
"p2p.c",
"p2p.h",
"pci.c",
"pci.h",
"peer.c",
"peer.h",
"qmi.c",
"qmi.h",
"reg.c",
"reg.h",
"testmode.c",
"testmode.h",
"thermal.c",
"thermal.h",
"trace.c",
"trace.h",
"wmi.c",
"wmi.h",
"wow.c",
"wow.h"
],
"Subdirs": [
"wifi7"
]
} |
| 9/2 | 2026/09/03 00:30 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 22082 output: 43 thoughts: 69 Thoughts: Here's my thought process, as an expert in this field: **Digging into the MAC Layer Registration** Okay, so I need to understand how the MAC layer is being initialized and configured. My immediate focus is on the `pci.c` and `mac.c` files. I suspect that's where the core PCI-related setup and MAC-specific functions reside. I'm especially interested in understanding the interaction between the hardware registers and the software configuration. I'm going to track the calls to `ath12k_mac_hw_register` and `ath12k_mac_setup_mac_address_list`. They sound like key functions for registering the hardware and setting up the MAC address list, which is crucial for identifying this particular device on the network. I'll need to figure out where they are being called to grasp the complete initialization sequence and how the hardware is being configured with MAC addresses. Let's start with tracing the call sites of `ath12k_mac_hw_register` to determine the program flow. |
| 10/2 | 2026/09/03 00:30 | tool | grepper |
0mArgs:{
"Expression": "ath12k_mac_hw_register",
"PathPrefix": "drivers/net/wireless/ath/ath12k/"
}Results: {
"Output": "drivers/net/wireless/ath/ath12k/mac.c=14756=static int ath12k_mac_setup_register(struct ath12k *ar,\n--\ndrivers/net/wireless/ath/ath12k/mac.c-14789-\ndrivers/net/wireless/ath/ath12k/mac.c:14790:static int ath12k_mac_hw_register(struct ath12k_hw *ah)\ndrivers/net/wireless/ath/ath12k/mac.c-14791-{\n--\ndrivers/net/wireless/ath/ath12k/mac.c=15305=int ath12k_mac_register(struct ath12k_hw_group *ag)\n--\ndrivers/net/wireless/ath/ath12k/mac.c-15313-\ndrivers/net/wireless/ath/ath12k/mac.c:15314:\t\tret = ath12k_mac_hw_register(ah);\ndrivers/net/wireless/ath/ath12k/mac.c-15315-\t\tif (ret)\n--\ndrivers/net/wireless/ath/ath12k/wmi.c=6959=static int ath12k_reg_chan_list_event(struct ath12k_base *ab, struct sk_buff *skb)\n--\ndrivers/net/wireless/ath/ath12k/wmi.c-7037-\t * so the completion cannot be marked at that point.\ndrivers/net/wireless/ath/ath12k/wmi.c:7038:\t * This boot-time update is handled in ath12k_mac_hw_register()\ndrivers/net/wireless/ath/ath12k/wmi.c-7039-\t * before registering the hardware.\n"
} |
| 11/2 | 2026/09/03 00:30 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 22888 output: 134 thoughts: 536 Thoughts: **WorthFuzzing Analysis: ath12k Driver** Okay, so `ath12k_mac_register` is called during the initialization of this Qualcomm hardware, specifically within the `ath12k_core_hw_group_start` or `ath12k_core_start` functions, or during the driver probe. My understanding is that the `ath12k` driver is tied to actual Qualcomm hardware. Let me confirm... yes, it's a Wi-Fi 7 driver designed for PCIe and AHB attached hardware like the WCN7850 and QCN9274. The key thing is that it *requires* physical hardware or a Qualcomm SoC. This means it can't be emulated or instantiated in standard virtualization environments like QEMU or even environments like Google Compute Engine or syzkaller. Software emulation, such as what `mac80211_hwsim` does, uses its own driver, distinct from `ath12k`. Now, reviewing the WorthFuzzing criteria, let's go over the exclusion guidelines, line by line, to ensure no oversight. The patch falls squarely under these rules: * "Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim)." - `ath12k` is out because of the physical hardware dependency. * "Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU." - `ath12k` is a vendor-specific driver and requires PCIe hardware. So, according to the guidelines, the answer is clear: `WorthFuzzing=false`. Let's get that logged with the `set-results` call. |
| 12/2 | 2026/09/03 00:30 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the Qualcomm ath12k Wi-Fi 7 driver (ath12k/mac.c) to set up MAC address lists for single-radio wiphy instances. The ath12k driver is a vendor-specific driver for physical Qualcomm Wi-Fi 7 PCIe/AHB devices (e.g., WCN7850, QCN9274) which cannot be emulated or reached in virtualized environments like standard QEMU or GCE.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Qualcomm ath12k Wi-Fi 7 driver (ath12k/mac.c) to set up MAC address lists for single-radio wiphy instances. The ath12k driver is a vendor-specific driver for physical Qualcomm Wi-Fi 7 PCIe/AHB devices (e.g., WCN7850, QCN9274) which cannot be emulated or reached in virtualized environments like standard QEMU or GCE.",
"WorthFuzzing": false
} |
| 13/1 | 2026/09/03 00:30 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|