drivers/net/wireless/intel/iwlwifi/fw/dbg.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/intel/iwlwifi/fw/dbg.c- Extension
.c- Size
- 72353 bytes
- Lines
- 2502
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/devcoredump.hiwl-drv.hruntime.hdbg.hdebugfs.hiwl-io.hiwl-prph.hiwl-csr.hiwl-fh.h
Detected Declarations
struct iwl_dump_ini_region_datastruct iwl_ini_rxf_datastruct iwl_dump_ini_mem_opsstruct iwl_fw_ini_dump_entryenum iwl_dump_ini_region_selectorfunction Copyrightfunction for_each_sgfunction iwl_dump_ini_prph_mac_iter_commonfunction iwl_dump_ini_prph_mac_iterfunction iwl_dump_ini_prph_mac_block_iterfunction iwl_dump_ini_prph_phy_iter_commonfunction iwl_dump_ini_prph_phy_iterfunction iwl_dump_ini_prph_phy_block_iterfunction iwl_dump_ini_csr_iterfunction iwl_dump_ini_config_iterfunction iwl_dump_ini_dev_mem_iterfunction _iwl_dump_ini_paging_iterfunction iwl_dump_ini_paging_iterfunction iwl_dump_ini_mon_dram_iterfunction iwl_dump_ini_mon_smem_iterfunction iwl_ini_txf_iterfunction iwl_dump_ini_txf_iterfunction iwl_dump_ini_prph_snps_dphyip_iterfunction iwl_ini_get_rxf_datafunction iwl_dump_ini_rxf_iterfunction iwl_dump_ini_err_table_iterfunction iwl_dump_ini_special_mem_iterfunction iwl_dump_ini_dbgi_sram_iterfunction iwl_dump_ini_fw_pkt_iterfunction iwl_dump_ini_imr_iterfunction iwl_dump_ini_mem_fill_headerfunction mask_apply_and_normalizefunction iwl_get_mon_regfunction iwl_dump_ini_mon_fill_headerfunction iwl_dump_ini_mon_dram_fill_headerfunction iwl_dump_ini_mon_smem_fill_headerfunction iwl_dump_ini_mon_dbgi_fill_headerfunction iwl_dump_ini_err_table_fill_headerfunction iwl_dump_ini_special_mem_fill_headerfunction iwl_dump_ini_imr_fill_headerfunction iwl_dump_ini_mem_rangesfunction iwl_dump_ini_mem_block_rangesfunction iwl_dump_ini_paging_rangesfunction iwl_dump_ini_mon_dram_rangesfunction iwl_dump_ini_txf_rangesfunction iwl_dump_ini_single_rangefunction iwl_dump_ini_imr_rangesfunction iwl_dump_ini_mem_get_size
Annotated Snippet
struct iwl_dump_ini_region_data {
struct iwl_ucode_tlv *reg_tlv;
struct iwl_fwrt_dump_data *dump_data;
};
static int iwl_dump_ini_prph_mac_iter_common(struct iwl_fw_runtime *fwrt,
void *range_ptr, u32 addr,
__le32 size)
{
struct iwl_fw_ini_error_dump_range *range = range_ptr;
__le32 *val = range->data;
int i;
range->internal_base_addr = cpu_to_le32(addr);
range->range_data_size = size;
for (i = 0; i < le32_to_cpu(size); i += 4)
*val++ = cpu_to_le32(iwl_trans_read_prph(fwrt->trans, addr + i));
return sizeof(*range) + le32_to_cpu(range->range_data_size);
}
static int
iwl_dump_ini_prph_mac_iter(struct iwl_fw_runtime *fwrt,
struct iwl_dump_ini_region_data *reg_data,
void *range_ptr, int idx)
{
struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data;
u32 addr = le32_to_cpu(reg->addrs[idx]) +
le32_to_cpu(reg->dev_addr.offset);
return iwl_dump_ini_prph_mac_iter_common(fwrt, range_ptr, addr,
reg->dev_addr.size);
}
static int
iwl_dump_ini_prph_mac_block_iter(struct iwl_fw_runtime *fwrt,
struct iwl_dump_ini_region_data *reg_data,
void *range_ptr, int idx)
{
struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data;
struct iwl_fw_ini_addr_size *pairs = (void *)reg->addrs;
u32 addr = le32_to_cpu(reg->dev_addr_range.offset) +
le32_to_cpu(pairs[idx].addr);
return iwl_dump_ini_prph_mac_iter_common(fwrt, range_ptr, addr,
pairs[idx].size);
}
static int iwl_dump_ini_prph_phy_iter_common(struct iwl_fw_runtime *fwrt,
void *range_ptr, u32 addr,
__le32 size, __le32 offset)
{
struct iwl_fw_ini_error_dump_range *range = range_ptr;
__le32 *val = range->data;
u32 indirect_wr_addr = WMAL_INDRCT_RD_CMD1;
u32 indirect_rd_addr = WMAL_MRSPF_1;
u32 prph_val;
u32 dphy_state;
u32 dphy_addr;
u32 prph_stts;
int i;
range->internal_base_addr = cpu_to_le32(addr);
range->range_data_size = size;
if (fwrt->trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_AX210)
indirect_wr_addr = WMAL_INDRCT_CMD1;
indirect_wr_addr += le32_to_cpu(offset);
indirect_rd_addr += le32_to_cpu(offset);
dphy_addr = (offset) ? WFPM_LMAC2_PS_CTL_RW : WFPM_LMAC1_PS_CTL_RW;
dphy_state = iwl_read_umac_prph_no_grab(fwrt->trans, dphy_addr);
for (i = 0; i < le32_to_cpu(size); i += 4) {
if (dphy_state == HBUS_TIMEOUT ||
(dphy_state & WFPM_PS_CTL_RW_PHYRF_PD_FSM_CURSTATE_MSK) !=
WFPM_PHYRF_STATE_ON) {
*val++ = cpu_to_le32(WFPM_DPHY_OFF);
continue;
}
iwl_trans_write_prph(fwrt->trans, indirect_wr_addr,
WMAL_INDRCT_CMD(addr + i));
if (fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_JF1 &&
fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_JF2 &&
fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_HR1 &&
fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_HR2) {
udelay(2);
Annotation
- Immediate include surface: `linux/devcoredump.h`, `iwl-drv.h`, `runtime.h`, `dbg.h`, `debugfs.h`, `iwl-io.h`, `iwl-prph.h`, `iwl-csr.h`.
- Detected declarations: `struct iwl_dump_ini_region_data`, `struct iwl_ini_rxf_data`, `struct iwl_dump_ini_mem_ops`, `struct iwl_fw_ini_dump_entry`, `enum iwl_dump_ini_region_selector`, `function Copyright`, `function for_each_sg`, `function iwl_dump_ini_prph_mac_iter_common`, `function iwl_dump_ini_prph_mac_iter`, `function iwl_dump_ini_prph_mac_block_iter`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration 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.