drivers/net/wireless/realtek/rtw88/debug.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtw88/debug.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtw88/debug.c- Extension
.c- Size
- 37580 bytes
- Lines
- 1376
- 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.
- Touches user memory; correctness depends on fault-safe copying and privilege boundary handling.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/debugfs.hlinux/seq_file.hmain.hcoex.hsec.hfw.hdebug.hphy.hreg.hps.hregd.h
Detected Declarations
struct rtw_debugfs_privstruct rtw_debugfsfunction rtw_debugfs_single_showfunction rtw_debugfs_common_writefunction rtw_debugfs_single_writefunction rtw_debugfs_single_open_rwfunction rtw_debugfs_closefunction rtw_debugfs_get_read_regfunction rtw_debugfs_get_rf_readfunction rtw_debugfs_get_fix_ratefunction rtw_debugfs_copy_from_userfunction rtw_debugfs_set_read_regfunction rtw_debugfs_get_dump_camfunction rtw_debugfs_get_rsvd_pagefunction rtw_debugfs_set_rsvd_pagefunction rtw_debugfs_set_single_inputfunction rtw_debugfs_set_write_regfunction rtw_debugfs_set_h2cfunction rtw_debugfs_set_rf_writefunction rtw_debugfs_set_rf_readfunction rtw_debugfs_set_fix_ratefunction rtw_debug_get_mac_pagefunction rtw_debug_get_bb_pagefunction rtw_debugfs_get_rf_dumpfunction rtw_print_cck_rate_txtfunction rtw_print_ofdm_rate_txtfunction rtw_print_ht_rate_txtfunction rtw_print_vht_rate_txtfunction rtw_print_ratefunction rtw_debugfs_get_tx_pwr_tblfunction rtw_debugfs_get_simple_phy_infofunction rtw_debugfs_get_phy_infofunction rtw_debugfs_get_coex_infofunction rtw_debugfs_set_coex_enablefunction rtw_debugfs_get_coex_enablefunction rtw_debugfs_set_edcca_enablefunction rtw_debugfs_get_edcca_enablefunction rtw_debugfs_set_fw_crashfunction rtw_debugfs_get_fw_crashfunction rtw_debugfs_set_force_lowest_basic_ratefunction rtw_debugfs_get_force_lowest_basic_ratefunction rtw_debugfs_set_dm_capfunction dump_gapk_statusfunction rtw_debugfs_get_dm_capfunction rtw_debugfs_add_basicfunction rtw_debugfs_add_sec0function rtw_debugfs_add_sec1function rtw_debugfs_init
Annotated Snippet
static const struct file_operations file_ops_single_r = {
.owner = THIS_MODULE,
.open = rtw_debugfs_single_open_rw,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static const struct file_operations file_ops_single_rw = {
.owner = THIS_MODULE,
.open = rtw_debugfs_single_open_rw,
.release = single_release,
.read = seq_read,
.llseek = seq_lseek,
.write = rtw_debugfs_single_write,
};
static const struct file_operations file_ops_common_write = {
.owner = THIS_MODULE,
.write = rtw_debugfs_common_write,
.open = simple_open,
.release = rtw_debugfs_close,
};
static int rtw_debugfs_get_read_reg(struct seq_file *m, void *v)
{
struct rtw_debugfs_priv *debugfs_priv = m->private;
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
u32 val, len, addr;
len = debugfs_priv->read_reg.len;
addr = debugfs_priv->read_reg.addr;
switch (len) {
case 1:
val = rtw_read8(rtwdev, addr);
seq_printf(m, "reg 0x%03x: 0x%02x\n", addr, val);
break;
case 2:
val = rtw_read16(rtwdev, addr);
seq_printf(m, "reg 0x%03x: 0x%04x\n", addr, val);
break;
case 4:
val = rtw_read32(rtwdev, addr);
seq_printf(m, "reg 0x%03x: 0x%08x\n", addr, val);
break;
}
return 0;
}
static int rtw_debugfs_get_rf_read(struct seq_file *m, void *v)
{
struct rtw_debugfs_priv *debugfs_priv = m->private;
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
u32 val, addr, mask;
u8 path;
path = debugfs_priv->rf_path;
addr = debugfs_priv->rf_addr;
mask = debugfs_priv->rf_mask;
mutex_lock(&rtwdev->mutex);
val = rtw_read_rf(rtwdev, path, addr, mask);
mutex_unlock(&rtwdev->mutex);
seq_printf(m, "rf_read path:%d addr:0x%08x mask:0x%08x val=0x%08x\n",
path, addr, mask, val);
return 0;
}
static int rtw_debugfs_get_fix_rate(struct seq_file *m, void *v)
{
struct rtw_debugfs_priv *debugfs_priv = m->private;
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
u8 fix_rate = dm_info->fix_rate;
if (fix_rate >= DESC_RATE_MAX) {
seq_printf(m, "Fix rate disabled, fix_rate = %u\n", fix_rate);
return 0;
}
seq_printf(m, "Data frames fixed at desc rate %u\n", fix_rate);
return 0;
}
static int rtw_debugfs_copy_from_user(char tmp[], int size,
const char __user *buffer, size_t count,
int num)
{
Annotation
- Immediate include surface: `linux/debugfs.h`, `linux/seq_file.h`, `main.h`, `coex.h`, `sec.h`, `fw.h`, `debug.h`, `phy.h`.
- Detected declarations: `struct rtw_debugfs_priv`, `struct rtw_debugfs`, `function rtw_debugfs_single_show`, `function rtw_debugfs_common_write`, `function rtw_debugfs_single_write`, `function rtw_debugfs_single_open_rw`, `function rtw_debugfs_close`, `function rtw_debugfs_get_read_reg`, `function rtw_debugfs_get_rf_read`, `function rtw_debugfs_get_fix_rate`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: pattern implementation candidate.
- This snippet crosses the user/kernel memory boundary; validate fault handling and access checks before translating the pattern.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.