| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/11 02:46 | flow | patch-triage |
1mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The changes modify RX handling routines in drivers/net/wwan/mhi_wwan_mbim.c (MHI WWAN MBIM driver for Qualcomm modems) and drivers/net/wwan/t7xx/t7xx_netdev.c (MediaTek T7xx PCIe modem driver). Both drivers depend on specific physical PCIe modem hardware that is not emulated in standard QEMU or GCE virtualized environments, making the modified code paths structurally unreachable for fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/11 02:46 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit c39689a7ebddb4925a506c8ec6c75cda2e11b04d\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Fri Sep 11 02:46:08 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wwan/mhi_wwan_mbim.c b/drivers/net/wwan/mhi_wwan_mbim.c\nindex a949987125976..336f89756f10d 100644\n--- a/drivers/net/wwan/mhi_wwan_mbim.c\n+++ b/drivers/net/wwan/mhi_wwan_mbim.c\n@@ -251,6 +251,14 @@ static int mbim_rx_verify_ndp16(struct sk_buff *skb, struct usb_cdc_ncm_ndp16 *n\n \treturn ret;\n }\n \n+static void mhi_mbim_rx_drop(struct mhi_mbim_link *link, struct sk_buff *skb)\n+{\n+\tdev_kfree_skb_any(skb);\n+\tu64_stats_update_begin(\u0026link-\u003erx_syncp);\n+\tu64_stats_inc(\u0026link-\u003erx_errors);\n+\tu64_stats_update_end(\u0026link-\u003erx_syncp);\n+}\n+\n static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)\n {\n \tint ndpoffset;\n@@ -320,7 +328,10 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)\n \t\t\t\tcontinue;\n \n \t\t\tskb_put(skbn, dgram_len);\n-\t\t\tskb_copy_bits(skb, dgram_offset, skbn-\u003edata, dgram_len);\n+\t\t\tif (skb_copy_bits(skb, dgram_offset, skbn-\u003edata, dgram_len)) {\n+\t\t\t\tmhi_mbim_rx_drop(link, skbn);\n+\t\t\t\tcontinue;\n+\t\t\t}\n \n \t\t\tswitch (skbn-\u003edata[0] \u0026 0xf0) {\n \t\t\tcase 0x40:\n@@ -332,10 +343,7 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)\n \t\t\tdefault:\n \t\t\t\tnet_err_ratelimited(\"%s: unknown protocol\\n\",\n \t\t\t\t\t\t link-\u003endev-\u003ename);\n-\t\t\t\tdev_kfree_skb_any(skbn);\n-\t\t\t\tu64_stats_update_begin(\u0026link-\u003erx_syncp);\n-\t\t\t\tu64_stats_inc(\u0026link-\u003erx_errors);\n-\t\t\t\tu64_stats_update_end(\u0026link-\u003erx_syncp);\n+\t\t\t\tmhi_mbim_rx_drop(link, skbn);\n \t\t\t\tcontinue;\n \t\t\t}\n \n@@ -349,9 +357,13 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)\n unlock:\n \t\trcu_read_unlock();\n next_ndp:\n-\t\t/* Other NDP to process? */\n-\t\tndpoffset = (int)le16_to_cpu(ndp16.wNextNdpIndex);\n-\t\tif (!ndpoffset)\n+\t\t/* Other NDP to process? The offsets must advance, or a\n+\t\t * self-referencing NDP keeps the loop spinning forever.\n+\t\t */\n+\t\tn = (int)le16_to_cpu(ndp16.wNextNdpIndex);\n+\t\tif (n \u003e ndpoffset)\n+\t\t\tndpoffset = n;\n+\t\telse\n \t\t\tbreak;\n \t}\n \ndiff --git a/drivers/net/wwan/t7xx/t7xx_netdev.c b/drivers/net/wwan/t7xx/t7xx_netdev.c\nindex fc0a7cb181df2..8f32c2d269312 100644\n--- a/drivers/net/wwan/t7xx/t7xx_netdev.c\n+++ b/drivers/net/wwan/t7xx/t7xx_netdev.c\n@@ -420,6 +420,10 @@ static void t7xx_ccmni_recv_skb(struct t7xx_ccmni_ctrl *ccmni_ctlb, struct sk_bu\n \n \tskb_cb = T7XX_SKB_CB(skb);\n \tnetif_id = skb_cb-\u003enetif_idx;\n+\tif (netif_id \u003e= NIC_DEV_MAX) {\n+\t\tdev_kfree_skb(skb);\n+\t\treturn;\n+\t}\n \tccmni = READ_ONCE(ccmni_ctlb-\u003eccmni_inst[netif_id]);\n \tif (!ccmni) {\n \t\tdev_kfree_skb(skb);\n"
} |
| 2/1 | 2026/09/11 02:46 | agent | patch-evaluator |
1mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The changes modify RX handling routines in drivers/net/wwan/mhi_wwan_mbim.c (MHI WWAN MBIM driver for Qualcomm modems) and drivers/net/wwan/t7xx/t7xx_netdev.c (MediaTek T7xx PCIe modem driver). Both drivers depend on specific physical PCIe modem hardware that is not emulated in standard QEMU or GCE virtualized environments, making the modified code paths structurally unreachable for fuzzing.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit c39689a7ebddb4925a506c8ec6c75cda2e11b04d
Author: syz-cluster <triage@syzkaller.com>
Date: Fri Sep 11 02:46:08 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wwan/mhi_wwan_mbim.c b/drivers/net/wwan/mhi_wwan_mbim.c
index a949987125976..336f89756f10d 100644
--- a/drivers/net/wwan/mhi_wwan_mbim.c
+++ b/drivers/net/wwan/mhi_wwan_mbim.c
@@ -251,6 +251,14 @@ static int mbim_rx_verify_ndp16(struct sk_buff *skb, struct usb_cdc_ncm_ndp16 *n
return ret;
}
+static void mhi_mbim_rx_drop(struct mhi_mbim_link *link, struct sk_buff *skb)
+{
+ dev_kfree_skb_any(skb);
+ u64_stats_update_begin(&link->rx_syncp);
+ u64_stats_inc(&link->rx_errors);
+ u64_stats_update_end(&link->rx_syncp);
+}
+
static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)
{
int ndpoffset;
@@ -320,7 +328,10 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)
continue;
skb_put(skbn, dgram_len);
- skb_copy_bits(skb, dgram_offset, skbn->data, dgram_len);
+ if (skb_copy_bits(skb, dgram_offset, skbn->data, dgram_len)) {
+ mhi_mbim_rx_drop(link, skbn);
+ continue;
+ }
switch (skbn->data[0] & 0xf0) {
case 0x40:
@@ -332,10 +343,7 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)
default:
net_err_ratelimited("%s: unknown protocol\n",
link->ndev->name);
- dev_kfree_skb_any(skbn);
- u64_stats_update_begin(&link->rx_syncp);
- u64_stats_inc(&link->rx_errors);
- u64_stats_update_end(&link->rx_syncp);
+ mhi_mbim_rx_drop(link, skbn);
continue;
}
@@ -349,9 +357,13 @@ static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)
unlock:
rcu_read_unlock();
next_ndp:
- /* Other NDP to process? */
- ndpoffset = (int)le16_to_cpu(ndp16.wNextNdpIndex);
- if (!ndpoffset)
+ /* Other NDP to process? The offsets must advance, or a
+ * self-referencing NDP keeps the loop spinning forever.
+ */
+ n = (int)le16_to_cpu(ndp16.wNextNdpIndex);
+ if (n > ndpoffset)
+ ndpoffset = n;
+ else
break;
}
diff --git a/drivers/net/wwan/t7xx/t7xx_netdev.c b/drivers/net/wwan/t7xx/t7xx_netdev.c
index fc0a7cb181df2..8f32c2d269312 100644
--- a/drivers/net/wwan/t7xx/t7xx_netdev.c
+++ b/drivers/net/wwan/t7xx/t7xx_netdev.c
@@ -420,6 +420,10 @@ static void t7xx_ccmni_recv_skb(struct t7xx_ccmni_ctrl *ccmni_ctlb, struct sk_bu
skb_cb = T7XX_SKB_CB(skb);
netif_id = skb_cb->netif_idx;
+ if (netif_id >= NIC_DEV_MAX) {
+ dev_kfree_skb(skb);
+ return;
+ }
ccmni = READ_ONCE(ccmni_ctlb->ccmni_inst[netif_id]);
if (!ccmni) {
dev_kfree_skb(skb);
|
| 3/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 3892 output: 41 thoughts: 125 Thoughts: **Patch Analysis - A Quick Look** Okay, so I've got this patch in front of me, and my initial thought is, "Is this fuzzable?" First, I need to understand if it's even worth the time. I need to figure out the reachability, the relevant configurations, and any interesting focus symbols. Right, let's start with the files that have been modified. I see `drivers/net/wwan/mhi_wwan_mbim.c` and `drivers/net/wwan/t7xx/t7xx_netdev.c`. Okay, WWAN drivers. Got it. Now, what's their context? Are they likely to be triggered easily in a standard QEMU environment, or am I going to need specialized hardware to actually get at them? I need to know this ASAP. Next step: time to check the Kconfig files or fire up `grepper`. I'm thinking I'll start with `grepper`, as it's often faster for this initial assessment, to see if I can quickly identify any relevant configurations or potential build dependencies that might illuminate the path to reachability. |
| 4/2 | 2026/09/11 02:46 | tool | grepper |
0mArgs:{
"Expression": "MHI_WWAN_MBIM|MTK_T7XX",
"PathPrefix": "drivers/net/wwan"
}Results: {
"Output": "drivers/net/wwan/Kconfig=40=config MHI_WWAN_CTRL\n--\ndrivers/net/wwan/Kconfig-52-\ndrivers/net/wwan/Kconfig:53:config MHI_WWAN_MBIM\ndrivers/net/wwan/Kconfig-54- tristate \"MHI WWAN MBIM network driver for Qualcomm-based PCIe modems\"\n--\ndrivers/net/wwan/Kconfig=96=config IOSM\n--\ndrivers/net/wwan/Kconfig-108-\ndrivers/net/wwan/Kconfig:109:config MTK_T7XX\ndrivers/net/wwan/Kconfig-110-\ttristate \"MediaTek PCIe 5G WWAN modem T7xx device\"\n--\ndrivers/net/wwan/Makefile=11=obj-$(CONFIG_MHI_WWAN_CTRL) += mhi_wwan_ctrl.o\ndrivers/net/wwan/Makefile:12:obj-$(CONFIG_MHI_WWAN_MBIM) += mhi_wwan_mbim.o\ndrivers/net/wwan/Makefile-13-obj-$(CONFIG_QCOM_BAM_DMUX) += qcom_bam_dmux.o\n--\ndrivers/net/wwan/Makefile=15=obj-$(CONFIG_IOSM) += iosm/\ndrivers/net/wwan/Makefile:16:obj-$(CONFIG_MTK_T7XX) += t7xx/\n--\ndrivers/net/wwan/t7xx/Makefile-2-\ndrivers/net/wwan/t7xx/Makefile:3:obj-${CONFIG_MTK_T7XX} := mtk_t7xx.o\ndrivers/net/wwan/t7xx/Makefile-4-mtk_t7xx-y:=\tt7xx_pci.o \\\n"
} |
| 5/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 4765 output: 36 thoughts: 42 Thoughts: Okay, let's dive into this. Here's how I'd approach that kernel configuration investigation, from my perspective: **Kernel Configuration Deep Dive: WWAN & MBIM** Alright, I need to get a handle on the relationships between `MHI_WWAN_MBIM` and `MTK_T7XX` within the WWAN subsystem's Kconfig file. My immediate thought is to check `drivers/net/wwan/Kconfig`. I'll want to quickly parse that file, paying specific attention to how these two options – `MHI_WWAN_MBIM` and `MTK_T7XX` are defined and, more importantly, *what* they depend on. Are they mutually exclusive? Does one *require* the other? Are there other configurations that are brought into the picture based on either of these being set? Understanding their dependencies is the key to figuring out how they play together in the broader WWAN ecosystem and how I might need to adjust things. I'm especially interested in any platform or bus-specific constraints revealed in the Kconfig file. This should give me a solid base of knowledge for understanding how the MBIM protocol is managed when using the MTK T7XX hardware. |
| 6/2 | 2026/09/11 02:46 | tool | read-file |
0mArgs:{
"File": "drivers/net/wwan/Kconfig",
"FirstLine": 40,
"LineCount": 80
}Results: {
"Contents": " 40:\tconfig MHI_WWAN_CTRL\n 41:\t\ttristate \"MHI WWAN control driver for Qualcomm-based PCIe modems\"\n 42:\t\tdepends on MHI_BUS\n 43:\t\thelp\n 44:\t\t MHI WWAN CTRL allows QCOM-based PCIe modems to expose different modem\n 45:\t\t control protocols/ports to userspace, including AT, MBIM, QMI, DIAG\n 46:\t\t and FIREHOSE. These protocols can be accessed directly from userspace\n 47:\t\t (e.g. AT commands) or via libraries/tools (e.g. libmbim, libqmi,\n 48:\t\t libqcdm...).\n 49:\t\n 50:\t\t To compile this driver as a module, choose M here: the module will be\n 51:\t\t called mhi_wwan_ctrl.\n 52:\t\n 53:\tconfig MHI_WWAN_MBIM\n 54:\t tristate \"MHI WWAN MBIM network driver for Qualcomm-based PCIe modems\"\n 55:\t depends on MHI_BUS\n 56:\t help\n 57:\t MHI WWAN MBIM is a WWAN network driver for QCOM-based PCIe modems.\n 58:\t It implements MBIM over MHI, for IP data aggregation and muxing.\n 59:\t A default wwan0 network interface is created for MBIM data session\n 60:\t ID 0. Additional links can be created via wwan rtnetlink type.\n 61:\t\n 62:\t To compile this driver as a module, choose M here: the module will be\n 63:\t called mhi_wwan_mbim.\n 64:\t\n 65:\tconfig QCOM_BAM_DMUX\n 66:\t\ttristate \"Qualcomm BAM-DMUX WWAN network driver\"\n 67:\t\tdepends on (DMA_ENGINE \u0026\u0026 PM \u0026\u0026 QCOM_SMEM_STATE) || COMPILE_TEST\n 68:\t\thelp\n 69:\t\t The BAM Data Multiplexer provides access to the network data channels\n 70:\t\t of modems integrated into many older Qualcomm SoCs, e.g. Qualcomm\n 71:\t\t MSM8916 or MSM8974. The connection can be established via QMI/AT from\n 72:\t\t userspace with control ports available through the WWAN subsystem\n 73:\t\t (CONFIG_RPMSG_WWAN_CTRL) or QRTR network sockets (CONFIG_QRTR).\n 74:\t\n 75:\t\t To compile this driver as a module, choose M here: the module will be\n 76:\t\t called qcom_bam_dmux.\n 77:\t\n 78:\tconfig RPMSG_WWAN_CTRL\n 79:\t\ttristate \"RPMSG WWAN control driver\"\n 80:\t\tdepends on RPMSG\n 81:\t\thelp\n 82:\t\t RPMSG WWAN CTRL allows modems available via RPMSG channels to expose\n 83:\t\t different modem protocols/ports to userspace, including AT and QMI.\n 84:\t\t These protocols can be accessed directly from userspace\n 85:\t\t (e.g. AT commands) or via libraries/tools (e.g. libqmi, libqcdm...).\n 86:\t\n 87:\t\t This is mainly used for modems integrated into many Qualcomm SoCs,\n 88:\t\t e.g. for AT and QMI on Qualcomm MSM8916 or MSM8974. Note that many\n 89:\t\t newer Qualcomm SoCs (e.g. SDM845) still provide an AT port through\n 90:\t\t this driver but the QMI messages can only be sent through\n 91:\t\t QRTR network sockets (CONFIG_QRTR).\n 92:\t\n 93:\t\t To compile this driver as a module, choose M here: the module will be\n 94:\t\t called rpmsg_wwan_ctrl.\n 95:\t\n 96:\tconfig IOSM\n 97:\t\ttristate \"IOSM Driver for Intel M.2 WWAN Device\"\n 98:\t\tdepends on PCI\n 99:\t\tselect NET_DEVLINK\n 100:\t\tselect RELAY if WWAN_DEBUGFS\n 101:\t\thelp\n 102:\t\t This driver enables Intel M.2 WWAN Device communication.\n 103:\t\n 104:\t\t If you have one of those Intel M.2 WWAN Modules and wish to use it in\n 105:\t\t Linux say Y/M here.\n 106:\t\n 107:\t\t If unsure, say N.\n 108:\t\n 109:\tconfig MTK_T7XX\n 110:\t\ttristate \"MediaTek PCIe 5G WWAN modem T7xx device\"\n 111:\t\tdepends on PCI\n 112:\t\tselect RELAY if WWAN_DEBUGFS\n 113:\t\thelp\n 114:\t\t Enables MediaTek PCIe based 5G WWAN modem (T7xx series) device.\n 115:\t\t Adapts WWAN framework and provides network interface like wwan0\n 116:\t\t and tty interfaces like wwan0at0 (AT protocol), wwan0mbim0\n 117:\t\t (MBIM protocol), etc.\n 118:\t\n 119:\t\t To compile this driver as a module, choose M here: the module will be\n"
} |
| 7/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 6474 output: 28 thoughts: 92 Thoughts: **Analyzing Driver Reachability** Okay, let's break down this situation. We've got two drivers to consider in terms of reachability: `MHI_WWAN_MBIM`. I know `MHI` stands for Modem Host Interface, and it's used for Qualcomm PCIe modems. My immediate thought is, "Where does this actually live?" Is `MHI_WWAN_MBIM` directly tied to physical hardware through the `MHI` bus, or are there virtual constructs at play? Perhaps an emulated MHI bus or even some MHI EP emulation going on? That's what I need to pinpoint to really understand how to access its functionality. So, time to dive deeper and see exactly how the MHI bus and its associated devices are created in the system. That's the key to understanding if there is a 'reach'. |
| 8/2 | 2026/09/11 02:46 | tool | grepper |
0mArgs:{
"Expression": "mhi_driver_register",
"PathPrefix": "drivers/"
}Results: {
"Output": "drivers/accel/qaic/qaic_debugfs.c=298=int qaic_bootlog_register(void)\ndrivers/accel/qaic/qaic_debugfs.c-299-{\ndrivers/accel/qaic/qaic_debugfs.c:300:\treturn mhi_driver_register(\u0026qaic_bootlog_mhi_driver);\ndrivers/accel/qaic/qaic_debugfs.c-301-}\n--\ndrivers/accel/qaic/qaic_drv.c=776=static int __init qaic_init(void)\n--\ndrivers/accel/qaic/qaic_drv.c-785-\ndrivers/accel/qaic/qaic_drv.c:786:\tret = mhi_driver_register(\u0026qaic_mhi_driver);\ndrivers/accel/qaic/qaic_drv.c-787-\tif (ret) {\ndrivers/accel/qaic/qaic_drv.c:788:\t\tpr_debug(\"qaic: mhi_driver_register failed %d\\n\", ret);\ndrivers/accel/qaic/qaic_drv.c-789-\t\tgoto free_pci;\n--\ndrivers/accel/qaic/qaic_ras.c=633=int qaic_ras_register(void)\ndrivers/accel/qaic/qaic_ras.c-634-{\ndrivers/accel/qaic/qaic_ras.c:635:\treturn mhi_driver_register(\u0026qaic_ras_mhi_driver);\ndrivers/accel/qaic/qaic_ras.c-636-}\n--\ndrivers/accel/qaic/qaic_ssr.c=807=int qaic_ssr_register(void)\ndrivers/accel/qaic/qaic_ssr.c-808-{\ndrivers/accel/qaic/qaic_ssr.c:809:\treturn mhi_driver_register(\u0026qaic_ssr_mhi_driver);\ndrivers/accel/qaic/qaic_ssr.c-810-}\n--\ndrivers/accel/qaic/qaic_timesync.c=388=int qaic_timesync_init(void)\n--\ndrivers/accel/qaic/qaic_timesync.c-391-\ndrivers/accel/qaic/qaic_timesync.c:392:\tret = mhi_driver_register(\u0026qaic_timesync_driver);\ndrivers/accel/qaic/qaic_timesync.c-393-\tif (ret)\ndrivers/accel/qaic/qaic_timesync.c-394-\t\treturn ret;\ndrivers/accel/qaic/qaic_timesync.c:395:\tret = mhi_driver_register(\u0026qaic_boot_timesync_driver);\ndrivers/accel/qaic/qaic_timesync.c-396-\n--\ndrivers/accel/qaic/sahara.c=926=int sahara_register(void)\ndrivers/accel/qaic/sahara.c-927-{\ndrivers/accel/qaic/sahara.c:928:\treturn mhi_driver_register(\u0026sahara_mhi_driver);\ndrivers/accel/qaic/sahara.c-929-}\n--\ndrivers/bus/mhi/host/init.c=1333=static void mhi_remove(struct device *dev)\n--\ndrivers/bus/mhi/host/init.c-1400-\ndrivers/bus/mhi/host/init.c:1401:int __mhi_driver_register(struct mhi_driver *mhi_drv, struct module *owner)\ndrivers/bus/mhi/host/init.c-1402-{\n--\ndrivers/bus/mhi/host/init.c-1412-}\ndrivers/bus/mhi/host/init.c:1413:EXPORT_SYMBOL_GPL(__mhi_driver_register);\ndrivers/bus/mhi/host/init.c-1414-\n"
} |
| 9/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 7810 output: 42 thoughts: 49 Thoughts: Here's my thinking process: **Diving into the MHI WWAN and T7XX Network Device Drivers** Okay, so I'm looking at `mhi_wwan_mbim.c` and `t7xx_netdev.c` – that's where the action is, it looks like. My first instinct is always to trace the registration and initialization of that `mhi_wwan_mbim` module. I need to understand how it's brought online. How is the MHI interface hooked into the MBIM framework? And how does that interaction with the t7xx hardware actually translate into a working network device? The initialization sequence is key – that's where the driver sets up the data structures, allocates resources, and prepares for communication. Gotta understand that initial handshake to truly get the whole picture. I'm going to start digging into those files and figure out that registration and initialization process. |
| 10/2 | 2026/09/11 02:46 | tool | grepper |
0mArgs:{
"Expression": "mhi_mbim",
"PathPrefix": "drivers/net/wwan/mhi_wwan_mbim.c"
}Results: {
"Output": "drivers/net/wwan/mhi_wwan_mbim.c-45-\ndrivers/net/wwan/mhi_wwan_mbim.c:46:struct mhi_mbim_link {\ndrivers/net/wwan/mhi_wwan_mbim.c:47:\tstruct mhi_mbim_context *mbim;\ndrivers/net/wwan/mhi_wwan_mbim.c-48-\tstruct net_device *ndev;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-64-\ndrivers/net/wwan/mhi_wwan_mbim.c:65:struct mhi_mbim_context {\ndrivers/net/wwan/mhi_wwan_mbim.c-66-\tstruct mhi_device *mdev;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c=78=struct mbim_tx_hdr {\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-83-\ndrivers/net/wwan/mhi_wwan_mbim.c:84:static struct mhi_mbim_link *mhi_mbim_get_link_rcu(struct mhi_mbim_context *mbim,\ndrivers/net/wwan/mhi_wwan_mbim.c-85-\t\t\t\t\t\t unsigned int session)\ndrivers/net/wwan/mhi_wwan_mbim.c-86-{\ndrivers/net/wwan/mhi_wwan_mbim.c:87:\tstruct mhi_mbim_link *link;\ndrivers/net/wwan/mhi_wwan_mbim.c-88-\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-96-\ndrivers/net/wwan/mhi_wwan_mbim.c:97:static int mhi_mbim_get_link_mux_id(struct mhi_controller *cntrl)\ndrivers/net/wwan/mhi_wwan_mbim.c-98-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c=107=static struct sk_buff *mbim_tx_fixup(struct sk_buff *skb, unsigned int session,\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-150-\ndrivers/net/wwan/mhi_wwan_mbim.c:151:static netdev_tx_t mhi_mbim_ndo_xmit(struct sk_buff *skb, struct net_device *ndev)\ndrivers/net/wwan/mhi_wwan_mbim.c-152-{\ndrivers/net/wwan/mhi_wwan_mbim.c:153:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c:154:\tstruct mhi_mbim_context *mbim = link-\u003embim;\ndrivers/net/wwan/mhi_wwan_mbim.c-155-\tunsigned long flags;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-192-\ndrivers/net/wwan/mhi_wwan_mbim.c:193:static int mbim_rx_verify_nth16(struct mhi_mbim_context *mbim, struct sk_buff *skb)\ndrivers/net/wwan/mhi_wwan_mbim.c-194-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c=231=static int mbim_rx_verify_ndp16(struct sk_buff *skb, struct usb_cdc_ncm_ndp16 *ndp16)\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-253-\ndrivers/net/wwan/mhi_wwan_mbim.c:254:static void mhi_mbim_rx_drop(struct mhi_mbim_link *link, struct sk_buff *skb)\ndrivers/net/wwan/mhi_wwan_mbim.c-255-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-261-\ndrivers/net/wwan/mhi_wwan_mbim.c:262:static void mhi_mbim_rx(struct mhi_mbim_context *mbim, struct sk_buff *skb)\ndrivers/net/wwan/mhi_wwan_mbim.c-263-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-276-\t\tstruct usb_cdc_ncm_dpe16 dpe16;\ndrivers/net/wwan/mhi_wwan_mbim.c:277:\t\tstruct mhi_mbim_link *link;\ndrivers/net/wwan/mhi_wwan_mbim.c-278-\t\tint nframes, n, dpeoffset;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-304-\ndrivers/net/wwan/mhi_wwan_mbim.c:305:\t\tlink = mhi_mbim_get_link_rcu(mbim, session);\ndrivers/net/wwan/mhi_wwan_mbim.c-306-\t\tif (!link) {\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-331-\t\t\tif (skb_copy_bits(skb, dgram_offset, skbn-\u003edata, dgram_len)) {\ndrivers/net/wwan/mhi_wwan_mbim.c:332:\t\t\t\tmhi_mbim_rx_drop(link, skbn);\ndrivers/net/wwan/mhi_wwan_mbim.c-333-\t\t\t\tcontinue;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-345-\t\t\t\t\t\t link-\u003endev-\u003ename);\ndrivers/net/wwan/mhi_wwan_mbim.c:346:\t\t\t\tmhi_mbim_rx_drop(link, skbn);\ndrivers/net/wwan/mhi_wwan_mbim.c-347-\t\t\t\tcontinue;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-376-\ndrivers/net/wwan/mhi_wwan_mbim.c:377:static struct sk_buff *mhi_net_skb_agg(struct mhi_mbim_context *mbim,\ndrivers/net/wwan/mhi_wwan_mbim.c-378-\t\t\t\t struct sk_buff *skb)\n--\ndrivers/net/wwan/mhi_wwan_mbim.c=403=static void mhi_net_rx_refill_work(struct work_struct *work)\ndrivers/net/wwan/mhi_wwan_mbim.c-404-{\ndrivers/net/wwan/mhi_wwan_mbim.c:405:\tstruct mhi_mbim_context *mbim = container_of(work, struct mhi_mbim_context,\ndrivers/net/wwan/mhi_wwan_mbim.c-406-\t\t\t\t\t\t rx_refill.work);\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-433-\ndrivers/net/wwan/mhi_wwan_mbim.c:434:static void mhi_mbim_dl_callback(struct mhi_device *mhi_dev,\ndrivers/net/wwan/mhi_wwan_mbim.c-435-\t\t\t\t struct mhi_result *mhi_res)\ndrivers/net/wwan/mhi_wwan_mbim.c-436-{\ndrivers/net/wwan/mhi_wwan_mbim.c:437:\tstruct mhi_mbim_context *mbim = dev_get_drvdata(\u0026mhi_dev-\u003edev);\ndrivers/net/wwan/mhi_wwan_mbim.c-438-\tstruct sk_buff *skb = mhi_res-\u003ebuf_addr;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-466-\ndrivers/net/wwan/mhi_wwan_mbim.c:467:\t\tmhi_mbim_rx(mbim, skb);\ndrivers/net/wwan/mhi_wwan_mbim.c-468-\t}\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-474-\ndrivers/net/wwan/mhi_wwan_mbim.c:475:static void mhi_mbim_ndo_get_stats64(struct net_device *ndev,\ndrivers/net/wwan/mhi_wwan_mbim.c-476-\t\t\t\t struct rtnl_link_stats64 *stats)\ndrivers/net/wwan/mhi_wwan_mbim.c-477-{\ndrivers/net/wwan/mhi_wwan_mbim.c:478:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c-479-\tunsigned int start;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-496-\ndrivers/net/wwan/mhi_wwan_mbim.c:497:static void mhi_mbim_ul_callback(struct mhi_device *mhi_dev,\ndrivers/net/wwan/mhi_wwan_mbim.c-498-\t\t\t\t struct mhi_result *mhi_res)\ndrivers/net/wwan/mhi_wwan_mbim.c-499-{\ndrivers/net/wwan/mhi_wwan_mbim.c:500:\tstruct mhi_mbim_context *mbim = dev_get_drvdata(\u0026mhi_dev-\u003edev);\ndrivers/net/wwan/mhi_wwan_mbim.c-501-\tstruct sk_buff *skb = mhi_res-\u003ebuf_addr;\ndrivers/net/wwan/mhi_wwan_mbim.c-502-\tstruct net_device *ndev = skb-\u003edev;\ndrivers/net/wwan/mhi_wwan_mbim.c:503:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c-504-\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-528-\ndrivers/net/wwan/mhi_wwan_mbim.c:529:static int mhi_mbim_ndo_open(struct net_device *ndev)\ndrivers/net/wwan/mhi_wwan_mbim.c-530-{\ndrivers/net/wwan/mhi_wwan_mbim.c:531:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c-532-\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-543-\ndrivers/net/wwan/mhi_wwan_mbim.c:544:static int mhi_mbim_ndo_stop(struct net_device *ndev)\ndrivers/net/wwan/mhi_wwan_mbim.c-545-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-551-\ndrivers/net/wwan/mhi_wwan_mbim.c:552:static const struct net_device_ops mhi_mbim_ndo = {\ndrivers/net/wwan/mhi_wwan_mbim.c:553:\t.ndo_open = mhi_mbim_ndo_open,\ndrivers/net/wwan/mhi_wwan_mbim.c:554:\t.ndo_stop = mhi_mbim_ndo_stop,\ndrivers/net/wwan/mhi_wwan_mbim.c:555:\t.ndo_start_xmit = mhi_mbim_ndo_xmit,\ndrivers/net/wwan/mhi_wwan_mbim.c:556:\t.ndo_get_stats64 = mhi_mbim_ndo_get_stats64,\ndrivers/net/wwan/mhi_wwan_mbim.c-557-};\ndrivers/net/wwan/mhi_wwan_mbim.c-558-\ndrivers/net/wwan/mhi_wwan_mbim.c:559:static int mhi_mbim_newlink(void *ctxt, struct net_device *ndev, u32 if_id,\ndrivers/net/wwan/mhi_wwan_mbim.c-560-\t\t\t struct netlink_ext_ack *extack)\ndrivers/net/wwan/mhi_wwan_mbim.c-561-{\ndrivers/net/wwan/mhi_wwan_mbim.c:562:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c:563:\tstruct mhi_mbim_context *mbim = ctxt;\ndrivers/net/wwan/mhi_wwan_mbim.c-564-\ndrivers/net/wwan/mhi_wwan_mbim.c-565-\tlink-\u003embim = mbim;\ndrivers/net/wwan/mhi_wwan_mbim.c:566:\tlink-\u003esession = mhi_mbim_get_link_mux_id(link-\u003embim-\u003emdev-\u003emhi_cntrl) + if_id;\ndrivers/net/wwan/mhi_wwan_mbim.c-567-\tlink-\u003endev = ndev;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-571-\trcu_read_lock();\ndrivers/net/wwan/mhi_wwan_mbim.c:572:\tif (mhi_mbim_get_link_rcu(mbim, if_id)) {\ndrivers/net/wwan/mhi_wwan_mbim.c-573-\t\trcu_read_unlock();\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-583-\ndrivers/net/wwan/mhi_wwan_mbim.c:584:static void mhi_mbim_dellink(void *ctxt, struct net_device *ndev,\ndrivers/net/wwan/mhi_wwan_mbim.c-585-\t\t\t struct list_head *head)\ndrivers/net/wwan/mhi_wwan_mbim.c-586-{\ndrivers/net/wwan/mhi_wwan_mbim.c:587:\tstruct mhi_mbim_link *link = wwan_netdev_drvpriv(ndev);\ndrivers/net/wwan/mhi_wwan_mbim.c-588-\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-594-\ndrivers/net/wwan/mhi_wwan_mbim.c:595:static void mhi_mbim_setup(struct net_device *ndev)\ndrivers/net/wwan/mhi_wwan_mbim.c-596-{\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-602-\tndev-\u003eflags = IFF_POINTOPOINT | IFF_NOARP;\ndrivers/net/wwan/mhi_wwan_mbim.c:603:\tndev-\u003enetdev_ops = \u0026mhi_mbim_ndo;\ndrivers/net/wwan/mhi_wwan_mbim.c-604-\tndev-\u003emtu = MHI_MBIM_DEFAULT_MTU;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-610-\ndrivers/net/wwan/mhi_wwan_mbim.c:611:static const struct wwan_ops mhi_mbim_wwan_ops = {\ndrivers/net/wwan/mhi_wwan_mbim.c:612:\t.priv_size = sizeof(struct mhi_mbim_link),\ndrivers/net/wwan/mhi_wwan_mbim.c:613:\t.setup = mhi_mbim_setup,\ndrivers/net/wwan/mhi_wwan_mbim.c:614:\t.newlink = mhi_mbim_newlink,\ndrivers/net/wwan/mhi_wwan_mbim.c:615:\t.dellink = mhi_mbim_dellink,\ndrivers/net/wwan/mhi_wwan_mbim.c-616-};\ndrivers/net/wwan/mhi_wwan_mbim.c-617-\ndrivers/net/wwan/mhi_wwan_mbim.c:618:static int mhi_mbim_probe(struct mhi_device *mhi_dev, const struct mhi_device_id *id)\ndrivers/net/wwan/mhi_wwan_mbim.c-619-{\ndrivers/net/wwan/mhi_wwan_mbim.c-620-\tstruct mhi_controller *cntrl = mhi_dev-\u003emhi_cntrl;\ndrivers/net/wwan/mhi_wwan_mbim.c:621:\tstruct mhi_mbim_context *mbim;\ndrivers/net/wwan/mhi_wwan_mbim.c-622-\tint err;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-643-\t/* Register wwan link ops with MHI controller representing WWAN instance */\ndrivers/net/wwan/mhi_wwan_mbim.c:644:\treturn wwan_register_ops(\u0026cntrl-\u003emhi_dev-\u003edev, \u0026mhi_mbim_wwan_ops, mbim, 0);\ndrivers/net/wwan/mhi_wwan_mbim.c-645-}\ndrivers/net/wwan/mhi_wwan_mbim.c-646-\ndrivers/net/wwan/mhi_wwan_mbim.c:647:static void mhi_mbim_remove(struct mhi_device *mhi_dev)\ndrivers/net/wwan/mhi_wwan_mbim.c-648-{\ndrivers/net/wwan/mhi_wwan_mbim.c:649:\tstruct mhi_mbim_context *mbim = dev_get_drvdata(\u0026mhi_dev-\u003edev);\ndrivers/net/wwan/mhi_wwan_mbim.c-650-\tstruct mhi_controller *cntrl = mhi_dev-\u003emhi_cntrl;\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-658-\ndrivers/net/wwan/mhi_wwan_mbim.c:659:static const struct mhi_device_id mhi_mbim_id_table[] = {\ndrivers/net/wwan/mhi_wwan_mbim.c-660-\t/* Hardware accelerated data PATH (to modem IPA), MBIM protocol */\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-663-};\ndrivers/net/wwan/mhi_wwan_mbim.c:664:MODULE_DEVICE_TABLE(mhi, mhi_mbim_id_table);\ndrivers/net/wwan/mhi_wwan_mbim.c-665-\ndrivers/net/wwan/mhi_wwan_mbim.c:666:static struct mhi_driver mhi_mbim_driver = {\ndrivers/net/wwan/mhi_wwan_mbim.c:667:\t.probe = mhi_mbim_probe,\ndrivers/net/wwan/mhi_wwan_mbim.c:668:\t.remove = mhi_mbim_remove,\ndrivers/net/wwan/mhi_wwan_mbim.c:669:\t.dl_xfer_cb = mhi_mbim_dl_callback,\ndrivers/net/wwan/mhi_wwan_mbim.c:670:\t.ul_xfer_cb = mhi_mbim_ul_callback,\ndrivers/net/wwan/mhi_wwan_mbim.c:671:\t.id_table = mhi_mbim_id_table,\ndrivers/net/wwan/mhi_wwan_mbim.c-672-\t.driver = {\n--\ndrivers/net/wwan/mhi_wwan_mbim.c-676-\ndrivers/net/wwan/mhi_wwan_mbim.c:677:module_mhi_driver(mhi_mbim_driver);\ndrivers/net/wwan/mhi_wwan_mbim.c-678-\n"
} |
| 11/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 13502 output: 33 thoughts: 25 Thoughts: Okay, here's my interpretation of what's going through my mind, rendered in the first person, as if I were the one thinking it: **Diving Deeper: Exploring `t7xx_netdev.c` and `mtk_t7xx`** Right, so we're looking at network device drivers here, specifically targeting the T7xx architecture, which, from what I know, is likely a MediaTek platform. I need to get a better handle on how this particular network device is handled in the kernel. Let's dig into `t7xx_netdev.c` – that file is likely where the core network device driver code resides for this specific hardware. I suspect it'll contain things like initialization routines, interrupt handlers, and all the low-level logic to interface with the hardware. Then, there's `mtk_t7xx`, which I'm betting is a broader module or perhaps a hardware abstraction layer (HAL) tailored to MediaTek's implementation of the T7xx chipset. I'll need to understand how the netdev driver interacts with that HAL. It's crucial to understand the layers of abstraction here to really grasp the data flow and how the network interface is actually managed. I'll be looking for any common patterns, any quirks or optimizations specific to the T7xx platform, and how they deviate from, or adhere to, the standard network device driver model. This will provide a crucial insight into design choices and any potential performance bottlenecks. It's a key part of the puzzle for understanding this particular implementation. |
| 12/2 | 2026/09/11 02:46 | tool | grepper |
0mArgs:{
"Expression": "t7xx",
"PathPrefix": "drivers/net/wwan/t7xx"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 5520 lines.\nUse more precise expression if possible.\n\ndrivers/net/wwan/t7xx/Makefile-2-\ndrivers/net/wwan/t7xx/Makefile:3:obj-${CONFIG_MTK_T7XX} := mtk_t7xx.o\ndrivers/net/wwan/t7xx/Makefile:4:mtk_t7xx-y:=\tt7xx_pci.o \\\ndrivers/net/wwan/t7xx/Makefile:5:\t\tt7xx_pcie_mac.o \\\ndrivers/net/wwan/t7xx/Makefile:6:\t\tt7xx_mhccif.o \\\ndrivers/net/wwan/t7xx/Makefile:7:\t\tt7xx_state_monitor.o \\\ndrivers/net/wwan/t7xx/Makefile:8:\t\tt7xx_modem_ops.o \\\ndrivers/net/wwan/t7xx/Makefile:9:\t\tt7xx_cldma.o \\\ndrivers/net/wwan/t7xx/Makefile:10:\t\tt7xx_hif_cldma.o \\\ndrivers/net/wwan/t7xx/Makefile:11:\t\tt7xx_port_proxy.o \\\ndrivers/net/wwan/t7xx/Makefile:12:\t\tt7xx_port_ctrl_msg.o \\\ndrivers/net/wwan/t7xx/Makefile:13:\t\tt7xx_port_wwan.o \\\ndrivers/net/wwan/t7xx/Makefile:14:\t\tt7xx_hif_dpmaif.o \\\ndrivers/net/wwan/t7xx/Makefile:15:\t\tt7xx_hif_dpmaif_tx.o \\\ndrivers/net/wwan/t7xx/Makefile:16:\t\tt7xx_hif_dpmaif_rx.o \\\ndrivers/net/wwan/t7xx/Makefile:17:\t\tt7xx_dpmaif.o \\\ndrivers/net/wwan/t7xx/Makefile:18:\t\tt7xx_netdev.o\ndrivers/net/wwan/t7xx/Makefile-19-\ndrivers/net/wwan/t7xx/Makefile:20:mtk_t7xx-$(CONFIG_WWAN_DEBUGFS) += \\\ndrivers/net/wwan/t7xx/Makefile:21:\t\tt7xx_port_trace.o \\\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-23-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:24:#include \"t7xx_cldma.h\"\ndrivers/net/wwan/t7xx/t7xx_cldma.c-25-\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-27-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:28:void t7xx_cldma_clear_ip_busy(struct t7xx_cldma_hw *hw_info)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-29-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-37-/**\ndrivers/net/wwan/t7xx/t7xx_cldma.c:38: * t7xx_cldma_hw_restore() - Restore CLDMA HW registers.\ndrivers/net/wwan/t7xx/t7xx_cldma.c:39: * @hw_info: Pointer to struct t7xx_cldma_hw.\ndrivers/net/wwan/t7xx/t7xx_cldma.c-40- *\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-42- */\ndrivers/net/wwan/t7xx/t7xx_cldma.c:43:void t7xx_cldma_hw_restore(struct t7xx_cldma_hw *hw_info)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-44-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-62-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:63:void t7xx_cldma_hw_start_queue(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-64-\t\t\t enum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-74-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:75:void t7xx_cldma_hw_start(struct t7xx_cldma_hw *hw_info)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-76-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-84-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:85:void t7xx_cldma_hw_reset(void __iomem *ao_base)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-86-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-104-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:105:bool t7xx_cldma_tx_addr_is_set(struct t7xx_cldma_hw *hw_info, unsigned int qno)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-106-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-111-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:112:void t7xx_cldma_hw_set_start_addr(struct t7xx_cldma_hw *hw_info, unsigned int qno, u64 address,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-113-\t\t\t\t enum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-122-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:123:void t7xx_cldma_hw_resume_queue(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-124-\t\t\t\tenum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-133-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:134:unsigned int t7xx_cldma_hw_queue_status(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-135-\t\t\t\t\tenum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-147-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:148:void t7xx_cldma_hw_tx_done(struct t7xx_cldma_hw *hw_info, unsigned int bitmask)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-149-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-158-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:159:void t7xx_cldma_hw_rx_done(struct t7xx_cldma_hw *hw_info, unsigned int bitmask)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-160-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-169-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:170:unsigned int t7xx_cldma_hw_int_status(struct t7xx_cldma_hw *hw_info, unsigned int bitmask,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-171-\t\t\t\t enum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-181-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:182:void t7xx_cldma_hw_irq_dis_txrx(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-183-\t\t\t\tenum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-193-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:194:void t7xx_cldma_hw_irq_dis_eq(struct t7xx_cldma_hw *hw_info, unsigned int qno, enum mtk_txrx tx_rx)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-195-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-204-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:205:void t7xx_cldma_hw_irq_en_txrx(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.c-206-\t\t\t enum mtk_txrx tx_rx)\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-216-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:217:void t7xx_cldma_hw_irq_en_eq(struct t7xx_cldma_hw *hw_info, unsigned int qno, enum mtk_txrx tx_rx)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-218-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-228-/**\ndrivers/net/wwan/t7xx/t7xx_cldma.c:229: * t7xx_cldma_hw_init() - Initialize CLDMA HW.\ndrivers/net/wwan/t7xx/t7xx_cldma.c:230: * @hw_info: Pointer to struct t7xx_cldma_hw.\ndrivers/net/wwan/t7xx/t7xx_cldma.c-231- *\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-233- */\ndrivers/net/wwan/t7xx/t7xx_cldma.c:234:void t7xx_cldma_hw_init(struct t7xx_cldma_hw *hw_info)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-235-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-263-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:264:void t7xx_cldma_hw_stop_all_qs(struct t7xx_cldma_hw *hw_info, enum mtk_txrx tx_rx)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-265-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.c-272-\ndrivers/net/wwan/t7xx/t7xx_cldma.c:273:void t7xx_cldma_hw_stop(struct t7xx_cldma_hw *hw_info, enum mtk_txrx tx_rx)\ndrivers/net/wwan/t7xx/t7xx_cldma.c-274-{\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.h=134=enum mtk_txrx {\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.h-138-\ndrivers/net/wwan/t7xx/t7xx_cldma.h:139:enum t7xx_hw_mode {\ndrivers/net/wwan/t7xx/t7xx_cldma.h-140-\tMODE_BIT_32,\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.h-145-\ndrivers/net/wwan/t7xx/t7xx_cldma.h:146:struct t7xx_cldma_hw {\ndrivers/net/wwan/t7xx/t7xx_cldma.h:147:\tenum t7xx_hw_mode\t\thw_mode;\ndrivers/net/wwan/t7xx/t7xx_cldma.h-148-\tvoid __iomem\t\t\t*ap_ao_base;\n--\ndrivers/net/wwan/t7xx/t7xx_cldma.h-152-\ndrivers/net/wwan/t7xx/t7xx_cldma.h:153:void t7xx_cldma_hw_irq_dis_txrx(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-154-\t\t\t\tenum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:155:void t7xx_cldma_hw_irq_dis_eq(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-156-\t\t\t enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:157:void t7xx_cldma_hw_irq_en_txrx(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-158-\t\t\t enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:159:void t7xx_cldma_hw_irq_en_eq(struct t7xx_cldma_hw *hw_info, unsigned int qno, enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:160:unsigned int t7xx_cldma_hw_queue_status(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-161-\t\t\t\t\tenum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:162:void t7xx_cldma_hw_init(struct t7xx_cldma_hw *hw_info);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:163:void t7xx_cldma_hw_resume_queue(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-164-\t\t\t\tenum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:165:void t7xx_cldma_hw_start(struct t7xx_cldma_hw *hw_info);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:166:void t7xx_cldma_hw_start_queue(struct t7xx_cldma_hw *hw_info, unsigned int qno,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-167-\t\t\t enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:168:void t7xx_cldma_hw_tx_done(struct t7xx_cldma_hw *hw_info, unsigned int bitmask);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:169:void t7xx_cldma_hw_rx_done(struct t7xx_cldma_hw *hw_info, unsigned int bitmask);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:170:void t7xx_cldma_hw_stop_all_qs(struct t7xx_cldma_hw *hw_info, enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:171:void t7xx_cldma_hw_set_start_addr(struct t7xx_cldma_hw *hw_info,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-172-\t\t\t\t unsigned int qno, u64 address, enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:173:void t7xx_cldma_hw_reset(void __iomem *ao_base);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:174:void t7xx_cldma_hw_stop(struct t7xx_cldma_hw *hw_info, enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:175:unsigned int t7xx_cldma_hw_int_status(struct t7xx_cldma_hw *hw_info, unsigned int bitmask,\ndrivers/net/wwan/t7xx/t7xx_cldma.h-176-\t\t\t\t enum mtk_txrx tx_rx);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:177:void t7xx_cldma_hw_restore(struct t7xx_cldma_hw *hw_info);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:178:void t7xx_cldma_clear_ip_busy(struct t7xx_cldma_hw *hw_info);\ndrivers/net/wwan/t7xx/t7xx_cldma.h:179:bool t7xx_cldma_tx_addr_is_set(struct t7xx_cldma_hw *hw_info, unsigned int qno);\ndrivers/net/wwan/t7xx/t7xx_cldma.h-180-#endif\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-27-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:28:#include \"t7xx_dpmaif.h\"\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:29:#include \"t7xx_reg.h\"\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-30-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-33-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:34:static int t7xx_dpmaif_init_intr(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-35-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-81-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:82:static void t7xx_dpmaif_mask_ulq_intr(struct dpmaif_hw_info *hw_info, unsigned int q_num)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-83-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-101-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:102:void t7xx_dpmaif_unmask_ulq_intr(struct dpmaif_hw_info *hw_info, unsigned int q_num)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-103-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-121-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:122:void t7xx_dpmaif_dl_unmask_batcnt_len_err_intr(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-123-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-127-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:128:void t7xx_dpmaif_dl_unmask_pitcnt_len_err_intr(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-129-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-133-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:134:static u32 t7xx_update_dlq_intr(struct dpmaif_hw_info *hw_info, u32 q_done)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-135-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-142-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:143:static int t7xx_mask_dlq_intr(struct dpmaif_hw_info *hw_info, unsigned int qno)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-144-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-150-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:151:\tret = read_poll_timeout_atomic(t7xx_update_dlq_intr, value, value \u0026 q_done,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-152-\t\t\t\t 0, DPMAIF_CHECK_TIMEOUT_US, false, hw_info, q_done);\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-163-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:164:void t7xx_dpmaif_dlq_unmask_rx_done(struct dpmaif_hw_info *hw_info, unsigned int qno)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-165-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-172-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:173:void t7xx_dpmaif_clr_ip_busy_sts(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-174-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-180-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:181:static void t7xx_dpmaif_dlq_mask_rx_pitcnt_len_err_intr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-182-\t\t\t\t\t\t\tunsigned int qno)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-191-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:192:void t7xx_dpmaif_dlq_unmask_pitcnt_len_err_intr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-193-\t\t\t\t\t\tunsigned int qno)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-202-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:203:void t7xx_dpmaif_ul_clr_all_intr(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-204-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-207-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:208:void t7xx_dpmaif_dl_clr_all_intr(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-209-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-212-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:213:static void t7xx_dpmaif_set_intr_para(struct dpmaif_hw_intr_st_para *para,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-214-\t\t\t\t enum dpmaif_hw_intr_type intr_type, unsigned int intr_queue)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-223- */\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:224:static void t7xx_dpmaif_hw_check_tx_intr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-225-\t\t\t\t\t unsigned int intr_status,\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-233-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:234:\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_UL_DONE, value);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-235-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-236-\t\tfor_each_set_bit(index, \u0026value, DPMAIF_TXQ_NUM)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:237:\t\t\tt7xx_dpmaif_mask_ulq_intr(hw_info, index);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-238-\t}\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-241-\tif (value)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:242:\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_UL_DRB_EMPTY, value);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-243-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-245-\tif (value)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:246:\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_UL_MD_NOTREADY, value);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-247-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-249-\tif (value)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:250:\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_UL_MD_PWR_NOTREADY, value);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-251-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-253-\tif (value)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:254:\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_UL_LEN_ERR, value);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-255-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-262- */\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:263:static void t7xx_dpmaif_hw_check_rx_intr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-264-\t\t\t\t\t unsigned int intr_status,\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-268-\t\tif (intr_status \u0026 DP_DL_INT_SKB_LEN_ERR)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:269:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_SKB_LEN_ERR, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-270-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-271-\t\tif (intr_status \u0026 DP_DL_INT_BATCNT_LEN_ERR) {\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:272:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_BATCNT_LEN_ERR, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-273-\t\t\thw_info-\u003eisr_en_mask.ap_dl_l2intr_en_msk \u0026= ~DP_DL_INT_BATCNT_LEN_ERR;\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-278-\t\tif (intr_status \u0026 DP_DL_INT_PITCNT_LEN_ERR) {\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:279:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_PITCNT_LEN_ERR, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-280-\t\t\thw_info-\u003eisr_en_mask.ap_dl_l2intr_en_msk \u0026= ~DP_DL_INT_PITCNT_LEN_ERR;\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-285-\t\tif (intr_status \u0026 DP_DL_INT_PKT_EMPTY_MSK)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:286:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_PKT_EMPTY_SET, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-287-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-288-\t\tif (intr_status \u0026 DP_DL_INT_FRG_EMPTY_MSK)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:289:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_FRG_EMPTY_SET, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-290-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-291-\t\tif (intr_status \u0026 DP_DL_INT_MTU_ERR_MSK)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:292:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_MTU_ERR, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-293-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-294-\t\tif (intr_status \u0026 DP_DL_INT_FRG_LEN_ERR_MSK)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:295:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_FRGCNT_LEN_ERR, DPF_RX_QNO_DFT);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-296-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-297-\t\tif (intr_status \u0026 DP_DL_INT_Q0_PITCNT_LEN_ERR) {\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:298:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_Q0_PITCNT_LEN_ERR, BIT(qno));\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:299:\t\t\tt7xx_dpmaif_dlq_mask_rx_pitcnt_len_err_intr(hw_info, qno);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-300-\t\t}\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-302-\t\tif (intr_status \u0026 DP_DL_INT_HPC_ENT_TYPE_ERR)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:303:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_HPC_ENT_TYPE_ERR,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-304-\t\t\t\t\t\t DPF_RX_QNO_DFT);\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-309-\t\t\t */\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:310:\t\t\tif (!t7xx_mask_dlq_intr(hw_info, qno))\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:311:\t\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_Q0_DONE, BIT(qno));\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-312-\t\t\telse\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-316-\t\tif (intr_status \u0026 DP_DL_INT_Q1_PITCNT_LEN_ERR) {\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:317:\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_Q1_PITCNT_LEN_ERR, BIT(qno));\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:318:\t\t\tt7xx_dpmaif_dlq_mask_rx_pitcnt_len_err_intr(hw_info, qno);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-319-\t\t}\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-321-\t\tif (intr_status \u0026 DP_DL_INT_Q1_DONE) {\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:322:\t\t\tif (!t7xx_mask_dlq_intr(hw_info, qno))\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:323:\t\t\t\tt7xx_dpmaif_set_intr_para(para, DPF_INTR_DL_Q1_DONE, BIT(qno));\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-324-\t\t\telse\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-334-/**\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:335: * t7xx_dpmaif_hw_get_intr_cnt() - Reads interrupt status and count from HW.\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-336- * @hw_info: Pointer to struct hw_info.\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-343- */\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:344:int t7xx_dpmaif_hw_get_intr_cnt(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-345-\t\t\t\tstruct dpmaif_hw_intr_st_para *para, int qno)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-361-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:362:\tt7xx_dpmaif_clr_ip_busy_sts(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-363-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-369-\t\tif (tx_intr_status)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:370:\t\t\tt7xx_dpmaif_hw_check_tx_intr(hw_info, tx_intr_status, para);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-371-\t}\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-387-\t\tif (rx_intr_status)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:388:\t\t\tt7xx_dpmaif_hw_check_rx_intr(hw_info, rx_intr_status, para, qno);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-389-\t}\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-393-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:394:static int t7xx_dpmaif_sram_init(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-395-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-406-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:407:static void t7xx_dpmaif_hw_reset(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-408-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-418-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:419:static int t7xx_dpmaif_hw_config(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-420-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-423-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:424:\tt7xx_dpmaif_hw_reset(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-425-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:426:\tret = t7xx_dpmaif_sram_init(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-427-\tif (ret)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-436-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:437:static void t7xx_dpmaif_pcie_dpmaif_sign(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-438-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-441-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:442:static void t7xx_dpmaif_dl_performance(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-443-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-456-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:457:static void t7xx_dpmaif_hw_hpc_cntl_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-458-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-466-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:467:static void t7xx_dpmaif_hw_agg_cfg_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-468-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-474-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:475:static void t7xx_dpmaif_hw_hash_bit_choose_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-476-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-480-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:481:static void t7xx_dpmaif_hw_mid_pit_timeout_thres_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-482-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-485-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:486:static void t7xx_dpmaif_hw_dlq_timeout_thres_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-487-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-499-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:500:static void t7xx_dpmaif_hw_dlq_start_prs_thres_set(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-501-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-504-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:505:static void t7xx_dpmaif_dl_dlq_hpc_hw_init(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-506-{\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:507:\tt7xx_dpmaif_hw_hpc_cntl_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:508:\tt7xx_dpmaif_hw_agg_cfg_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:509:\tt7xx_dpmaif_hw_hash_bit_choose_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:510:\tt7xx_dpmaif_hw_mid_pit_timeout_thres_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:511:\tt7xx_dpmaif_hw_dlq_timeout_thres_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:512:\tt7xx_dpmaif_hw_dlq_start_prs_thres_set(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-513-}\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-514-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:515:static int t7xx_dpmaif_dl_bat_init_done(struct dpmaif_hw_info *hw_info, bool frg_en)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-516-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-544-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:545:static void t7xx_dpmaif_dl_set_bat_base_addr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-546-\t\t\t\t\t dma_addr_t addr)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-551-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:552:static void t7xx_dpmaif_dl_set_bat_size(struct dpmaif_hw_info *hw_info, unsigned int size)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-553-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-561-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:562:static void t7xx_dpmaif_dl_bat_en(struct dpmaif_hw_info *hw_info, bool enable)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-563-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-575-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:576:static void t7xx_dpmaif_dl_set_ao_bid_maxcnt(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-577-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-585-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:586:static void t7xx_dpmaif_dl_set_ao_mtu(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-587-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-590-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:591:static void t7xx_dpmaif_dl_set_ao_pit_chknum(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-592-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-600-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:601:static void t7xx_dpmaif_dl_set_ao_remain_minsz(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-602-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-611-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:612:static void t7xx_dpmaif_dl_set_ao_bat_bufsz(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-613-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-622-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:623:static void t7xx_dpmaif_dl_set_ao_bat_rsv_length(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-624-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-632-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:633:static void t7xx_dpmaif_dl_set_pkt_alignment(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-634-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-642-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:643:static void t7xx_dpmaif_dl_set_pkt_checksum(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-644-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-651-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:652:static void t7xx_dpmaif_dl_set_ao_frg_check_thres(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-653-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-661-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:662:static void t7xx_dpmaif_dl_set_ao_frg_bufsz(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-663-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-672-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:673:static void t7xx_dpmaif_dl_frg_ao_en(struct dpmaif_hw_info *hw_info, bool enable)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-674-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-686-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:687:static void t7xx_dpmaif_dl_set_ao_bat_check_thres(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-688-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-696-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:697:static void t7xx_dpmaif_dl_set_pit_seqnum(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-698-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-706-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:707:static void t7xx_dpmaif_dl_set_dlq_pit_base_addr(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-708-\t\t\t\t\t\t dma_addr_t addr)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-713-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:714:static void t7xx_dpmaif_dl_set_dlq_pit_size(struct dpmaif_hw_info *hw_info, unsigned int size)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-715-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-727-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:728:static void t7xx_dpmaif_dl_dlq_pit_en(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-729-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-736-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:737:static void t7xx_dpmaif_dl_dlq_pit_init_done(struct dpmaif_hw_info *hw_info,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-738-\t\t\t\t\t unsigned int pit_idx)\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-765-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:766:static void t7xx_dpmaif_config_dlq_pit_hw(struct dpmaif_hw_info *hw_info, unsigned int q_num,\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-767-\t\t\t\t\t struct dpmaif_dl *dl_que)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-768-{\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:769:\tt7xx_dpmaif_dl_set_dlq_pit_base_addr(hw_info, dl_que-\u003epit_base);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:770:\tt7xx_dpmaif_dl_set_dlq_pit_size(hw_info, dl_que-\u003epit_size_cnt);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:771:\tt7xx_dpmaif_dl_dlq_pit_en(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:772:\tt7xx_dpmaif_dl_dlq_pit_init_done(hw_info, q_num);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-773-}\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-774-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:775:static void t7xx_dpmaif_config_all_dlq_hw(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-776-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-779-\tfor (i = 0; i \u003c DPMAIF_RXQ_NUM; i++)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:780:\t\tt7xx_dpmaif_config_dlq_pit_hw(hw_info, i, \u0026hw_info-\u003edl_que[i]);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-781-}\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-782-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:783:static void t7xx_dpmaif_dl_all_q_en(struct dpmaif_hw_info *hw_info, bool enable)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-784-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-812-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:813:static int t7xx_dpmaif_config_dlq_hw(struct dpmaif_hw_info *hw_info)\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-814-{\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-817-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:818:\tt7xx_dpmaif_dl_dlq_hpc_hw_init(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-819-\n--\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c-823-\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:824:\tt7xx_dpmaif_dl_set_ao_remain_minsz(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:825:\tt7xx_dpmaif_dl_set_ao_bat_bufsz(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:826:\tt7xx_dpmaif_dl_set_ao_frg_bufsz(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:827:\tt7xx_dpmaif_dl_set_ao_bat_rsv_length(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:828:\tt7xx_dpmaif_dl_set_ao_bid_maxcnt(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:829:\tt7xx_dpmaif_dl_set_pkt_alignment(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:830:\tt7xx_dpmaif_dl_set_pit_seqnum(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:831:\tt7xx_dpmaif_dl_set_ao_mtu(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:832:\tt7xx_dpmaif_dl_set_ao_pit_chknum(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:833:\tt7xx_dpmaif_dl_set_ao_bat_check_thres(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:834:\tt7xx_dpmaif_dl_set_ao_frg_check_thres(hw_info);\ndrivers/net/wwan/t7xx/t7xx_dpmaif.c:835:\tt7xx_dpmaif_dl_frg_ao_en(hw_info, true);\n\n"
} |
| 13/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 30203 output: 28 thoughts: 109 Thoughts: **PCIe Modem Driver Landscape** Okay, so I'm looking at these modem driver files, trying to get a handle on the current state of things. Right, so `t7xx_pci.c`, that's the MediaTek MTK PCIe 5G WWAN modem driver, that makes sense. And then we've got `mhi_wwan_mbim.c`, which is the MHI driver specifically for Qualcomm-based PCIe modems, using the `MHI_BUS` interface. Hmm, but how does the system know which devices are even *using* MHI? Let me quickly check the device registration within the MHI bus code itself. Looks like `drivers/bus/mhi/host/pci_generic.c` is a prime example. Okay, now I need to find all the MHI controllers in the system. Let's start the search. |
| 14/2 | 2026/09/11 02:46 | tool | grepper |
0mArgs:{
"Expression": "mhi_register_controller",
"PathPrefix": "drivers/"
}Results: {
"Output": "drivers/accel/qaic/mhi_controller.c=800=static int mhi_reset_and_async_power_up(struct mhi_controller *mhi_cntrl)\n--\ndrivers/accel/qaic/mhi_controller.c-826-\ndrivers/accel/qaic/mhi_controller.c:827:struct mhi_controller *qaic_mhi_register_controller(struct pci_dev *pci_dev, void __iomem *mhi_bar,\ndrivers/accel/qaic/mhi_controller.c-828-\t\t\t\t\t\t int mhi_irq, bool shared_msi, int family)\n--\ndrivers/accel/qaic/mhi_controller.c-875-\tmhi_config.timeout_ms = mhi_timeout_ms;\ndrivers/accel/qaic/mhi_controller.c:876:\tret = mhi_register_controller(mhi_cntrl, \u0026mhi_config);\ndrivers/accel/qaic/mhi_controller.c-877-\tif (ret) {\ndrivers/accel/qaic/mhi_controller.c:878:\t\tpci_err(pci_dev, \"mhi_register_controller failed %d\\n\", ret);\ndrivers/accel/qaic/mhi_controller.c-879-\t\treturn ERR_PTR(ret);\n--\ndrivers/accel/qaic/mhi_controller.h-8-\ndrivers/accel/qaic/mhi_controller.h:9:struct mhi_controller *qaic_mhi_register_controller(struct pci_dev *pci_dev, void __iomem *mhi_bar,\ndrivers/accel/qaic/mhi_controller.h-10-\t\t\t\t\t\t int mhi_irq, bool shared_msi, int family);\n--\ndrivers/accel/qaic/qaic_drv.c=570=static int qaic_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)\n--\ndrivers/accel/qaic/qaic_drv.c-596-\ndrivers/accel/qaic/qaic_drv.c:597:\tqdev-\u003emhi_cntrl = qaic_mhi_register_controller(pdev, qdev-\u003ebar_mhi, mhi_irq,\ndrivers/accel/qaic/qaic_drv.c-598-\t\t\t\t\t\t qdev-\u003esingle_msi, config-\u003efamily);\n--\ndrivers/bus/mhi/host/init.c=881=static int parse_config(struct mhi_controller *mhi_cntrl,\n--\ndrivers/bus/mhi/host/init.c-918-\ndrivers/bus/mhi/host/init.c:919:int mhi_register_controller(struct mhi_controller *mhi_cntrl,\ndrivers/bus/mhi/host/init.c-920-\t\t\t const struct mhi_controller_config *config)\n--\ndrivers/bus/mhi/host/init.c-1058-}\ndrivers/bus/mhi/host/init.c:1059:EXPORT_SYMBOL_GPL(mhi_register_controller);\ndrivers/bus/mhi/host/init.c-1060-\n--\ndrivers/bus/mhi/host/pci_generic.c=1365=static int mhi_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)\n--\ndrivers/bus/mhi/host/pci_generic.c-1440-\ndrivers/bus/mhi/host/pci_generic.c:1441:\terr = mhi_register_controller(mhi_cntrl, mhi_cntrl_config);\ndrivers/bus/mhi/host/pci_generic.c-1442-\tif (err)\n--\ndrivers/net/wireless/ath/ath11k/mhi.c=335=int ath11k_mhi_register(struct ath11k_pci *ab_pci)\n--\ndrivers/net/wireless/ath/ath11k/mhi.c-409-\tab_pci-\u003emhi_pre_cb = MHI_CB_INVALID;\ndrivers/net/wireless/ath/ath11k/mhi.c:410:\tret = mhi_register_controller(mhi_ctrl, ath11k_mhi_config);\ndrivers/net/wireless/ath/ath11k/mhi.c-411-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/mhi.c=187=int ath12k_mhi_register(struct ath12k_pci *ab_pci)\n--\ndrivers/net/wireless/ath/ath12k/mhi.c-264-\ndrivers/net/wireless/ath/ath12k/mhi.c:265:\tret = mhi_register_controller(mhi_ctrl, ab-\u003ehw_params-\u003emhi_config);\ndrivers/net/wireless/ath/ath12k/mhi.c-266-\tif (ret) {\n"
} |
| 15/2 | 2026/09/11 02:46 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 31843 output: 39 thoughts: 400 Thoughts: **My Assessment of MHI WWAN and T7xx Driver Accessibility** Okay, let's break this down. My immediate question is whether the MHI WWAN and T7xx WWAN drivers are *fundamentally* dependent on specific hardware. I need to apply the triage criteria meticulously. Section 2 is key here. It distinguishes between drivers that require structurally unreachable hardware (like vendor-specific PCIe switches and GPUs that aren't emulated in standard QEMU) and those that are reachable via virtual buses, USB gadget, loopback, netlink, or the like. The core of my analysis hinges on this: can I *reach* `mhi_wwan_mbim` or the T7xx driver without a physical PCIe card? That's the million-dollar question. I need to determine if any virtual bus mechanisms or software emulation exist that would allow me to instantiate or interact with these drivers. Right, time to dig deeper. I need to see if `mhi_wwan_mbim` is ever instantiated via netlink, a virtual bus, or anything similar. The code itself should reveal something useful. Let's start with `mhi_wwan_mbim.c` and specifically line 618. I'm looking for the probe function, `mhi_mbim_probe`. Ah, it registers WWAN link operations. `wwan_register_ops` and all that. That's good, but the key is *when* `mhi_mbim_probe` gets called. Looks like `mhi_mbim_probe` is called only when an `mhi_device` that matches the `mhi_mbim_id_table` is registered on the MHI bus. That's a critical clue. Now, I need to understand *how* an `mhi_device` is created. That’s the crux. I need to find the creation mechanism. Time to search the kernel for `mhi_device` instantiation. Knowing this will give me a better understanding of how the driver is loaded and if I can load it without the physical hardware. |
| 16/2 | 2026/09/11 02:47 | tool | grepper |
0mArgs:{
"Expression": "mhi_device_create|mhi_alloc_device",
"PathPrefix": "drivers/bus/mhi"
}Results: {
"Output": "drivers/bus/mhi/host/init.c=919=int mhi_register_controller(struct mhi_controller *mhi_cntrl,\n--\ndrivers/bus/mhi/host/init.c-1009-\t/* Register controller with MHI bus */\ndrivers/bus/mhi/host/init.c:1010:\tmhi_dev = mhi_alloc_device(mhi_cntrl);\ndrivers/bus/mhi/host/init.c-1011-\tif (IS_ERR(mhi_dev)) {\n--\ndrivers/bus/mhi/host/init.c=1210=static void mhi_release_device(struct device *dev)\n--\ndrivers/bus/mhi/host/init.c-1228-\ndrivers/bus/mhi/host/init.c:1229:struct mhi_device *mhi_alloc_device(struct mhi_controller *mhi_cntrl)\ndrivers/bus/mhi/host/init.c-1230-{\n--\ndrivers/bus/mhi/host/internal.h=314=static inline void mhi_debugfs_exit(void)\n--\ndrivers/bus/mhi/host/internal.h-318-\ndrivers/bus/mhi/host/internal.h:319:struct mhi_device *mhi_alloc_device(struct mhi_controller *mhi_cntrl);\ndrivers/bus/mhi/host/internal.h-320-\n--\ndrivers/bus/mhi/host/main.c=369=void mhi_create_devices(struct mhi_controller *mhi_cntrl)\n--\ndrivers/bus/mhi/host/main.c-380-\t\t\tcontinue;\ndrivers/bus/mhi/host/main.c:381:\t\tmhi_dev = mhi_alloc_device(mhi_cntrl);\ndrivers/bus/mhi/host/main.c-382-\t\tif (IS_ERR(mhi_dev))\n"
} |
| 17/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 33246 output: 38 thoughts: 220 Thoughts: **My Initial Assessment of the MHI/PCI Landscape** Okay, so I'm looking at this `mhi_register_controller` function and trying to get a handle on its role within the broader MHI and PCI context. Right off the bat, I see that `mhi_pci_probe` calls it, which makes sense. I recognize `mhi_pci_probe` as the function responsible for probing real-world Qualcomm PCIe modems – the Foxconn T99W175, the Telit FN980, those Quectel EM120R-GLs – the usual suspects. I'm noting the vendor IDs (0x17cb, etc.) as a point of reference. I also see that `ath11k_pci`, `ath12k_pci`, and `qaic` are calling this register controller, and I need to come back to these. Then there's `t7xx`, which I immediately recognize as MediaTek's MTK PCIe 5G WWAN modem devices. I know that's found in `drivers/net/wwan/t7xx/t7xx_pci.c`. The PCI IDs, for MediaTek (0x14c3) and the device itself (0x4d75), are what I'd expect. Now I need to take a closer look... I should check that `t7xx_pci.c` file again and make sure that my initial understanding is sound. |
| 18/2 | 2026/09/11 02:47 | tool | grepper |
0mArgs:{
"Expression": "MODULE_DEVICE_TABLE\\(pci",
"PathPrefix": "drivers/net/wwan/t7xx"
}Results: {
"Output": "drivers/net/wwan/t7xx/t7xx_pci.c=943=static const struct pci_device_id t7xx_pci_table[] = {\n--\ndrivers/net/wwan/t7xx/t7xx_pci.c-948-};\ndrivers/net/wwan/t7xx/t7xx_pci.c:949:MODULE_DEVICE_TABLE(pci, t7xx_pci_table);\ndrivers/net/wwan/t7xx/t7xx_pci.c-950-\n"
} |
| 19/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 33983 output: 47 thoughts: 36 Thoughts: Here's my summary, as if I were thinking these thoughts: **Examining the T7xx PCI Initialization** Alright, I need to get a handle on how this T7xx WWAN device is handled, so let's start by looking at its PCI initialization. Specifically, I should delve into the `t7xx_pci_table` structure. That's the logical starting point for understanding how the system identifies and configures the hardware. The file I'm interested in is `drivers/net/wwan/t7xx/t7xx_pci.c`. The table definition and device matching logic are likely housed within that module. Understanding this table will offer clues about supported devices, associated PCI IDs, and driver binding. It is the core of how the driver is supposed to recognize and work with different iterations of the hardware. |
| 20/2 | 2026/09/11 02:47 | tool | read-file |
0mArgs:{
"File": "drivers/net/wwan/t7xx/t7xx_pci.c",
"FirstLine": 940,
"LineCount": 20
}Results: {
"Contents": " 940:\t\tpci_free_irq_vectors(t7xx_dev-\u003epdev);\n 941:\t}\n 942:\t\n 943:\tstatic const struct pci_device_id t7xx_pci_table[] = {\n 944:\t\t{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x4d75) },\n 945:\t\t{ PCI_DEVICE(0x03f0, 0x09c8) }, // HP DRMR-H01\n 946:\t\t{ PCI_DEVICE(0x14c0, 0x4d75) }, // Dell DW5933e\n 947:\t\t{ }\n 948:\t};\n 949:\tMODULE_DEVICE_TABLE(pci, t7xx_pci_table);\n 950:\t\n 951:\tstatic struct pci_driver t7xx_pci_driver = {\n 952:\t\t.name = DRIVER_NAME,\n 953:\t\t.id_table = t7xx_pci_table,\n 954:\t\t.probe = t7xx_pci_probe,\n 955:\t\t.remove = t7xx_pci_remove,\n 956:\t\t.driver.pm = \u0026t7xx_pci_pm_ops,\n 957:\t\t.shutdown = t7xx_pci_shutdown,\n 958:\t};\n 959:\t\n"
} |
| 21/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 34633 output: 33 thoughts: 18 Thoughts: Okay, here's my take on those thoughts, tailored for an expert audience: **Diving Deeper: Investigating `mhi_pci_generic.c`** Alright, I need to broaden the scope of this investigation. We've been looking at the core issue, but there's a strong likelihood it could be manifesting from lower levels. I'm thinking, before we go any further, I should definitely pull up and meticulously examine `mhi_pci_generic.c`. It's a key component in MHI PCI interaction, and it's practically screaming potential for contributing to this problem. Understanding the state and handling there is critical before jumping to any major conclusions or solutions. Let's see what we can find. |
| 22/2 | 2026/09/11 02:47 | tool | grepper |
0mError:no matches Args: {
"Expression": "mhi_pci_table",
"PathPrefix": "drivers/bus/mhi"
}Results: {
"error": "no matches"
} |
| 23/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 34856 output: 34 thoughts: 27 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Hunting Down the PCI ID Table** Okay, so I need to track down the PCI ID table for the MHI host controller. My gut says it's likely nestled within the driver code itself, and specifically, the PCI implementation. That means I should be looking in the `drivers/bus/mhi/host/` directory, and the most logical place to start is `pci_generic.c`. It's a pretty standard naming convention; "generic" often indicates the base or foundational PCI-related functions. Let's see if that file contains the device ID list or if it points to where the information is. I'm expecting to find a structure definition, most likely with a `struct pci_device_id` kind of arrangement, which would list vendor IDs, device IDs, subsystem vendor IDs, subsystem device IDs, and maybe even a driver-specific function pointer. I'll focus on quickly scanning the file for a statically defined array of these PCI ID structures. Hopefully, I'll find what I'm looking for there quickly. If not, I'll need to start hunting through the surrounding include files for definitions of `struct pci_device_id` if it's external, or maybe a macro definition expanding to that structure. I'll keep the search focused; hopefully, it's not too deeply buried in some layered abstraction. |
| 24/2 | 2026/09/11 02:47 | tool | grepper |
0mArgs:{
"Expression": "MODULE_DEVICE_TABLE\\(pci",
"PathPrefix": "drivers/bus/mhi"
}Results: {
"Output": "drivers/bus/mhi/host/pci_generic.c=952=static const struct pci_device_id mhi_pci_id_table[] = {\n--\ndrivers/bus/mhi/host/pci_generic.c-1086-};\ndrivers/bus/mhi/host/pci_generic.c:1087:MODULE_DEVICE_TABLE(pci, mhi_pci_id_table);\ndrivers/bus/mhi/host/pci_generic.c-1088-\n"
} |
| 25/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 35363 output: 42 thoughts: 150 Thoughts: **My Initial Assessment of Modem Driver Dependencies** Okay, so I'm looking at how these modem drivers, specifically `mhi_wwan_mbim.c` and `t7xx_netdev.c`, work. It seems pretty clear that they both need actual physical PCI modem hardware. The `mhi` driver uses the MHI bus, instantiated by either `mhi_pci_generic.c` or Qualcomm's PCIe modems, while the MediaTek one relies on `t7xx_pci.c`. The core assumption right now is that we're dealing with a directly connected hardware device. But, before I go down that path completely, let's just make sure there isn't something more interesting or flexible at play here. It's a good habit to rule out any possibilities that could offer other options. I need to confirm if there might be a virtual or emulated modem device somewhere in the system, or perhaps a user-space interface. Is there a way to inject packets directly into the `mhi_mbim_rx` or `t7xx_ccmni_recv_skb` functions? I'll start by checking the call sites for `t7xx_ccmni_recv_skb` to better understand the data flow. |
| 26/2 | 2026/09/11 02:47 | tool | grepper |
0mArgs:{
"Expression": "t7xx_ccmni_recv_skb",
"PathPrefix": "drivers/net/wwan/t7xx"
}Results: {
"Output": "drivers/net/wwan/t7xx/t7xx_netdev.c=399=static void init_md_status_notifier(struct t7xx_pci_dev *t7xx_dev)\n--\ndrivers/net/wwan/t7xx/t7xx_netdev.c-411-\ndrivers/net/wwan/t7xx/t7xx_netdev.c:412:static void t7xx_ccmni_recv_skb(struct t7xx_ccmni_ctrl *ccmni_ctlb, struct sk_buff *skb,\ndrivers/net/wwan/t7xx/t7xx_netdev.c-413-\t\t\t\tstruct napi_struct *napi)\n--\ndrivers/net/wwan/t7xx/t7xx_netdev.c=490=int t7xx_ccmni_init(struct t7xx_pci_dev *t7xx_dev)\n--\ndrivers/net/wwan/t7xx/t7xx_netdev.c-502-\tctlb-\u003ecallbacks.state_notify = t7xx_ccmni_queue_state_notify;\ndrivers/net/wwan/t7xx/t7xx_netdev.c:503:\tctlb-\u003ecallbacks.recv_skb = t7xx_ccmni_recv_skb;\ndrivers/net/wwan/t7xx/t7xx_netdev.c-504-\tctlb-\u003enic_dev_num = NIC_DEV_DEFAULT;\n"
} |
| 27/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 36217 output: 24 thoughts: 314 Thoughts: **My Analysis of WWAN Device Emulation** Okay, so `t7xx_ccmni_recv_skb` is the entry point when the T7xx PCIe hardware is receiving packets from the DPMAIF RX queue. That makes sense. And, as expected, `mhi_mbim_rx` is called through `mhi_mbim_dl_callback` which is the MHI bus transfer callback. All seems standard. Now, I need to understand if these specific modems are emulatable. Let me check Section 2 of the relevant documentation... structurally unreachable hardware. Okay, that usually means vendor-specific stuff that QEMU doesn't touch: PCIe switches, SmartNICs, GPU drivers like mlxsw, pds_core, and others. They all need that physical ASIC or PCIe card, not something QEMU normally provides. The million-dollar question: Are Qualcomm MHI PCIe modems *or* MediaTek T7xx PCIe modems emulated in the standard QEMU or GCE environments? The answer is a clear *no*. Standard QEMU and GCE *don't* emulate the Qualcomm MHI modems (like the Foxconn, Quectel, Telit ones) or the MediaTek 5G WWAN PCIe modems (those with the 0x14c3:0x4d75 vendor:device ID). It's explicitly stated that they require *physical* PCIe modem hardware, which isn't available in standard virtualized environments. Hmm, this presents a problem. But, wait... could there be a workaround? Is there *any* possibility the WWAN core subsystem could create a dummy or virtual WWAN device? It's worth exploring. To find out, I'm going to take a look at the `drivers/net/wwan/` directory. Maybe I'll get lucky. |
| 28/2 | 2026/09/11 02:47 | tool | codesearch-dir-index |
0mArgs:{
"Dir": "drivers/net/wwan"
}Results: {
"Files": [
"mhi_wwan_ctrl.c",
"mhi_wwan_mbim.c",
"qcom_bam_dmux.c",
"rpmsg_wwan_ctrl.c",
"wwan_core.c",
"wwan_hwsim.c"
],
"Subdirs": [
"iosm",
"t7xx"
]
} |
| 29/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 37053 output: 40 thoughts: 27 Thoughts: Here's my take on the thought process, as if it were my own: **Investigating the Core of WWAN Simulation** Alright, time to dive in. My immediate thought is, "Let's crack open `wwan_hwsim.c`." That's the file I need to understand, but what *exactly* is it doing? My mind is automatically probing: What's the fundamental role of this simulation? What aspects of the WWAN (Wireless Wide Area Network) hardware are being emulated here? I need a clear picture of the hardware it's meant to replicate. Am I looking at the physical radio layer, the modem interface, the protocol stack, or a combination? This is the starting point for really digging into the code. |
| 30/2 | 2026/09/11 02:47 | tool | read-file |
0mArgs:{
"File": "drivers/net/wwan/wwan_hwsim.c",
"FirstLine": 1,
"LineCount": 50
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0-only\n 2:\t/*\n 3:\t * WWAN device simulator for WWAN framework testing.\n 4:\t *\n 5:\t * Copyright (c) 2021, 2025, Sergey Ryazanov \u003cryazanov.s.a@gmail.com\u003e\n 6:\t */\n 7:\t\n 8:\t#define pr_fmt(fmt) KBUILD_MODNAME \": \" fmt\n 9:\t\n 10:\t#include \u003clinux/kernel.h\u003e\n 11:\t#include \u003clinux/module.h\u003e\n 12:\t#include \u003clinux/slab.h\u003e\n 13:\t#include \u003clinux/device.h\u003e\n 14:\t#include \u003clinux/spinlock.h\u003e\n 15:\t#include \u003clinux/time.h\u003e\n 16:\t#include \u003clinux/list.h\u003e\n 17:\t#include \u003clinux/skbuff.h\u003e\n 18:\t#include \u003clinux/timer.h\u003e\n 19:\t#include \u003clinux/netdevice.h\u003e\n 20:\t#include \u003clinux/wwan.h\u003e\n 21:\t#include \u003clinux/debugfs.h\u003e\n 22:\t#include \u003clinux/workqueue.h\u003e\n 23:\t\n 24:\t#include \u003cnet/arp.h\u003e\n 25:\t\n 26:\tstatic int wwan_hwsim_devsnum = 2;\n 27:\tmodule_param_named(devices, wwan_hwsim_devsnum, int, 0444);\n 28:\tMODULE_PARM_DESC(devices, \"Number of simulated devices\");\n 29:\t\n 30:\tstatic const struct class wwan_hwsim_class = {\n 31:\t\t.name = \"wwan_hwsim\",\n 32:\t};\n 33:\t\n 34:\tstatic struct dentry *wwan_hwsim_debugfs_topdir;\n 35:\tstatic struct dentry *wwan_hwsim_debugfs_devcreate;\n 36:\t\n 37:\tstatic DEFINE_SPINLOCK(wwan_hwsim_devs_lock);\n 38:\tstatic LIST_HEAD(wwan_hwsim_devs);\n 39:\tstatic unsigned int wwan_hwsim_dev_idx;\n 40:\tstatic struct workqueue_struct *wwan_wq;\n 41:\t\n 42:\tstruct wwan_hwsim_dev {\n 43:\t\tstruct list_head list;\n 44:\t\tunsigned int id;\n 45:\t\tstruct device dev;\n 46:\t\tstruct work_struct del_work;\n 47:\t\tstruct dentry *debugfs_topdir;\n 48:\t\tstruct dentry *debugfs_portcreate;\n 49:\t\tspinlock_t ports_lock;\t/* Serialize ports creation/deletion */\n 50:\t\tunsigned int port_idx;\n"
} |
| 31/2 | 2026/09/11 02:47 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 38037 output: 135 thoughts: 581 Thoughts: **My Assessment: Structurally Unreachable Code for Fuzzing** Okay, after a close look, I've confirmed that this patch modifies code within the `wwan` subsystem, specifically involving drivers for physical PCIe modems. My understanding is that `wwan_hwsim.c` is a simulator for the `wwan_core` but the relevant drivers in this case – `mhi_wwan_mbim.c` (Qualcomm MHI) and `t7xx/t7xx_netdev.c` (MediaTek T7xx) – are *hardware-specific* drivers that communicate directly with physical PCIe modem devices. These aren't emulated in standard QEMU or GCE environments. The modifications are in the RX packet processing paths: `mhi_mbim_rx` and `mhi_mbim_rx_drop` in the Qualcomm driver, handling the downlink callback, and `t7xx_ccmni_recv_skb` in the MediaTek driver, validating the `netif_id`. These functions only come into play when receiving packets directly from the physical PCIe hardware. Based on the triage philosophy outlined in Section 2, the "structurally unreachable hardware" scenario applies perfectly here. The patch falls into the category of code that relies on physical ASIC/PCIe cards not emulated in standard fuzzing environments. Therefore, this code is inherently unreachable from a fuzzing perspective, as we would be unable to trigger the modified logic. My decision is straightforward: * **WorthFuzzing: false** * **FocusSymbols: \[ ]** * **EnableConfigs: \[ ]** * **Reasoning:** The patch modifies RX packet processing in drivers that require physical, non-emulated PCIe modem hardware. Hence, the modified code is structurally unreachable. |
| 32/2 | 2026/09/11 02:48 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The changes modify RX handling routines in drivers/net/wwan/mhi_wwan_mbim.c (MHI WWAN MBIM driver for Qualcomm modems) and drivers/net/wwan/t7xx/t7xx_netdev.c (MediaTek T7xx PCIe modem driver). Both drivers depend on specific physical PCIe modem hardware that is not emulated in standard QEMU or GCE virtualized environments, making the modified code paths structurally unreachable for fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The changes modify RX handling routines in drivers/net/wwan/mhi_wwan_mbim.c (MHI WWAN MBIM driver for Qualcomm modems) and drivers/net/wwan/t7xx/t7xx_netdev.c (MediaTek T7xx PCIe modem driver). Both drivers depend on specific physical PCIe modem hardware that is not emulated in standard QEMU or GCE virtualized environments, making the modified code paths structurally unreachable for fuzzing.",
"WorthFuzzing": false
} |
| 33/1 | 2026/09/11 02:48 | 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) |
|---|