| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/17 22:55 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies error handling in mite_init() (drivers/gpib/tnt4882/mite.c) by adding a pci_dev_put() when memory allocation fails while iterating over PCI devices matching PCI_VENDOR_ID_NATINST (National Instruments). Because National Instruments PCI devices are specialized physical hardware not emulated in standard QEMU/GCE virtualized environments, pci_get_device() finds no matching devices and the loop body is structurally unreachable.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/17 22:55 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit a4ac11de7c55ceca1537e98e64954e04b66f328c\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Thu Sep 17 22:55:30 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/gpib/tnt4882/mite.c b/drivers/gpib/tnt4882/mite.c\nindex c75c45cdf03f1..3e411653ffc74 100644\n--- a/drivers/gpib/tnt4882/mite.c\n+++ b/drivers/gpib/tnt4882/mite.c\n@@ -58,8 +58,10 @@ void mite_init(void)\n \t\tpcidev;\n \t\tpcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, pcidev)) {\n \t\tmite = kzalloc_obj(*mite);\n-\t\tif (!mite)\n+\t\tif (!mite) {\n+\t\t\tpci_dev_put(pcidev);\n \t\t\treturn;\n+\t\t}\n \n \t\tmite-\u003epcidev = pcidev;\n \t\tpci_dev_get(mite-\u003epcidev);\n"
} |
| 2/1 | 2026/09/17 22:55 | agent | patch-evaluator |
0mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in mite_init() (drivers/gpib/tnt4882/mite.c) by adding a pci_dev_put() when memory allocation fails while iterating over PCI devices matching PCI_VENDOR_ID_NATINST (National Instruments). Because National Instruments PCI devices are specialized physical hardware not emulated in standard QEMU/GCE virtualized environments, pci_get_device() finds no matching devices and the loop body is structurally unreachable.",
"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 a4ac11de7c55ceca1537e98e64954e04b66f328c
Author: syz-cluster <triage@syzkaller.com>
Date: Thu Sep 17 22:55:30 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/gpib/tnt4882/mite.c b/drivers/gpib/tnt4882/mite.c
index c75c45cdf03f1..3e411653ffc74 100644
--- a/drivers/gpib/tnt4882/mite.c
+++ b/drivers/gpib/tnt4882/mite.c
@@ -58,8 +58,10 @@ void mite_init(void)
pcidev;
pcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, pcidev)) {
mite = kzalloc_obj(*mite);
- if (!mite)
+ if (!mite) {
+ pci_dev_put(pcidev);
return;
+ }
mite->pcidev = pcidev;
pci_dev_get(mite->pcidev);
|
| 3/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 2906 output: 41 thoughts: 387 Thoughts: **Analyzing a Kernel Patch for AMD64 Architecture** Okay, so the user wants me to evaluate this kernel patch. My initial thought is to, of course, start by examining the `diff` itself, focusing on its impact on the `amd64` architecture. I need to get a clear picture of what's been changed. Looking at the diff, it appears to be a small change in the `drivers/gpib/tnt4882/mite.c` file. Specifically, it seems like there's a modification in how a `mite` structure is allocated and handled during initialization. I see the addition of `pci_dev_put(pcidev);` within an `if (!mite)` block. That looks like a resource management improvement. Now, I need to understand the *context*. This patch probably addresses a potential resource leak if the memory allocation for `mite` fails. To truly assess this, I need to delve deeper. I'll need to know the purpose of the `mite` driver, how it's initialized, and any dependencies on specific hardware. I'll need to understand if there is a real need for this patch, or if it is just defensive programming. I'll use `read-file` to grab the contents of `drivers/gpib/tnt4882/mite.c`, and check `drivers/gpib/tnt4882/Kconfig` or `drivers/gpib/Kconfig`. This should help me determine if the driver is conditionally compiled, what its purpose is, and its overall place within the GPIB subsystem. This contextual knowledge will be critical to fully understand the impact and necessity of this patch. |
| 4/2 | 2026/09/17 22:55 | tool | read-file |
0mArgs:{
"File": "drivers/gpib/tnt4882/mite.c",
"FirstLine": 1,
"LineCount": 90
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0-only\n 2:\t\n 3:\t/*\n 4:\t *\tHardware driver for NI Mite PCI interface chip,\n 5:\t *\tadapted from COMEDI\n 6:\t *\n 7:\t *\tCopyright (C) 1997-8 David A. Schleef\n 8:\t *\tCopyright (C) 2002 Frank Mori Hess\n 9:\t *\n 10:\t *\tThe PCI-MIO E series driver was originally written by\n 11:\t *\tTomasz Motylewski \u003c...\u003e, and ported to comedi by ds.\n 12:\t *\n 13:\t *\tReferences for specifications:\n 14:\t *\n 15:\t *\t 321747b.pdf Register Level Programmer Manual (obsolete)\n 16:\t *\t 321747c.pdf Register Level Programmer Manual (new)\n 17:\t *\t DAQ-STC reference manual\n 18:\t *\n 19:\t *\tOther possibly relevant info:\n 20:\t *\n 21:\t *\t 320517c.pdf User manual (obsolete)\n 22:\t *\t 320517f.pdf User manual (new)\n 23:\t *\t 320889a.pdf delete\n 24:\t *\t 320906c.pdf maximum signal ratings\n 25:\t *\t 321066a.pdf about 16x\n 26:\t *\t 321791a.pdf discontinuation of at-mio-16e-10 rev. c\n 27:\t *\t 321808a.pdf about at-mio-16e-10 rev P\n 28:\t *\t 321837a.pdf discontinuation of at-mio-16de-10 rev d\n 29:\t *\t 321838a.pdf about at-mio-16de-10 rev N\n 30:\t */\n 31:\t\n 32:\t#include \u003clinux/module.h\u003e\n 33:\t#include \u003clinux/kernel.h\u003e\n 34:\t#include \u003clinux/errno.h\u003e\n 35:\t#include \u003clinux/ioport.h\u003e\n 36:\t#include \u003clinux/delay.h\u003e\n 37:\t#include \u003clinux/mm.h\u003e\n 38:\t#include \u003clinux/interrupt.h\u003e\n 39:\t#include \u003clinux/pci.h\u003e\n 40:\t#include \u003clinux/io.h\u003e\n 41:\t#include \u003clinux/slab.h\u003e\n 42:\t\n 43:\t#include \"mite.h\"\n 44:\t\n 45:\t#define PCI_MITE_SIZE\t\t4096\n 46:\t#define PCI_DAQ_SIZE\t\t4096\n 47:\t\n 48:\tstruct mite_struct *mite_devices;\n 49:\t\n 50:\t#define TOP_OF_PAGE(x) ((x) | (~(PAGE_MASK)))\n 51:\t\n 52:\tvoid mite_init(void)\n 53:\t{\n 54:\t\tstruct pci_dev *pcidev;\n 55:\t\tstruct mite_struct *mite;\n 56:\t\n 57:\t\tfor (pcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, NULL);\n 58:\t\t\tpcidev;\n 59:\t\t\tpcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, pcidev)) {\n 60:\t\t\tmite = kzalloc_obj(*mite);\n 61:\t\t\tif (!mite) {\n 62:\t\t\t\tpci_dev_put(pcidev);\n 63:\t\t\t\treturn;\n 64:\t\t\t}\n 65:\t\n 66:\t\t\tmite-\u003epcidev = pcidev;\n 67:\t\t\tpci_dev_get(mite-\u003epcidev);\n 68:\t\t\tmite-\u003enext = mite_devices;\n 69:\t\t\tmite_devices = mite;\n 70:\t\t}\n 71:\t}\n 72:\t\n 73:\tint mite_setup(struct mite_struct *mite)\n 74:\t{\n 75:\t\tu32 addr;\n 76:\t\n 77:\t\tif (pci_enable_device(mite-\u003epcidev)) {\n 78:\t\t\tpr_err(\"mite: error enabling mite.\\n\");\n 79:\t\t\treturn -EIO;\n 80:\t\t}\n 81:\t\tpci_set_master(mite-\u003epcidev);\n 82:\t\tif (pci_request_regions(mite-\u003epcidev, \"mite\")) {\n 83:\t\t\tpr_err(\"mite: failed to request mite io regions.\\n\");\n 84:\t\t\treturn -EIO;\n 85:\t\t}\n 86:\t\taddr = pci_resource_start(mite-\u003epcidev, 0);\n 87:\t\tmite-\u003emite_phys_addr = addr;\n 88:\t\tmite-\u003emite_io_addr = ioremap(addr, pci_resource_len(mite-\u003epcidev, 0));\n 89:\t\tif (!mite-\u003emite_io_addr) {\n 90:\t\t\tpr_err(\"mite: failed to remap mite io memory address.\\n\");\n"
} |
| 5/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 5087 output: 17 thoughts: 18 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Tracing the Initialization of `mite_init`** Alright, let's dive in. My immediate thought is to trace the execution of `mite_init`. I need to figure out the calling contexts to understand the initialization sequence and dependencies. Understanding where this function is called will give me key information about the driver architecture in question. What's this particular driver associated with? Is this related to a specific hardware component, or is it a more generic initialization function for a broader module? I want to see the broader picture. |
| 6/2 | 2026/09/17 22:55 | tool | grepper |
0mArgs:{
"Expression": "mite_init"
}Results: {
"Output": "drivers/comedi/drivers/8255_pci.c=86=static const struct pci_8255_boardinfo pci_8255_boards[] = {\n--\ndrivers/comedi/drivers/8255_pci.c-176-\ndrivers/comedi/drivers/8255_pci.c:177:static int pci_8255_mite_init(struct pci_dev *pcidev)\ndrivers/comedi/drivers/8255_pci.c-178-{\n--\ndrivers/comedi/drivers/8255_pci.c=196=static int pci_8255_auto_attach(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/8255_pci.c-216-\tif (board-\u003ehas_mite) {\ndrivers/comedi/drivers/8255_pci.c:217:\t\tret = pci_8255_mite_init(pcidev);\ndrivers/comedi/drivers/8255_pci.c-218-\t\tif (ret)\n--\ndrivers/comedi/drivers/mite.c=634=EXPORT_SYMBOL_GPL(mite_release_channel);\n--\ndrivers/comedi/drivers/mite.c-636-/**\ndrivers/comedi/drivers/mite.c:637: * mite_init_ring_descriptors() - Initialize a MITE dma ring descriptors.\ndrivers/comedi/drivers/mite.c-638- * @ring: MITE dma ring.\n--\ndrivers/comedi/drivers/mite.c-648- */\ndrivers/comedi/drivers/mite.c:649:int mite_init_ring_descriptors(struct mite_ring *ring,\ndrivers/comedi/drivers/mite.c-650-\t\t\t struct comedi_subdevice *s,\n--\ndrivers/comedi/drivers/mite.c-694-}\ndrivers/comedi/drivers/mite.c:695:EXPORT_SYMBOL_GPL(mite_init_ring_descriptors);\ndrivers/comedi/drivers/mite.c-696-\n--\ndrivers/comedi/drivers/mite.c=716=int mite_buf_change(struct mite_ring *ring, struct comedi_subdevice *s)\n--\ndrivers/comedi/drivers/mite.c-739-\ndrivers/comedi/drivers/mite.c:740:\treturn mite_init_ring_descriptors(ring, s, n_links \u003c\u003c PAGE_SHIFT);\ndrivers/comedi/drivers/mite.c-741-}\n--\ndrivers/comedi/drivers/mite.h=73=void mite_release_channel(struct mite_channel *mite_chan);\ndrivers/comedi/drivers/mite.h-74-\ndrivers/comedi/drivers/mite.h:75:int mite_init_ring_descriptors(struct mite_ring *ring,\ndrivers/comedi/drivers/mite.h-76-\t\t\t struct comedi_subdevice *s, unsigned int nbytes);\n--\ndrivers/comedi/drivers/ni_65xx.c=559=static int ni_65xx_intr_insn_config(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/ni_65xx.c-608-\ndrivers/comedi/drivers/ni_65xx.c:609:static int ni_65xx_mite_init(struct pci_dev *pcidev)\ndrivers/comedi/drivers/ni_65xx.c-610-{\n--\ndrivers/comedi/drivers/ni_65xx.c=628=static int ni_65xx_auto_attach(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/ni_65xx.c-647-\ndrivers/comedi/drivers/ni_65xx.c:648:\tret = ni_65xx_mite_init(pcidev);\ndrivers/comedi/drivers/ni_65xx.c-649-\tif (ret)\n--\ndrivers/comedi/drivers/ni_670x.c=116=static int ni_670x_dio_insn_config(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/ni_670x.c-135-\ndrivers/comedi/drivers/ni_670x.c:136:static int ni_670x_mite_init(struct pci_dev *pcidev)\ndrivers/comedi/drivers/ni_670x.c-137-{\n--\ndrivers/comedi/drivers/ni_670x.c=155=static int ni_670x_auto_attach(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/ni_670x.c-179-\ndrivers/comedi/drivers/ni_670x.c:180:\tret = ni_670x_mite_init(pcidev);\ndrivers/comedi/drivers/ni_670x.c-181-\tif (ret)\n--\ndrivers/comedi/drivers/ni_labpc_pci.c=33=static const struct labpc_boardinfo labpc_pci_boards[] = {\n--\ndrivers/comedi/drivers/ni_labpc_pci.c-46-\ndrivers/comedi/drivers/ni_labpc_pci.c:47:static int labpc_pci_mite_init(struct pci_dev *pcidev)\ndrivers/comedi/drivers/ni_labpc_pci.c-48-{\n--\ndrivers/comedi/drivers/ni_labpc_pci.c=66=static int labpc_pci_auto_attach(struct comedi_device *dev,\n--\ndrivers/comedi/drivers/ni_labpc_pci.c-83-\ndrivers/comedi/drivers/ni_labpc_pci.c:84:\tret = labpc_pci_mite_init(pcidev);\ndrivers/comedi/drivers/ni_labpc_pci.c-85-\tif (ret)\n--\ndrivers/comedi/drivers/ni_mio_common.c=1969=static void ni_cmd_set_mite_transfer(struct mite_ring *ring,\n--\ndrivers/comedi/drivers/ni_mio_common.c-1994-\ndrivers/comedi/drivers/ni_mio_common.c:1995:\tmite_init_ring_descriptors(ring, sdev, nbytes);\ndrivers/comedi/drivers/ni_mio_common.c-1996-#else\n--\ndrivers/gpib/tnt4882/mite.c=48=struct mite_struct *mite_devices;\n--\ndrivers/gpib/tnt4882/mite.c-51-\ndrivers/gpib/tnt4882/mite.c:52:void mite_init(void)\ndrivers/gpib/tnt4882/mite.c-53-{\n--\ndrivers/gpib/tnt4882/mite.h=53=static inline unsigned int mite_device_id(struct mite_struct *mite)\n--\ndrivers/gpib/tnt4882/mite.h-57-\ndrivers/gpib/tnt4882/mite.h:58:void mite_init(void);\ndrivers/gpib/tnt4882/mite.h-59-void mite_cleanup(void);\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1389=static int __init tnt4882_init_module(void)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1466-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1467:\tmite_init();\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1468-\n"
} |
| 7/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 7281 output: 26 thoughts: 100 Thoughts: **GPIB Driver Module Initialization** Okay, so `mite_init` is apparently called within `tnt4882_init_module()` in `drivers/gpib/tnt4882/tnt4882_gpib.c`. Right, that makes sense - initialization is usually where you'd find a device's core setup. Let's dig into the `drivers/gpib/` directory and see what we can find. First, just a quick reminder... GPIB, right? General Purpose Interface Bus, also known as IEEE 488. Okay, so now I just need to check the Kconfig file for `drivers/gpib/tnt4882/` for all the configuration options to make sure I know how it's set up. |
| 8/2 | 2026/09/17 22:55 | tool | grepper |
0mArgs:{
"Expression": "config ",
"PathPrefix": "drivers/gpib"
}Results: {
"Output": "drivers/gpib/Kconfig-1-# SPDX-License-Identifier: GPL-2.0\ndrivers/gpib/Kconfig:2:menuconfig GPIB\ndrivers/gpib/Kconfig-3-\ttristate \"GPIB drivers\"\n--\ndrivers/gpib/Kconfig=13=if GPIB\ndrivers/gpib/Kconfig-14-\ndrivers/gpib/Kconfig:15:config GPIB_COMMON\ndrivers/gpib/Kconfig-16-\ttristate \"GPIB core\"\n--\ndrivers/gpib/Kconfig-24-\ndrivers/gpib/Kconfig:25:config GPIB_AGILENT_82350B\ndrivers/gpib/Kconfig-26-\ttristate \"Agilent 8235xx PCI(e) adapters\"\n--\ndrivers/gpib/Kconfig-38-\ndrivers/gpib/Kconfig:39:config GPIB_AGILENT_82357A\ndrivers/gpib/Kconfig-40-\ttristate \"Agilent 82357a/b USB dongles\"\n--\ndrivers/gpib/Kconfig-48-\ndrivers/gpib/Kconfig:49:config GPIB_CEC_PCI\ndrivers/gpib/Kconfig-50-\ttristate \"CEC PCI board\"\n--\ndrivers/gpib/Kconfig-61-\ndrivers/gpib/Kconfig:62:config GPIB_NI_PCI_ISA\ndrivers/gpib/Kconfig-63-\ttristate \"NI PCI/ISA compatible boards\"\n--\ndrivers/gpib/Kconfig-86-\ndrivers/gpib/Kconfig:87:config GPIB_CB7210\ndrivers/gpib/Kconfig-88- tristate \"Measurement Computing compatible boards\"\n--\ndrivers/gpib/Kconfig-101-\ndrivers/gpib/Kconfig:102:config GPIB_NI_USB\ndrivers/gpib/Kconfig-103-\ttristate \"NI USB dongles\"\n--\ndrivers/gpib/Kconfig-119-\ndrivers/gpib/Kconfig:120:config GPIB_FLUKE\ndrivers/gpib/Kconfig-121- tristate \"Fluke\"\n--\ndrivers/gpib/Kconfig-131-\ndrivers/gpib/Kconfig:132:config GPIB_FMH\ndrivers/gpib/Kconfig-133- tristate \"FMH FPGA based devices\"\n--\ndrivers/gpib/Kconfig-143-\ndrivers/gpib/Kconfig:144:config GPIB_GPIO\ndrivers/gpib/Kconfig-145- tristate \"RPi GPIO bitbang\"\n--\ndrivers/gpib/Kconfig-153-\ndrivers/gpib/Kconfig:154:config GPIB_HP82335\ndrivers/gpib/Kconfig-155- tristate \"HP82335/HP27209\"\n--\ndrivers/gpib/Kconfig-165-\ndrivers/gpib/Kconfig:166:config GPIB_HP82341\ndrivers/gpib/Kconfig-167- tristate \"HP82341x\"\n--\ndrivers/gpib/Kconfig-176-\ndrivers/gpib/Kconfig:177:config GPIB_INES\ndrivers/gpib/Kconfig-178- tristate \"INES\"\n--\ndrivers/gpib/Kconfig-200-\ndrivers/gpib/Kconfig:201:config GPIB_PCMCIA\ndrivers/gpib/Kconfig-202- def_bool y\n--\ndrivers/gpib/Kconfig-207-\ndrivers/gpib/Kconfig:208:config GPIB_LPVO\ndrivers/gpib/Kconfig-209- tristate \"LPVO DIY USB GPIB\"\n--\ndrivers/gpib/Kconfig-217-\ndrivers/gpib/Kconfig:218:config GPIB_PC2\ndrivers/gpib/Kconfig-219- tristate \"PC2 PC2a\"\n--\ndrivers/gpib/Kconfig-237-\ndrivers/gpib/Kconfig:238:config GPIB_TMS9914\ndrivers/gpib/Kconfig-239- tristate\n--\ndrivers/gpib/Kconfig-246-\ndrivers/gpib/Kconfig:247:config GPIB_NEC7210\ndrivers/gpib/Kconfig-248- tristate\n--\ndrivers/gpib/agilent_82350b/agilent_82350b.c=496=static int init_82350a_hardware(struct gpib_board *board,\ndrivers/gpib/agilent_82350b/agilent_82350b.c:497:\t\t\t\tconst struct gpib_board_config *config)\ndrivers/gpib/agilent_82350b/agilent_82350b.c-498-{\n--\ndrivers/gpib/agilent_82350b/agilent_82350b.c=591=static int agilent_82350b_generic_attach(struct gpib_board *board,\ndrivers/gpib/agilent_82350b/agilent_82350b.c:592:\t\t\t\t\t const struct gpib_board_config *config,\ndrivers/gpib/agilent_82350b/agilent_82350b.c-593-\t\t\t\t\t int use_fifos)\n--\ndrivers/gpib/agilent_82350b/agilent_82350b.c=735=static int agilent_82350b_unaccel_attach(struct gpib_board *board,\ndrivers/gpib/agilent_82350b/agilent_82350b.c:736:\t\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/agilent_82350b/agilent_82350b.c-737-{\n--\ndrivers/gpib/agilent_82350b/agilent_82350b.c=741=static int agilent_82350b_accel_attach(struct gpib_board *board,\ndrivers/gpib/agilent_82350b/agilent_82350b.c:742:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/agilent_82350b/agilent_82350b.c-743-{\n--\ndrivers/gpib/agilent_82357a/agilent_82357a.c=1293=static inline int agilent_82357a_device_match(struct usb_interface *interface,\ndrivers/gpib/agilent_82357a/agilent_82357a.c:1294:\t\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/agilent_82357a/agilent_82357a.c-1295-{\n--\ndrivers/gpib/agilent_82357a/agilent_82357a.c-1306-\ndrivers/gpib/agilent_82357a/agilent_82357a.c:1307:static int agilent_82357a_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/agilent_82357a/agilent_82357a.c-1308-{\n--\ndrivers/gpib/cb7210/cb7210.c=531=static irqreturn_t cb7210_interrupt(int irq, void *arg)\n--\ndrivers/gpib/cb7210/cb7210.c-535-\ndrivers/gpib/cb7210/cb7210.c:536:static int cb_pci_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/cb7210/cb7210.c:537:static int cb_isa_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/cb7210/cb7210.c-538-\n--\ndrivers/gpib/cb7210/cb7210.c=894=static int cb7210_init(struct cb7210_priv *cb_priv, struct gpib_board *board)\n--\ndrivers/gpib/cb7210/cb7210.c-930-\ndrivers/gpib/cb7210/cb7210.c:931:static int cb_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/cb7210/cb7210.c-932-{\n--\ndrivers/gpib/cb7210/cb7210.c=1013=static void cb_pci_detach(struct gpib_board *board)\n--\ndrivers/gpib/cb7210/cb7210.c-1035-\ndrivers/gpib/cb7210/cb7210.c:1036:static int cb_isa_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/cb7210/cb7210.c-1037-{\n--\ndrivers/gpib/cb7210/cb7210.c=1137=static void cb_gpib_release(struct pcmcia_device *link);\ndrivers/gpib/cb7210/cb7210.c:1138:static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/cb7210/cb7210.c-1139-static void cb_pcmcia_detach(struct gpib_board *board);\n--\ndrivers/gpib/cb7210/cb7210.c=1256=static int cb_gpib_config(struct pcmcia_device *link)\n--\ndrivers/gpib/cb7210/cb7210.c-1278-\treturn 0;\ndrivers/gpib/cb7210/cb7210.c:1279:} /* gpib_config */\ndrivers/gpib/cb7210/cb7210.c-1280-\n--\ndrivers/gpib/cb7210/cb7210.c=1384=static struct gpib_interface cb_pcmcia_accel_interface = {\n--\ndrivers/gpib/cb7210/cb7210.c-1411-\ndrivers/gpib/cb7210/cb7210.c:1412:static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/cb7210/cb7210.c-1413-{\n--\ndrivers/gpib/cec/cec_gpib.c=26=static irqreturn_t cec_interrupt(int irq, void *arg)\n--\ndrivers/gpib/cec/cec_gpib.c-42-\ndrivers/gpib/cec/cec_gpib.c:43:static int cec_pci_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/cec/cec_gpib.c-44-\n--\ndrivers/gpib/cec/cec_gpib.c=257=static void cec_init(struct cec_priv *cec_priv, const struct gpib_board *board)\n--\ndrivers/gpib/cec/cec_gpib.c-268-\ndrivers/gpib/cec/cec_gpib.c:269:static int cec_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/cec/cec_gpib.c-270-{\n--\ndrivers/gpib/common/gpib_os.c=53=static int request_service2_ioctl(struct gpib_board *board, unsigned long arg);\ndrivers/gpib/common/gpib_os.c:54:static int iobase_ioctl(struct gpib_board_config *config, unsigned long arg);\ndrivers/gpib/common/gpib_os.c:55:static int irq_ioctl(struct gpib_board_config *config, unsigned long arg);\ndrivers/gpib/common/gpib_os.c:56:static int dma_ioctl(struct gpib_board_config *config, unsigned long arg);\ndrivers/gpib/common/gpib_os.c-57-static int autospoll_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv,\n--\ndrivers/gpib/common/gpib_os.c=68=static int interface_clear_ioctl(struct gpib_board *board, unsigned long arg);\ndrivers/gpib/common/gpib_os.c:69:static int select_pci_ioctl(struct gpib_board_config *config, unsigned long arg);\ndrivers/gpib/common/gpib_os.c:70:static int select_device_path_ioctl(struct gpib_board_config *config, unsigned long arg);\ndrivers/gpib/common/gpib_os.c-71-static int event_ioctl(struct gpib_board *board, unsigned long arg);\n--\ndrivers/gpib/common/gpib_os.c=1586=static int request_service2_ioctl(struct gpib_board *board, unsigned long arg)\n--\ndrivers/gpib/common/gpib_os.c-1599-\ndrivers/gpib/common/gpib_os.c:1600:static int iobase_ioctl(struct gpib_board_config *config, unsigned long arg)\ndrivers/gpib/common/gpib_os.c-1601-{\n--\ndrivers/gpib/common/gpib_os.c-1618-\ndrivers/gpib/common/gpib_os.c:1619:static int irq_ioctl(struct gpib_board_config *config, unsigned long arg)\ndrivers/gpib/common/gpib_os.c-1620-{\n--\ndrivers/gpib/common/gpib_os.c-1635-\ndrivers/gpib/common/gpib_os.c:1636:static int dma_ioctl(struct gpib_board_config *config, unsigned long arg)\ndrivers/gpib/common/gpib_os.c-1637-{\n--\ndrivers/gpib/common/gpib_os.c=1839=static int interface_clear_ioctl(struct gpib_board *board, unsigned long arg)\n--\ndrivers/gpib/common/gpib_os.c-1850-\ndrivers/gpib/common/gpib_os.c:1851:static int select_pci_ioctl(struct gpib_board_config *config, unsigned long arg)\ndrivers/gpib/common/gpib_os.c-1852-{\n--\ndrivers/gpib/common/gpib_os.c-1868-\ndrivers/gpib/common/gpib_os.c:1869:static int select_device_path_ioctl(struct gpib_board_config *config, unsigned long arg)\ndrivers/gpib/common/gpib_os.c-1870-{\n--\ndrivers/gpib/common/gpib_os.c=2125=EXPORT_SYMBOL(gpib_unregister_driver);\ndrivers/gpib/common/gpib_os.c-2126-\ndrivers/gpib/common/gpib_os.c:2127:static void init_gpib_board_config(struct gpib_board_config *config)\ndrivers/gpib/common/gpib_os.c-2128-{\n--\ndrivers/gpib/common/gpib_os.c=2271=EXPORT_SYMBOL(gpib_match_device_path);\ndrivers/gpib/common/gpib_os.c-2272-\ndrivers/gpib/common/gpib_os.c:2273:struct pci_dev *gpib_pci_get_device(const struct gpib_board_config *config, unsigned int vendor_id,\ndrivers/gpib/common/gpib_os.c-2274-\t\t\t\t unsigned int device_id, struct pci_dev *from)\n--\ndrivers/gpib/common/gpib_os.c=2290=EXPORT_SYMBOL(gpib_pci_get_device);\ndrivers/gpib/common/gpib_os.c-2291-\ndrivers/gpib/common/gpib_os.c:2292:struct pci_dev *gpib_pci_get_subsys(const struct gpib_board_config *config, unsigned int vendor_id,\ndrivers/gpib/common/gpib_os.c-2293-\t\t\t\t unsigned int device_id, unsigned int ss_vendor,\n--\ndrivers/gpib/eastwood/fluke_gpib.c=26=static int fluke_attach_holdoff_all(struct gpib_board *board,\ndrivers/gpib/eastwood/fluke_gpib.c:27:\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/eastwood/fluke_gpib.c-28-static int fluke_attach_holdoff_end(struct gpib_board *board,\ndrivers/gpib/eastwood/fluke_gpib.c:29:\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/eastwood/fluke_gpib.c-30-static void fluke_detach(struct gpib_board *board);\n--\ndrivers/gpib/eastwood/fluke_gpib.c=899=static int fluke_config_dma(struct gpib_board *board, int output)\n--\ndrivers/gpib/eastwood/fluke_gpib.c-901-\tstruct fluke_priv *e_priv = board-\u003eprivate_data;\ndrivers/gpib/eastwood/fluke_gpib.c:902:\tstruct dma_slave_config config;\ndrivers/gpib/eastwood/fluke_gpib.c-903-\n--\ndrivers/gpib/eastwood/fluke_gpib.c=955=static bool gpib_dma_channel_filter(struct dma_chan *chan, void *filter_param)\n--\ndrivers/gpib/eastwood/fluke_gpib.c-960-\ndrivers/gpib/eastwood/fluke_gpib.c:961:static int fluke_attach_impl(struct gpib_board *board, const struct gpib_board_config *config,\ndrivers/gpib/eastwood/fluke_gpib.c-962-\t\t\t unsigned int handshake_mode)\n--\ndrivers/gpib/eastwood/fluke_gpib.c-1066-\ndrivers/gpib/eastwood/fluke_gpib.c:1067:int fluke_attach_holdoff_all(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/eastwood/fluke_gpib.c-1068-{\n--\ndrivers/gpib/eastwood/fluke_gpib.c-1071-\ndrivers/gpib/eastwood/fluke_gpib.c:1072:int fluke_attach_holdoff_end(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/eastwood/fluke_gpib.c-1073-{\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=35=static int fmh_gpib_attach_holdoff_all(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:36:\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/fmh_gpib/fmh_gpib.c-37-static int fmh_gpib_attach_holdoff_end(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:38:\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/fmh_gpib/fmh_gpib.c-39-static void fmh_gpib_detach(struct gpib_board *board);\ndrivers/gpib/fmh_gpib/fmh_gpib.c=40=static int fmh_gpib_pci_attach_holdoff_all(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:41:\t\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/fmh_gpib/fmh_gpib.c-42-static int fmh_gpib_pci_attach_holdoff_end(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:43:\t\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/fmh_gpib/fmh_gpib.c-44-static void fmh_gpib_pci_detach(struct gpib_board *board);\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=167=static void fmh_gpib_local_parallel_poll_mode(struct gpib_board *board, int local)\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-174-\t\t/*\ndrivers/gpib/fmh_gpib/fmh_gpib.c:175:\t\t * For fmh_gpib_core, remote parallel poll config mode is unaffected by the\ndrivers/gpib/fmh_gpib/fmh_gpib.c-176-\t\t * state of the disable bit of the parallel poll register (unlike the tnt4882).\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=1299=static int fmh_gpib_config_dma(struct gpib_board *board, int output)\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1301-\tstruct fmh_priv *e_priv = board-\u003eprivate_data;\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1302:\tstruct dma_slave_config config;\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1303-\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=1358=static int fmh_gpib_device_match(struct device *dev, const void *data)\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1359-{\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1360:\tconst struct gpib_board_config *config = data;\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1361-\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1375-\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1376:static int fmh_gpib_attach_impl(struct gpib_board *board, const struct gpib_board_config *config,\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1377-\t\t\t\tunsigned int handshake_mode, int acquire_dma)\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1477-\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1478:int fmh_gpib_attach_holdoff_all(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1479-{\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1482-\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1483:int fmh_gpib_attach_holdoff_end(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1484-{\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=1526=static int fmh_gpib_pci_attach_impl(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1527:\t\t\t\t const struct gpib_board_config *config,\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1528-\t\t\t\t unsigned int handshake_mode)\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=1600=int fmh_gpib_pci_attach_holdoff_all(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1601:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1602-{\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=1606=int fmh_gpib_pci_attach_holdoff_end(struct gpib_board *board,\ndrivers/gpib/fmh_gpib/fmh_gpib.c:1607:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/fmh_gpib/fmh_gpib.c-1608-{\n--\ndrivers/gpib/gpio/gpib_bitbang.c=1176=static void bb_detach(struct gpib_board *board)\n--\ndrivers/gpib/gpio/gpib_bitbang.c-1203-\ndrivers/gpib/gpio/gpib_bitbang.c:1204:static int bb_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/gpio/gpib_bitbang.c-1205-{\n--\ndrivers/gpib/hp_82335/hp82335.c=26=MODULE_DESCRIPTION(\"GPIB driver for HP 82335 interface cards\");\ndrivers/gpib/hp_82335/hp82335.c-27-\ndrivers/gpib/hp_82335/hp82335.c:28:static int hp82335_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/hp_82335/hp82335.c-29-static void hp82335_detach(struct gpib_board *board);\n--\ndrivers/gpib/hp_82335/hp82335.c=240=static void hp82335_clear_interrupt(struct hp82335_priv *hp_priv)\n--\ndrivers/gpib/hp_82335/hp82335.c-246-\ndrivers/gpib/hp_82335/hp82335.c:247:static int hp82335_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/hp_82335/hp82335.c-248-{\n--\ndrivers/gpib/hp_82341/hp_82341.c=173=static int hp_82341_accel_write(struct gpib_board *board, u8 *buffer, size_t length,\n--\ndrivers/gpib/hp_82341/hp_82341.c-247-\ndrivers/gpib/hp_82341/hp_82341.c:248:static int hp_82341_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/hp_82341/hp_82341.c-249-\n--\ndrivers/gpib/hp_82341/hp_82341.c=617=static int hp_82341_load_firmware(struct hp_82341_priv *hp_priv,\ndrivers/gpib/hp_82341/hp_82341.c:618:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/hp_82341/hp_82341.c-619-{\n--\ndrivers/gpib/hp_82341/hp_82341.c=671=static int clear_xilinx(struct hp_82341_priv *hp_priv)\n--\ndrivers/gpib/hp_82341/hp_82341.c-684-\ndrivers/gpib/hp_82341/hp_82341.c:685:static int hp_82341_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/hp_82341/hp_82341.c-686-{\n--\ndrivers/gpib/include/gpibP.h=23=void gpib_unregister_driver(struct gpib_interface *interface);\ndrivers/gpib/include/gpibP.h:24:struct pci_dev *gpib_pci_get_device(const struct gpib_board_config *config, unsigned int vendor_id,\ndrivers/gpib/include/gpibP.h-25-\t\t\t\t unsigned int device_id, struct pci_dev *from);\ndrivers/gpib/include/gpibP.h:26:struct pci_dev *gpib_pci_get_subsys(const struct gpib_board_config *config, unsigned int vendor_id,\ndrivers/gpib/include/gpibP.h-27-\t\t\t\t unsigned int device_id, unsigned int ss_vendor,\n--\ndrivers/gpib/include/gpib_types.h=20=struct gpib_board;\ndrivers/gpib/include/gpib_types.h-21-\ndrivers/gpib/include/gpib_types.h:22:/* config parameters that are only used by driver attach functions */\ndrivers/gpib/include/gpib_types.h:23:struct gpib_board_config {\ndrivers/gpib/include/gpib_types.h-24-\t/* firmware blob */\n--\ndrivers/gpib/include/gpib_types.h=56=struct gpib_interface {\n--\ndrivers/gpib/include/gpib_types.h-59-\t/* attach() initializes board and allocates resources */\ndrivers/gpib/include/gpib_types.h:60:\tint (*attach)(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/include/gpib_types.h-61-\t/* detach() shuts down board and frees resources */\n--\ndrivers/gpib/include/gpib_types.h=241=struct gpib_board {\n--\ndrivers/gpib/include/gpib_types.h-318-\tatomic_t stuck_srq;\ndrivers/gpib/include/gpib_types.h:319:\tstruct gpib_board_config config;\ndrivers/gpib/include/gpib_types.h-320-\t/* Flag that indicates whether board is system controller of the bus */\n--\ndrivers/gpib/ines/ines_gpib.c=317=static irqreturn_t ines_interrupt(struct gpib_board *board)\n--\ndrivers/gpib/ines/ines_gpib.c-351-\ndrivers/gpib/ines/ines_gpib.c:352:static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c:353:static int ines_pci_xl_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c:354:static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c:355:static int ines_isa_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c-356-\n--\ndrivers/gpib/ines/ines_gpib.c=764=static void ines_online(struct ines_priv *ines_priv, const struct gpib_board *board, int use_accel)\n--\ndrivers/gpib/ines/ines_gpib.c-797-\ndrivers/gpib/ines/ines_gpib.c:798:static int ines_common_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-799-{\n--\ndrivers/gpib/ines/ines_gpib.c-925-\ndrivers/gpib/ines/ines_gpib.c:926:static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-927-{\n--\ndrivers/gpib/ines/ines_gpib.c-940-\ndrivers/gpib/ines/ines_gpib.c:941:static int ines_pci_xl_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-942-{\n--\ndrivers/gpib/ines/ines_gpib.c-958-\ndrivers/gpib/ines/ines_gpib.c:959:static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-960-{\n--\ndrivers/gpib/ines/ines_gpib.c=974=static const int ines_isa_iosize = 0x20;\ndrivers/gpib/ines/ines_gpib.c-975-\ndrivers/gpib/ines/ines_gpib.c:976:static int ines_isa_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-977-{\n--\ndrivers/gpib/ines/ines_gpib.c=1092=static void ines_gpib_release(struct pcmcia_device *link);\ndrivers/gpib/ines/ines_gpib.c:1093:static int ines_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c-1094-static int ines_pcmcia_accel_attach(struct gpib_board *board,\ndrivers/gpib/ines/ines_gpib.c:1095:\t\t\t\t const struct gpib_board_config *config);\ndrivers/gpib/ines/ines_gpib.c-1096-static void ines_pcmcia_detach(struct gpib_board *board);\n--\ndrivers/gpib/ines/ines_gpib.c=1200=static int ines_gpib_config(struct pcmcia_device *link)\n--\ndrivers/gpib/ines/ines_gpib.c-1246-\treturn 0;\ndrivers/gpib/ines/ines_gpib.c:1247:} /* gpib_config */\ndrivers/gpib/ines/ines_gpib.c-1248-\n--\ndrivers/gpib/ines/ines_gpib.c=1397=static int ines_common_pcmcia_attach(struct gpib_board *board)\n--\ndrivers/gpib/ines/ines_gpib.c-1435-\ndrivers/gpib/ines/ines_gpib.c:1436:static int ines_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-1437-{\n--\ndrivers/gpib/ines/ines_gpib.c=1451=static int ines_pcmcia_accel_attach(struct gpib_board *board,\ndrivers/gpib/ines/ines_gpib.c:1452:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/ines/ines_gpib.c-1453-{\n--\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c=334=static void set_timeout(struct gpib_board *board)\n--\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-372- * @board: the gpib_board_struct data area for this gpib interface\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c:373: * @config: firmware data, if any (from gpib_config -I \u003cfile\u003e)\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-374- *\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-375- * The channel name is ttyUSBn, with n=0 by default. Other values for n\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c:376: * passed with gpib_config -b \u003cn\u003e.\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-377- *\n--\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-381-\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c:382:static int usb_gpib_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c-383-{\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=2219=static inline int ni_usb_device_match(struct usb_interface *interface,\ndrivers/gpib/ni_usb/ni_usb_gpib.c:2220:\t\t\t\t const struct gpib_board_config *config)\ndrivers/gpib/ni_usb/ni_usb_gpib.c-2221-{\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-2226-\ndrivers/gpib/ni_usb/ni_usb_gpib.c:2227:static int ni_usb_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/ni_usb/ni_usb_gpib.c-2228-{\n--\ndrivers/gpib/pc2/pc2_gpib.c=248=static void free_private(struct gpib_board *board)\n--\ndrivers/gpib/pc2/pc2_gpib.c-253-\ndrivers/gpib/pc2/pc2_gpib.c:254:static int pc2_generic_attach(struct gpib_board *board, const struct gpib_board_config *config,\ndrivers/gpib/pc2/pc2_gpib.c-255-\t\t\t enum nec7210_chipset chipset)\n--\ndrivers/gpib/pc2/pc2_gpib.c-299-\ndrivers/gpib/pc2/pc2_gpib.c:300:static int pc2_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/pc2/pc2_gpib.c-301-{\n--\ndrivers/gpib/pc2/pc2_gpib.c=344=static void pc2_detach(struct gpib_board *board)\n--\ndrivers/gpib/pc2/pc2_gpib.c-370-\ndrivers/gpib/pc2/pc2_gpib.c:371:static int pc2a_common_attach(struct gpib_board *board, const struct gpib_board_config *config,\ndrivers/gpib/pc2/pc2_gpib.c-372-\t\t\t unsigned int num_registers, enum nec7210_chipset chipset)\n--\ndrivers/gpib/pc2/pc2_gpib.c-464-\ndrivers/gpib/pc2/pc2_gpib.c:465:static int pc2a_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/pc2/pc2_gpib.c-466-{\n--\ndrivers/gpib/pc2/pc2_gpib.c-469-\ndrivers/gpib/pc2/pc2_gpib.c:470:static int pc2a_cb7210_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/pc2/pc2_gpib.c-471-{\n--\ndrivers/gpib/pc2/pc2_gpib.c-474-\ndrivers/gpib/pc2/pc2_gpib.c:475:static int pc2_2a_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/pc2/pc2_gpib.c-476-{\n--\ndrivers/gpib/tms9914/tms9914.c=240=void tms9914_parallel_poll_configure(struct gpib_board *board,\n--\ndrivers/gpib/tms9914/tms9914.c-242-{\ndrivers/gpib/tms9914/tms9914.c:243:\tpriv-\u003eppoll_enable = (config \u0026 PPC_DISABLE) == 0;\ndrivers/gpib/tms9914/tms9914.c:244:\tpriv-\u003eppoll_line = (config \u0026 PPC_DIO_MASK) + 1;\ndrivers/gpib/tms9914/tms9914.c:245:\tpriv-\u003eppoll_sense = (config \u0026 PPC_SENSE) != 0;\ndrivers/gpib/tms9914/tms9914.c-246-\tset_ppoll_reg(priv, priv-\u003eppoll_enable, priv-\u003eppoll_line, priv-\u003eppoll_sense, board-\u003eist);\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=860=static void tnt4882_init(struct tnt4882_priv *tnt_priv, const struct gpib_board *board)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-907-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:908:static int ni_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-909-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1011=static int ni_isapnp_find(struct pnp_dev **dev)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1029-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1030:static int ni_isa_attach_common(struct gpib_board *board, const struct gpib_board_config *config,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1031-\t\t\t\tenum nec7210_chipset chipset)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1086-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1087:static int ni_tnt_isa_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1088-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1091-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1092:static int ni_nat4882_isa_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1093-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1096-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1097:static int ni_nec_isa_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1098-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1626=static int ni_gpib_config(struct pcmcia_device *link)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1644-\treturn 0;\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1645:} /* ni_gpib_config */\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1646-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1711=static const int pcmcia_gpib_iosize = 32;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1712-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1713:static int ni_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1714-{\n"
} |
| 9/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 19715 output: 34 thoughts: 35 Thoughts: Okay, here's my interpretation of that thought process, tailored for an expert audience, and written in the first person: **Investigating the TNT4882 Driver Configuration** Alright, I need to figure out what config option specifically enables the `tnt4882` driver within the GPIB subsystem. Based on my experience, a good starting point is almost always the `Kconfig` file, which should outline the dependency tree for the build system. I'm going to jump straight into `drivers/gpib/Kconfig`. Specifically, I want to zero in on lines roughly between 62 and 85, as that's often where you'll find related device entries. That should give me the configuration symbol and any dependencies it might have. This is usually where you'll find the conditional logic that determines if `tnt4882` gets compiled, either as a module or built-in, and this is where I expect to find the dependencies to its selection. Hopefully, this section will quickly clarify the relevant configuration variable, and then I can quickly check the rest of the configuration. Let's get to it. |
| 10/2 | 2026/09/17 22:55 | tool | read-file |
0mArgs:{
"File": "drivers/gpib/Kconfig",
"FirstLine": 60,
"LineCount": 35
}Results: {
"Contents": " 60:\t\t called cec_gpib.\n 61:\t\n 62:\tconfig GPIB_NI_PCI_ISA\n 63:\t\ttristate \"NI PCI/ISA compatible boards\"\n 64:\t\tdepends on ISA_BUS || PCI || PCMCIA\n 65:\t\tdepends on HAS_IOPORT\n 66:\t\tdepends on PCMCIA || !PCMCIA\n 67:\t\tdepends on HAS_IOPORT_MAP\n 68:\t\tselect GPIB_COMMON\n 69:\t\tselect GPIB_NEC7210\n 70:\t\thelp\n 71:\t\t Enable support for National Instruments boards based\n 72:\t\t on TNT4882 chips:\n 73:\t\t AT-GPIB (with NAT4882 chip)\n 74:\t\t AT-GPIB (with NEC7210 chip)\n 75:\t\t AT-GPIB/TNT\n 76:\t\t PCI-GPIB\n 77:\t\t PCIe-GPIB\n 78:\t\t PCI-GPIB+\n 79:\t\t PCM-GPIB\n 80:\t\t PXI-GPIB\n 81:\t\t PCMCIA-GPIB\n 82:\t\t and Capital Equipment Corporation CEC-488 board.\n 83:\t\n 84:\t\t To compile this driver as a module, choose M here: the module will be\n 85:\t\t called tnt4882.\n 86:\t\n 87:\tconfig GPIB_CB7210\n 88:\t tristate \"Measurement Computing compatible boards\"\n 89:\t\tdepends on HAS_IOPORT\n 90:\t\tdepends on ISA_BUS || PCI || PCMCIA\n 91:\t\tdepends on PCMCIA || !PCMCIA\n 92:\t select GPIB_COMMON\n 93:\t\tselect GPIB_NEC7210\n 94:\t help\n"
} |
| 11/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 20517 output: 30 thoughts: 55 Thoughts: Here's my summary, as though I'm thinking through this process: **GPIB Driver Compilation Path** Okay, so `CONFIG_GPIB_NI_PCI_ISA` is set, which means we're going to include the `drivers/gpib/tnt4882` code. This is a common setup, but I need to make sure everything's linked correctly. The first thing I'll check is the overall structure in `drivers/gpib/Makefile`. That's the top-level makefile for the GPIB driver subsystem. It should dictate how the various drivers are integrated. Then, I'll need to drill down into the specific `drivers/gpib/tnt4882/Makefile`. That should have the compilation rules and any specific dependencies for the `tnt4882` driver itself, like header file locations and object file creation. I need to confirm the build system is correctly processing the PCI/ISA specific configuration. We need to make sure this build chain works as expected. Let's see what we've got. |
| 12/2 | 2026/09/17 22:55 | tool | grepper |
0mArgs:{
"Expression": "tnt4882",
"PathPrefix": "drivers/gpib"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 870 lines.\nUse more precise expression if possible.\n\ndrivers/gpib/Kconfig=62=config GPIB_NI_PCI_ISA\n--\ndrivers/gpib/Kconfig-84-\t To compile this driver as a module, choose M here: the module will be\ndrivers/gpib/Kconfig:85:\t called tnt4882.\ndrivers/gpib/Kconfig-86-\n--\ndrivers/gpib/Makefile=19=obj-$(CONFIG_GPIB_TMS9914) += tms9914/\ndrivers/gpib/Makefile:20:obj-$(CONFIG_GPIB_NI_PCI_ISA) += tnt4882/\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c=167=static void fmh_gpib_local_parallel_poll_mode(struct gpib_board *board, int local)\n--\ndrivers/gpib/fmh_gpib/fmh_gpib.c-175-\t\t * For fmh_gpib_core, remote parallel poll config mode is unaffected by the\ndrivers/gpib/fmh_gpib/fmh_gpib.c:176:\t\t * state of the disable bit of the parallel poll register (unlike the tnt4882).\ndrivers/gpib/fmh_gpib/fmh_gpib.c-177-\t\t * So, we don't need to worry about that.\n--\ndrivers/gpib/include/tnt4882_registers.h-9-\ndrivers/gpib/include/tnt4882_registers.h:10:// tnt4882 register offsets\ndrivers/gpib/include/tnt4882_registers.h-11-enum {\n--\ndrivers/gpib/include/tnt4882_registers.h=63=enum cfg_bits {\ndrivers/gpib/include/tnt4882_registers.h-64-\tTNT_COMMAND = 0x80,\t/* bytes are command bytes instead of data bytes\ndrivers/gpib/include/tnt4882_registers.h:65:\t\t\t\t * (tnt4882 one-chip and newer only?)\ndrivers/gpib/include/tnt4882_registers.h-66-\t\t\t\t */\n--\ndrivers/gpib/include/tnt4882_registers.h=148=enum sts2_bits {\n--\ndrivers/gpib/include/tnt4882_registers.h-155-// Auxiliary commands\ndrivers/gpib/include/tnt4882_registers.h:156:enum tnt4882_aux_cmds {\ndrivers/gpib/include/tnt4882_registers.h-157-\tAUX_9914 = 0x15,\t// switch to 9914 mode\n--\ndrivers/gpib/include/tnt4882_registers.h-165-\ndrivers/gpib/include/tnt4882_registers.h:166:enum tnt4882_aux_regs {\ndrivers/gpib/include/tnt4882_registers.h-167-\tAUXRG = 0x40,\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-17-#include \"nec7210.h\"\ndrivers/gpib/ni_usb/ni_usb_gpib.c:18:#include \"tnt4882_registers.h\"\ndrivers/gpib/ni_usb/ni_usb_gpib.c-19-\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=596=static int ni_usb_read(struct gpib_board *board, u8 *buffer, size_t length,\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-633-\treg.device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:634:\treg.address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-635-\treg.value = AUX_HLDI;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1066=static int ni_usb_request_system_control(struct gpib_board *board, int request_control)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1083-\t\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1084:\t\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1085-\t\twrites[i].value = AUX_CIFC;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1088-\t\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1089:\t\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1090-\t\twrites[i].value = AUX_CREN;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1092-\t\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1093:\t\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1094-\t\twrites[i].value = AUX_CIFC;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1096-\t\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1097:\t\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1098-\t\twrites[i].value = AUX_DSC;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1166=static void ni_usb_remote_enable(struct gpib_board *board, int enable)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1177-\treg.device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1178:\treg.address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1179-\tif (enable)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1272=static int ni_usb_primary_address(struct gpib_board *board, unsigned int address)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1284-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1285:\twrites[i].address = nec7210_to_tnt4882_offset(ADR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1286-\twrites[i].value = address;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1301=static int ni_usb_write_sad(struct ni_usb_register *writes, int address, int enable)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1315-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1316:\twrites[i].address = nec7210_to_tnt4882_offset(ADR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1317-\twrites[i].value = adr_bits;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1319-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1320:\twrites[i].address = nec7210_to_tnt4882_offset(ADMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1321-\twrites[i].value = admr_bits;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1407=static void ni_usb_parallel_poll_configure(struct gpib_board *board, u8 config)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1419-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1420:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1421-\twrites[i].value = PPR | config;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1432=static void ni_usb_parallel_poll_response(struct gpib_board *board, int ist)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1444-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1445:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1446-\tif (ist)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1460=static void ni_usb_serial_poll_response(struct gpib_board *board, u8 status)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1472-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1473:\twrites[i].address = nec7210_to_tnt4882_offset(SPMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1474-\twrites[i].value = status;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1490=static void ni_usb_return_to_local(struct gpib_board *board)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1502-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1503:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1504-\twrites[i].value = AUX_RTL;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1597=static int ni_usb_setup_t1_delay(struct ni_usb_register *reg, unsigned int nano_sec,\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1604-\treg[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1605:\treg[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1606-\tif (nano_sec \u003c= 1100)\t{\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1613-\treg[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1614:\treg[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1615-\tif (nano_sec \u003c= 500)\t{\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=1680=static int ni_usb_setup_init(struct gpib_board *board, struct ni_usb_register *writes)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1695-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1696:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1697-\tmask = AUXRA | HR_HLDA;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1710-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1711:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1712-\twrites[i].value = AUX_CR;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1718-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1719:\twrites[i].address = nec7210_to_tnt4882_offset(IMR1);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1720-\twrites[i].value = 0x0;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1722-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1723:\twrites[i].address = nec7210_to_tnt4882_offset(IMR2);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1724-\twrites[i].value = 0x0;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1730-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1731:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1732-\twrites[i].value = AUX_HLDI;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1737-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1738:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1739-\twrites[i].value = AUXRG | NTNL_BIT;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1749-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1750:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1751-\twrites[i].value = AUX_CIFC;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1753-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1754:\twrites[i].address = nec7210_to_tnt4882_offset(ADR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1755-\twrites[i].value = board-\u003epad;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1772-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1773:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1774-\twrites[i].value = AUX_PON;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1776-\twrites[i].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:1777:\twrites[i].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-1778-\twrites[i].value = AUX_CPPF;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c=2338=static int ni_usb_shutdown_hardware(struct ni_usb_priv *ni_priv)\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.c-2346-\twrites[0].device = NIUSB_SUBDEV_TNT4882;\ndrivers/gpib/ni_usb/ni_usb_gpib.c:2347:\twrites[0].address = nec7210_to_tnt4882_offset(AUXMR);\ndrivers/gpib/ni_usb/ni_usb_gpib.c-2348-\twrites[0].value = AUX_CR;\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.h=162=static const unsigned int ni_usb_ibsta_monitor_mask =\n--\ndrivers/gpib/ni_usb/ni_usb_gpib.h-164-\ndrivers/gpib/ni_usb/ni_usb_gpib.h:165:static inline int nec7210_to_tnt4882_offset(int offset)\ndrivers/gpib/ni_usb/ni_usb_gpib.h-166-{\n--\ndrivers/gpib/tnt4882/Makefile:1:obj-$(CONFIG_GPIB_NI_PCI_ISA) += tnt4882.o\ndrivers/gpib/tnt4882/Makefile-2-\ndrivers/gpib/tnt4882/Makefile:3:tnt4882-objs := tnt4882_gpib.o mite.o\ndrivers/gpib/tnt4882/Makefile-4-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-3-/***************************************************************************\ndrivers/gpib/tnt4882/tnt4882_gpib.c:4: * National Instruments boards using tnt4882 or compatible chips (at-gpib, etc).\ndrivers/gpib/tnt4882/tnt4882_gpib.c-5- * copyright : (C) 2001, 2002 by Frank Mori Hess\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-25-#include \"mite.h\"\ndrivers/gpib/tnt4882/tnt4882_gpib.c:26:#include \"tnt4882_registers.h\"\ndrivers/gpib/tnt4882/tnt4882_gpib.c-27-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=30=enum {\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-42-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:43:// struct which defines private_data for tnt4882 devices\ndrivers/gpib/tnt4882/tnt4882_gpib.c:44:struct tnt4882_priv {\ndrivers/gpib/tnt4882/tnt4882_gpib.c-45-\tstruct nec7210_priv nec7210_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-53-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:54:static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-55-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=60=static const int atgpib_iosize = 32;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-62-/* paged io */\ndrivers/gpib/tnt4882/tnt4882_gpib.c:63:static inline unsigned int tnt_paged_readb(struct tnt4882_priv *priv, unsigned long offset)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-64-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-69-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:70:static inline void tnt_paged_writeb(struct tnt4882_priv *priv, unsigned int value,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-71-\t\t\t\t unsigned long offset)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-78-/* readb/writeb wrappers */\ndrivers/gpib/tnt4882/tnt4882_gpib.c:79:static inline unsigned short tnt_readb(struct tnt4882_priv *priv, unsigned long offset)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-80-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-115-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:116:static inline void tnt_writeb(struct tnt4882_priv *priv, unsigned short value, unsigned long offset)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-117-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=148=MODULE_LICENSE(\"GPL\");\ndrivers/gpib/tnt4882/tnt4882_gpib.c:149:MODULE_DESCRIPTION(\"GPIB driver for National Instruments boards using tnt4882 or compatible chips\");\ndrivers/gpib/tnt4882/tnt4882_gpib.c-150-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:151:static int tnt4882_line_status(const struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-152-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-154-\tint bcsr_bits;\ndrivers/gpib/tnt4882/tnt4882_gpib.c:155:\tstruct tnt4882_priv *tnt_priv;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-156-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-180-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:181:static int tnt4882_t1_delay(struct gpib_board *board, unsigned int nano_sec)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-182-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:183:\tstruct tnt4882_priv *tnt_priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-184-\tstruct nec7210_priv *nec_priv = \u0026tnt_priv-\u003enec7210_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-205-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:206:static int fifo_word_available(struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-207-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-216-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:217:static int fifo_byte_available(struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-218-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-227-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:228:static int fifo_xfer_done(struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-229-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-238-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:239:static int drain_fifo_words(struct tnt4882_priv *tnt_priv, u8 *buffer, int num_bytes)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-240-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-253-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:254:static void tnt4882_release_holdoff(struct gpib_board *board, struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-255-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-261-\t/*\ndrivers/gpib/tnt4882/tnt4882_gpib.c:262:\t * tnt4882 not in one-chip mode won't always release holdoff unless we\ndrivers/gpib/tnt4882/tnt4882_gpib.c-263-\t * are in the right mode when release handshake command is given\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-277-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:278:static int tnt4882_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-279-\t\t\t size_t *bytes_read)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-282-\tssize_t retval = 0;\ndrivers/gpib/tnt4882/tnt4882_gpib.c:283:\tstruct tnt4882_priv *tnt_priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-284-\tstruct nec7210_priv *nec_priv = \u0026tnt_priv-\u003enec7210_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-310-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:311:\ttnt4882_release_holdoff(board, tnt_priv);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-312-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-392-\t */\ndrivers/gpib/tnt4882/tnt4882_gpib.c:393:\ttnt4882_internal_interrupt(board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-394-\t/* RECEIVED_END should be in sync now */\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-407-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:408:static int fifo_space_available(struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-409-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-418-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:419:static unsigned int tnt_transfer_count(struct tnt4882_priv *tnt_priv)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-420-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-430-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:431:static int write_wait(struct gpib_board *board, struct tnt4882_priv *tnt_priv,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-432-\t\t int wait_for_done, int send_commands)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=453=static int generic_write(struct gpib_board *board, u8 *buffer, size_t length,\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-457-\tssize_t retval = 0;\ndrivers/gpib/tnt4882/tnt4882_gpib.c:458:\tstruct tnt4882_priv *tnt_priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-459-\tstruct nec7210_priv *nec_priv = \u0026tnt_priv-\u003enec7210_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-539-\t */\ndrivers/gpib/tnt4882/tnt4882_gpib.c:540:\ttnt4882_internal_interrupt(board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-541-\t*bytes_written = length - tnt_transfer_count(tnt_priv);\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-544-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:545:static int tnt4882_accel_write(struct gpib_board *board, u8 *buffer,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-546-\t\t\t size_t length, int send_eoi, size_t *bytes_written)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-550-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:551:static int tnt4882_command(struct gpib_board *board, u8 *buffer, size_t length,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-552-\t\t\t size_t *bytes_written)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-556-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:557:static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-558-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:559:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-560-\tint isr0_bits, isr3_bits, imr3_bits;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-591-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:592:static irqreturn_t tnt4882_interrupt(int irq, void *arg)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-593-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:594:\treturn tnt4882_internal_interrupt(arg);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-595-}\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-597-// wrappers for interface functions\ndrivers/gpib/tnt4882/tnt4882_gpib.c:598:static int tnt4882_read(struct gpib_board *board, u8 *buffer, size_t length, int *end,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-599-\t\t\tsize_t *bytes_read)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-600-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:601:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-602-\tstruct nec7210_priv *nec_priv = \u0026priv-\u003enec7210_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-617-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:618:static int tnt4882_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-619-\t\t\t size_t *bytes_written)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-620-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:621:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-622-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-625-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:626:static int tnt4882_command_unaccel(struct gpib_board *board, u8 *buffer,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-627-\t\t\t\t size_t length, size_t *bytes_written)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-628-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:629:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-630-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-633-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:634:static int tnt4882_take_control(struct gpib_board *board, int synchronous)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-635-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:636:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-637-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-640-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:641:static int tnt4882_go_to_standby(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-642-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:643:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-644-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-647-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:648:static int tnt4882_request_system_control(struct gpib_board *board, int request_control)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-649-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:650:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-651-\tint retval;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-664-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:665:static void tnt4882_interface_clear(struct gpib_board *board, int assert)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-666-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:667:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-668-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-671-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:672:static void tnt4882_remote_enable(struct gpib_board *board, int enable)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-673-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:674:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-675-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-678-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:679:static int tnt4882_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-680-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:681:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-682-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-685-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:686:static void tnt4882_disable_eos(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-687-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:688:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-689-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-692-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:693:static unsigned int tnt4882_update_status(struct gpib_board *board, unsigned int clear_mask)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-694-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-696-\tu8 line_status;\ndrivers/gpib/tnt4882/tnt4882_gpib.c:697:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-698-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-711-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:712:static int tnt4882_primary_address(struct gpib_board *board, unsigned int address)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-713-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:714:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-715-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-718-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:719:static int tnt4882_secondary_address(struct gpib_board *board, unsigned int address, int enable)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-720-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:721:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-722-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-725-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:726:static int tnt4882_parallel_poll(struct gpib_board *board, u8 *result)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-727-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:728:\tstruct tnt4882_priv *tnt_priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-729-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-742-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:743:static void tnt4882_parallel_poll_configure(struct gpib_board *board, u8 config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-744-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:745:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-746-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-760-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:761:static void tnt4882_parallel_poll_response(struct gpib_board *board, int ist)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-762-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:763:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-764-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-769- * this is just used by the old nec7210 isa interfaces, the newer\ndrivers/gpib/tnt4882/tnt4882_gpib.c:770: * boards use tnt4882_serial_poll_response2\ndrivers/gpib/tnt4882/tnt4882_gpib.c-771- */\ndrivers/gpib/tnt4882/tnt4882_gpib.c:772:static void tnt4882_serial_poll_response(struct gpib_board *board, u8 status)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-773-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:774:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-775-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-778-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:779:static void tnt4882_serial_poll_response2(struct gpib_board *board, u8 status,\ndrivers/gpib/tnt4882/tnt4882_gpib.c-780-\t\t\t\t\t int new_reason_for_service)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-781-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:782:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-783-\tunsigned long flags;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-814-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:815:static u8 tnt4882_serial_poll_status(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-816-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:817:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-818-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-821-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:822:static void tnt4882_return_to_local(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-823-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:824:\tstruct tnt4882_priv *priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-825-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-828-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:829:static void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-830-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-841-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:842:static int tnt4882_allocate_private(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-843-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:844:\tstruct tnt4882_priv *tnt_priv;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-845-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:846:\tboard-\u003eprivate_data = kzalloc_obj(struct tnt4882_priv);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-847-\tif (!board-\u003eprivate_data)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-853-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:854:static void tnt4882_free_private(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-855-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-859-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:860:static void tnt4882_init(struct tnt4882_priv *tnt_priv, const struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-861-{\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=908=static int ni_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-909-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:910:\tstruct tnt4882_priv *tnt_priv;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-911-\tstruct nec7210_priv *nec_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-917-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:918:\tretval = tnt4882_allocate_private(board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-919-\tif (retval)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-970-\t// get irq\ndrivers/gpib/tnt4882/tnt4882_gpib.c:971:\tretval = request_irq(mite_irq(tnt_priv-\u003emite), tnt4882_interrupt, isr_flags, \"ni-pci-gpib\",\ndrivers/gpib/tnt4882/tnt4882_gpib.c-972-\t\t\t board);\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-987-\t}\ndrivers/gpib/tnt4882/tnt4882_gpib.c:988:\ttnt4882_init(tnt_priv, board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-989-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=993=static void ni_pci_detach(struct gpib_board *board)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-994-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:995:\tstruct tnt4882_priv *tnt_priv = board-\u003eprivate_data;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-996-\tstruct nec7210_priv *nec_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1001-\t\tif (nec_priv-\u003emmiobase)\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1002:\t\t\ttnt4882_board_reset(tnt_priv, board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1003-\t\tif (tnt_priv-\u003eirq)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1007-\t}\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1008:\ttnt4882_free_private(board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1009-}\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1030=static int ni_isa_attach_common(struct gpib_board *board, const struct gpib_board_config *config,\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1032-{\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1033:\tstruct tnt4882_priv *tnt_priv;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1034-\tstruct nec7210_priv *nec_priv;\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1041-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1042:\tretval = tnt4882_allocate_private(board);\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1043-\tif (retval)\n--\n\n"
} |
| 13/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 36226 output: 52 thoughts: 77 Thoughts: Here's my analysis of what you're asking me to do: **Diving into the `tnt4882_gpib.c` Module Initialization** Okay, so I'm being asked to delve into the `tnt4882_gpib.c` driver, specifically the initialization function `tnt4882_init_module()`. My initial focus needs to be on a section of the code between lines 1389 and 1480. I understand the goal: to extract the core functionality of this segment. As an expert, I'm going to quickly identify what this specific region is handling during the module's setup. I'll be looking for crucial register initialization, interrupt configuration, resource allocation, and any hardware-specific sequences within that context. I'll filter out the irrelevant boiler plate and summarize the core actions during module initialization of the GPIB controller. |
| 14/2 | 2026/09/17 22:55 | tool | read-file |
0mArgs:{
"File": "drivers/gpib/tnt4882/tnt4882_gpib.c",
"FirstLine": 1460,
"LineCount": 50
}Results: {
"Contents": "1460:\t\tresult = init_ni_gpib_cs();\n1461:\t\tif (result) {\n1462:\t\t\tpr_err(\"pcmcia_register_driver failed: error = %d\\n\", result);\n1463:\t\t\tgoto err_pcmcia_driver;\n1464:\t\t}\n1465:\t#endif\n1466:\t\n1467:\t\tmite_init();\n1468:\t\n1469:\t\treturn 0;\n1470:\t\n1471:\t#ifdef CONFIG_GPIB_PCMCIA\n1472:\terr_pcmcia_driver:\n1473:\t\tgpib_unregister_driver(\u0026ni_pcmcia_accel_interface);\n1474:\terr_pcmcia_accel:\n1475:\t\tgpib_unregister_driver(\u0026ni_pcmcia_interface);\n1476:\terr_pcmcia:\n1477:\t#endif\n1478:\t\tgpib_unregister_driver(\u0026ni_pci_accel_interface);\n1479:\terr_pci_accel:\n1480:\t\tgpib_unregister_driver(\u0026ni_pci_interface);\n1481:\terr_pci:\n1482:\t\tgpib_unregister_driver(\u0026ni_nec_isa_accel_interface);\n1483:\terr_nec_isa_accel:\n1484:\t\tgpib_unregister_driver(\u0026ni_nec_isa_interface);\n1485:\terr_nec_isa:\n1486:\t\tgpib_unregister_driver(\u0026ni_nat4882_isa_accel_interface);\n1487:\terr_nat4882_isa_accel:\n1488:\t\tgpib_unregister_driver(\u0026ni_nat4882_isa_interface);\n1489:\terr_nat4882_isa:\n1490:\t\tgpib_unregister_driver(\u0026ni_isa_accel_interface);\n1491:\terr_isa_accel:\n1492:\t\tgpib_unregister_driver(\u0026ni_isa_interface);\n1493:\terr_isa:\n1494:\t\tpci_unregister_driver(\u0026tnt4882_pci_driver);\n1495:\t\n1496:\t\treturn result;\n1497:\t}\n1498:\t\n1499:\tstatic void __exit tnt4882_exit_module(void)\n1500:\t{\n1501:\t\tgpib_unregister_driver(\u0026ni_isa_interface);\n1502:\t\tgpib_unregister_driver(\u0026ni_isa_accel_interface);\n1503:\t\tgpib_unregister_driver(\u0026ni_nat4882_isa_interface);\n1504:\t\tgpib_unregister_driver(\u0026ni_nat4882_isa_accel_interface);\n1505:\t\tgpib_unregister_driver(\u0026ni_nec_isa_interface);\n1506:\t\tgpib_unregister_driver(\u0026ni_nec_isa_accel_interface);\n1507:\t\tgpib_unregister_driver(\u0026ni_pci_interface);\n1508:\t\tgpib_unregister_driver(\u0026ni_pci_accel_interface);\n1509:\t#ifdef CONFIG_GPIB_PCMCIA\n"
} |
| 15/2 | 2026/09/17 22:55 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 37414 output: 27 thoughts: 1276 Thoughts: **Analysis of `mite_init` and Reachability** Okay, let's break this down. The initial focus is on the `mite_init` function and understanding its execution path. I need to figure out under what conditions the code within `mite_init` can actually be reached and potentially fuzzed. First, I examined the code itself. The core of `mite_init` revolves around iterating through PCI devices using `pci_get_device`. It's clear that it's looking for devices with the National Instruments vendor ID (0x1093). The crucial point is that if no such device exists, `pci_get_device` immediately returns NULL. The loop's conditional is tied to `pcidev`, which becomes NULL from the start. So, if there's no NI PCI device, the code within the loop is never executed. This means `kzalloc_obj`, which is critical, will *never* be called. The question then becomes: can we emulate an NI device in QEMU/syzkaller? My understanding is that QEMU doesn't offer any emulation for National Instruments devices, particularly those related to GPIB or DAQ hardware. Syzkaller doesn't have a mechanism for arbitrary PCI device creation, either. The next step was to figure out how `mite_init` is called. A quick search revealed that it's called from `tnt4882_init_module()`. This means it's executed when the `tnt4882` driver is initialized, either at module load or kernel boot, if built-in. Re-emphasizing: if no PCI device with `PCI_VENDOR_ID_NATINST` is found, the loop doesn't execute and `mite_init` simply returns. I then went back to the criteria. Section 2's "Structurally unreachable hardware" category and "Unreachable execution paths" were very relevant. This code *requires* the presence of specific hardware that isn't emulated in standard QEMU or GCE. It's a clear case of structurally unreachable code. The question is: since it looks for GPIB, is there any way to emulate GPIB through software or via a virtual GPIB driver? I reviewed the GPIB driver code in `drivers/gpib/`, specifically `gpib_os.c`. Examining this file is for determining the possibility of a software GPIB connection or GPIB through software. I observed several `ioctl` functions in `gpib_os.c` like `iobase_ioctl`, `select_pci_ioctl`, `init_gpib_board_config`, which are used to control the GPIB boards. It seems possible for attaching boards via ioctl or another means from userspace. |
| 16/2 | 2026/09/17 22:56 | tool | grepper |
0mArgs:{
"Expression": "attach",
"PathPrefix": "drivers/gpib/common"
}Results: {
"Output": "drivers/gpib/common/iblib.c=201=int ibonline(struct gpib_board *board)\n--\ndrivers/gpib/common/iblib.c-214-\tboard-\u003elocal_ppoll_mode = 0;\ndrivers/gpib/common/iblib.c:215:\tretval = board-\u003einterface-\u003eattach(board, \u0026board-\u003econfig);\ndrivers/gpib/common/iblib.c-216-\tif (retval \u003c 0) {\n"
} |
| 17/2 | 2026/09/17 22:56 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 39449 output: 22 thoughts: 872 Thoughts: **Diving into the `mite_init` Function** Okay, let's see, I need to figure out if `attach()` is calling `mite_init()`. Time to go through this. I'll start with `ibonline` and the `board->interface->attach()` call. My initial thought is that it might trigger `mite_init()`. Okay, where's `mite_init()` called? Let's do a quick grep. Alright, let's look at every instance. Okay, here are all the places `mite_init()` is referenced: there are a few seemingly related ones, but let's see. Looks like a few different `_mite_init` functions in the `comedi` directory, and then there's a standalone `mite_init()` in `drivers/gpib/tnt4882`. Bingo, there it is! And, hey, there's even a `.h` file for it too. Let's see... the code... aha! The only call to `mite_init()` is in `tnt4882_init_module()`. I've got to check. Okay, I'm almost certain I have it narrowed down now. Let's make sure. Okay, I've checked everywhere in the kernel and in `drivers/gpib/tnt4882/`. Yep, it's just that one place. Just confirming, I'll look at the `mite.c` file again. Right, so `mite_init()` itself looks pretty straightforward. It's iterating through PCI devices, searching for something. I need to understand that loop a little better. Specifically, what's happening in `pci_get_device(PCI_VENDOR_ID_NATINST, ...)`? That looks like it's searching for a PCI device with a specific vendor ID, `PCI_VENDOR_ID_NATINST`. Right, I'll need to figure out what that ID is. I'll need to look that up in the `pci_ids.h` file. |
| 18/2 | 2026/09/17 22:56 | tool | grepper |
0mArgs:{
"Expression": "PCI_VENDOR_ID_NATINST"
}Results: {
"Output": "drivers/gpib/tnt4882/mite.c=52=void mite_init(void)\n--\ndrivers/gpib/tnt4882/mite.c-56-\ndrivers/gpib/tnt4882/mite.c:57:\tfor (pcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, NULL);\ndrivers/gpib/tnt4882/mite.c-58-\t\tpcidev;\ndrivers/gpib/tnt4882/mite.c:59:\t\tpcidev = pci_get_device(PCI_VENDOR_ID_NATINST, PCI_ANY_ID, pcidev)) {\ndrivers/gpib/tnt4882/mite.c-60-\t\tmite = kzalloc_obj(*mite);\n--\ndrivers/gpib/tnt4882/mite.h-13-\ndrivers/gpib/tnt4882/mite.h:14:#define PCI_VENDOR_ID_NATINST\t\t0x1093\ndrivers/gpib/tnt4882/mite.h-15-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=1352=static const struct pci_device_id tnt4882_pci_table[] = {\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1353:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1354:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB_PLUS)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1355:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB_PLUS2)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1356:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PXIGPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1357:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PMCGPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1358:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PCIEGPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1359:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PCIE2GPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1360-\t// support for Measurement Computing PCI-488\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1361:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_MC_PCI488)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c:1362:\t{PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_CEC_NI_GPIB)},\ndrivers/gpib/tnt4882/tnt4882_gpib.c-1363-\t{ 0 }\n"
} |
| 19/2 | 2026/09/17 22:56 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 41735 output: 27 thoughts: 762 Thoughts: **Analyzing the Unreachability of Modified Code in `mite.c`**
Okay, let's break this down. First, I see that `PCI_VENDOR_ID_NATINST` is indeed National Instruments (0x1093), as expected. Now, in the context of QEMU or GCE, the absence of National Instruments PCI devices is key. The `tnt4882_init_module()` function's call to `pci_get_device(0x1093, PCI_ANY_ID, NULL)` is immediately returning `NULL`. This is because, in these virtualized environments, there's no emulated or real device with that vendor ID.
Consequently, the loop in `mite_init()` is never entered. `pci_get_device()` returns `NULL` on the very first iteration, the check evaluates to `false`, and the loop terminates before any of the lines 60-70—including the modified code—are ever executed.
So, the first question is, could this code ever be reached in a standard virtualized environment? The answer, at least on initial inspection, is no. QEMU doesn't emulate National Instruments PCI-GPIB or MITE chips. Also, there's no apparent mechanism for userspace to inject or emulate a PCI device with the 0x1093 vendor ID. There's no USB-to-PCI bridge or virtio trickery that could achieve this, to my knowledge.
Then, there's this Structural Unreachable Hardware point, which really hits the nail on the head. This driver is designed for physical National Instruments PCI GPIB hardware. The modified code, as I now understand it, is within the `mite_init()` function, specifically in a loop that iterates over devices with the NATINST vendor ID:
```c
mite = kzalloc_obj(*mite);
if (!mite) {
pci_dev_put(pcidev);
return;
}
```
Without a physical NATINST PCI device present, the `pci_get_device()` function will inevitably return NULL. The loop will not even execute, ever. Further, even if the code *somehow* managed to run, that section is only error handling if `kzalloc_obj` fails. Which doesn't free the device, until after calling `pci_dev_put`.
In conclusion, it's pretty clear that this modified code within `mite_init()` is unreachable in standard virtualized environments like QEMU and GCE, given its dependence on the presence of physical National Instruments PCI GPIB hardware.
|
| 20/2 | 2026/09/17 22:56 | tool | grepper |
0mArgs:{
"Expression": "mite_devices",
"PathPrefix": "drivers/gpib"
}Results: {
"Output": "drivers/gpib/tnt4882/mite.c-47-\ndrivers/gpib/tnt4882/mite.c:48:struct mite_struct *mite_devices;\ndrivers/gpib/tnt4882/mite.c-49-\n--\ndrivers/gpib/tnt4882/mite.c=52=void mite_init(void)\n--\ndrivers/gpib/tnt4882/mite.c-67-\t\tpci_dev_get(mite-\u003epcidev);\ndrivers/gpib/tnt4882/mite.c:68:\t\tmite-\u003enext = mite_devices;\ndrivers/gpib/tnt4882/mite.c:69:\t\tmite_devices = mite;\ndrivers/gpib/tnt4882/mite.c-70-\t}\n--\ndrivers/gpib/tnt4882/mite.c=105=void mite_cleanup(void)\n--\ndrivers/gpib/tnt4882/mite.c-108-\ndrivers/gpib/tnt4882/mite.c:109:\tfor (mite = mite_devices; mite; mite = next) {\ndrivers/gpib/tnt4882/mite.c-110-\t\tnext = mite-\u003enext;\n--\ndrivers/gpib/tnt4882/mite.h=31=struct mite_struct {\n--\ndrivers/gpib/tnt4882/mite.h-45-\ndrivers/gpib/tnt4882/mite.h:46:extern struct mite_struct *mite_devices;\ndrivers/gpib/tnt4882/mite.h-47-\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c=908=static int ni_pci_attach(struct gpib_board *board, const struct gpib_board_config *config)\n--\ndrivers/gpib/tnt4882/tnt4882_gpib.c-927-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:928:\tif (!mite_devices)\ndrivers/gpib/tnt4882/tnt4882_gpib.c-929-\t\treturn -ENODEV;\ndrivers/gpib/tnt4882/tnt4882_gpib.c-930-\ndrivers/gpib/tnt4882/tnt4882_gpib.c:931:\tfor (mite = mite_devices; mite; mite = mite-\u003enext) {\ndrivers/gpib/tnt4882/tnt4882_gpib.c-932-\t\tshort found_board;\n"
} |
| 21/2 | 2026/09/17 22:56 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 43801 output: 133 thoughts: 405 Thoughts: **My Analysis of the `mite_init()` Code** Okay, here's how I see this. The `mite_devices` variable is only set within `mite_init()`. And `ni_pci_attach()` quickly checks if it's not populated, returning an error if it's NULL. Since `mite_devices` is only populated by `mite_init()`, that's the key. Without a real National Instruments PCI device present, `mite_devices` remains NULL, and the rest of the `mite` operations are impossible. So, the code change in `mite_init()` is fundamentally dependent on actual National Instruments PCI hardware, specifically devices with the vendor ID `0x1093` ( `PCI_VENDOR_ID_NATINST`). This hardware isn't emulated or provided in typical virtualized environments like QEMU or Google Compute Engine, which is what we use for our fuzzing. Therefore, that loop with `pci_get_device()` is structurally unreachable during fuzzing. I mean, the code inside the loop will *never* run in our environment. Let me just double-check my thinking. * `WorthFuzzing`: Definitely *false*. * `EnableConfigs`: It's either empty or could potentially include `GPIB_NI_PCI_ISA`, but since `WorthFuzzing` is false, it's irrelevant and empty array or configs. * `FocusSymbols`: Empty. No specific symbols to focus on here. * Reasoning: The patch adds `pci_dev_put(pcidev)` in `drivers/gpib/tnt4882/mite.c` on allocation failure in `mite_init()`. The loop iterates over PCI devices with `PCI_VENDOR_ID_NATINST`. This hardware isn't emulated in standard virtualized fuzzing environments, making the modified loop body structurally unreachable. It's concise and correct. Okay, that all lines up perfectly. My analysis is solid, and I'm ready to call `set-results`. |
| 22/2 | 2026/09/17 22:56 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in mite_init() (drivers/gpib/tnt4882/mite.c) by adding a pci_dev_put() when memory allocation fails while iterating over PCI devices matching PCI_VENDOR_ID_NATINST (National Instruments). Because National Instruments PCI devices are specialized physical hardware not emulated in standard QEMU/GCE virtualized environments, pci_get_device() finds no matching devices and the loop body is structurally unreachable.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies error handling in mite_init() (drivers/gpib/tnt4882/mite.c) by adding a pci_dev_put() when memory allocation fails while iterating over PCI devices matching PCI_VENDOR_ID_NATINST (National Instruments). Because National Instruments PCI devices are specialized physical hardware not emulated in standard QEMU/GCE virtualized environments, pci_get_device() finds no matching devices and the loop body is structurally unreachable.",
"WorthFuzzing": false
} |
| 23/1 | 2026/09/17 22:56 | 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) |
|---|