drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c- Extension
.c- Size
- 5974 bytes
- Lines
- 228
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/debugfs.hlinux/module.hixgbe.h
Detected Declarations
function ixgbe_dbg_common_ops_readfunction ixgbe_dbg_reg_ops_readfunction ixgbe_dbg_reg_ops_writefunction ixgbe_dbg_netdev_ops_readfunction ixgbe_dbg_netdev_ops_writefunction ixgbe_dbg_adapter_initfunction ixgbe_dbg_adapter_exitfunction ixgbe_dbg_initfunction ixgbe_dbg_exit
Annotated Snippet
static const struct file_operations ixgbe_dbg_reg_ops_fops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = ixgbe_dbg_reg_ops_read,
.write = ixgbe_dbg_reg_ops_write,
};
static char ixgbe_dbg_netdev_ops_buf[256] = "";
/**
* ixgbe_dbg_netdev_ops_read - read for netdev_ops datum
* @filp: the opened file
* @buffer: where to write the data for the user to read
* @count: the size of the user's buffer
* @ppos: file position offset
**/
static ssize_t ixgbe_dbg_netdev_ops_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
{
return ixgbe_dbg_common_ops_read(filp, buffer, count, ppos,
ixgbe_dbg_netdev_ops_buf);
}
/**
* ixgbe_dbg_netdev_ops_write - write into netdev_ops datum
* @filp: the opened file
* @buffer: where to find the user's data
* @count: the length of the user's data
* @ppos: file position offset
**/
static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp,
const char __user *buffer,
size_t count, loff_t *ppos)
{
struct ixgbe_adapter *adapter = filp->private_data;
int len;
/* don't allow partial writes */
if (*ppos != 0)
return 0;
if (count >= sizeof(ixgbe_dbg_netdev_ops_buf))
return -ENOSPC;
len = simple_write_to_buffer(ixgbe_dbg_netdev_ops_buf,
sizeof(ixgbe_dbg_netdev_ops_buf)-1,
ppos,
buffer,
count);
if (len < 0)
return len;
ixgbe_dbg_netdev_ops_buf[len] = '\0';
if (strncmp(ixgbe_dbg_netdev_ops_buf, "tx_timeout", 10) == 0) {
/* TX Queue number below is wrong, but ixgbe does not use it */
adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev,
UINT_MAX);
e_dev_info("tx_timeout called\n");
} else {
e_dev_info("Unknown command: %s\n", ixgbe_dbg_netdev_ops_buf);
e_dev_info("Available commands:\n");
e_dev_info(" tx_timeout\n");
}
return count;
}
static const struct file_operations ixgbe_dbg_netdev_ops_fops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = ixgbe_dbg_netdev_ops_read,
.write = ixgbe_dbg_netdev_ops_write,
};
/**
* ixgbe_dbg_adapter_init - setup the debugfs directory for the adapter
* @adapter: the adapter that is starting up
**/
void ixgbe_dbg_adapter_init(struct ixgbe_adapter *adapter)
{
const char *name = pci_name(adapter->pdev);
adapter->ixgbe_dbg_adapter = debugfs_create_dir(name, ixgbe_dbg_root);
debugfs_create_file("reg_ops", 0600, adapter->ixgbe_dbg_adapter,
adapter, &ixgbe_dbg_reg_ops_fops);
debugfs_create_file("netdev_ops", 0600, adapter->ixgbe_dbg_adapter,
adapter, &ixgbe_dbg_netdev_ops_fops);
}
/**
* ixgbe_dbg_adapter_exit - clear out the adapter's debugfs entries
Annotation
- Immediate include surface: `linux/debugfs.h`, `linux/module.h`, `ixgbe.h`.
- Detected declarations: `function ixgbe_dbg_common_ops_read`, `function ixgbe_dbg_reg_ops_read`, `function ixgbe_dbg_reg_ops_write`, `function ixgbe_dbg_netdev_ops_read`, `function ixgbe_dbg_netdev_ops_write`, `function ixgbe_dbg_adapter_init`, `function ixgbe_dbg_adapter_exit`, `function ixgbe_dbg_init`, `function ixgbe_dbg_exit`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: pattern implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.