drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c- Extension
.c- Size
- 69123 bytes
- Lines
- 2191
- 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/types.hlinux/fips.hlinux/slab.hlinux/export.hlinux/etherdevice.hlinux/pci.hlinux/firmware.hiwl-drv.hiwl-modparams.hiwl-nvm-parse.hiwl-prph.hiwl-io.hiwl-csr.hfw/api/nvm-reg.hfw/api/commands.hfw/api/cmdhdr.hfw/img.hfw/dbg.hmei/iwl-mei.h
Detected Declarations
enum nvm_offsetsenum ext_nvm_offsetsenum nvm_sku_bitsenum iwl_reg_capa_flags_v1enum iwl_reg_capa_flags_v2enum iwl_reg_capa_flags_v5function iwl_nvm_print_channel_flagsfunction iwl_get_channel_flagsfunction iwl_nl80211_band_from_channel_idxfunction iwl_init_channel_mapfunction iwl_init_vht_hw_capabfunction iwl_init_he_6ghz_capafunction iwl_nvm_fixup_sband_iftdfunction iwl_init_he_hw_capabfunction iwl_init_nan_phy_capafunction iwl_reinit_cabfunction iwl_init_sbandsfunction iwl_get_skufunction iwl_get_nvm_versionfunction iwl_get_radio_cfgfunction iwl_get_n_hw_addrsfunction iwl_set_radio_cfgfunction iwl_flip_hw_addressfunction iwl_set_hw_address_from_csrfunction iwl_set_hw_address_family_8000function iwl_set_hw_addressfunction iwl_nvm_no_wide_in_5ghzfunction iwl_parse_mei_nvm_datafunction iwl_parse_nvm_datafunction iwl_nvm_get_regdom_bw_flagsfunction iwl_get_reg_capafunction iwl_parse_nvm_mcc_infofunction iwl_nvm_fixupsfunction iwl_read_external_nvm
Annotated Snippet
if (!is_ap) {
iftype_data->he_cap.he_cap_elem.phy_cap_info[7] |=
IEEE80211_HE_PHY_CAP7_MAX_NC_2;
if (iftype_data->eht_cap.has_eht) {
/*
* Set the number of sounding dimensions for each
* bandwidth to 1 to indicate the maximal supported
* value of TXVECTOR parameter NUM_STS of 2
*/
iftype_data->eht_cap.eht_cap_elem.phy_cap_info[2] |= 0x49;
/*
* Set the MAX NC to 1 to indicate sounding feedback of
* 2 supported by the beamfomee.
*/
iftype_data->eht_cap.eht_cap_elem.phy_cap_info[4] |= 0x10;
}
}
if (slow_pcie) {
struct ieee80211_eht_mcs_nss_supp *mcs_nss =
&iftype_data->eht_cap.eht_mcs_nss_supp;
mcs_nss->bw._320.rx_tx_mcs11_max_nss = 0;
mcs_nss->bw._320.rx_tx_mcs13_max_nss = 0;
}
} else {
struct ieee80211_he_mcs_nss_supp *he_mcs_nss_supp =
&iftype_data->he_cap.he_mcs_nss_supp;
if (iftype_data->eht_cap.has_eht) {
struct ieee80211_eht_mcs_nss_supp *mcs_nss =
&iftype_data->eht_cap.eht_mcs_nss_supp;
memset(mcs_nss, 0x11, sizeof(*mcs_nss));
}
if (!is_ap) {
/* If not 2x2, we need to indicate 1x1 in the
* Midamble RX Max NSTS - but not for AP mode
*/
iftype_data->he_cap.he_cap_elem.phy_cap_info[1] &=
~IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS;
iftype_data->he_cap.he_cap_elem.phy_cap_info[2] &=
~IEEE80211_HE_PHY_CAP2_MIDAMBLE_RX_TX_MAX_NSTS;
iftype_data->he_cap.he_cap_elem.phy_cap_info[7] |=
IEEE80211_HE_PHY_CAP7_MAX_NC_1;
}
he_mcs_nss_supp->rx_mcs_80 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
he_mcs_nss_supp->tx_mcs_80 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
he_mcs_nss_supp->rx_mcs_160 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
he_mcs_nss_supp->tx_mcs_160 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
he_mcs_nss_supp->rx_mcs_80p80 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
he_mcs_nss_supp->tx_mcs_80p80 |=
cpu_to_le16(IEEE80211_HE_MCS_NOT_SUPPORTED << 2);
}
/* prior RFs don't have HE, HR RF doesn't have this, later have it */
if (CSR_HW_RFID_TYPE(trans->info.hw_rf_id) == IWL_CFG_RF_TYPE_HR1 ||
CSR_HW_RFID_TYPE(trans->info.hw_rf_id) == IWL_CFG_RF_TYPE_HR2)
iftype_data->he_cap.he_cap_elem.phy_cap_info[9] &=
~(IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU);
if (trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_AX210 && !is_ap)
iftype_data->he_cap.he_cap_elem.phy_cap_info[2] |=
IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO;
if (trans->mac_cfg->device_family == IWL_DEVICE_FAMILY_22000 &&
!is_ap) {
iftype_data->vendor_elems.data = iwl_vendor_caps;
iftype_data->vendor_elems.len = ARRAY_SIZE(iwl_vendor_caps);
}
if (!trans->cfg->ht_params.stbc) {
iftype_data->he_cap.he_cap_elem.phy_cap_info[2] &=
~IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ;
iftype_data->he_cap.he_cap_elem.phy_cap_info[7] &=
~IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ;
}
if (trans->step_urm) {
iftype_data->eht_cap.eht_mcs_nss_supp.bw._320.rx_tx_mcs11_max_nss = 0;
Annotation
- Immediate include surface: `linux/types.h`, `linux/fips.h`, `linux/slab.h`, `linux/export.h`, `linux/etherdevice.h`, `linux/pci.h`, `linux/firmware.h`, `iwl-drv.h`.
- Detected declarations: `enum nvm_offsets`, `enum ext_nvm_offsets`, `enum nvm_sku_bits`, `enum iwl_reg_capa_flags_v1`, `enum iwl_reg_capa_flags_v2`, `enum iwl_reg_capa_flags_v5`, `function iwl_nvm_print_channel_flags`, `function iwl_get_channel_flags`, `function iwl_nl80211_band_from_channel_idx`, `function iwl_init_channel_map`.
- 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.