drivers/net/wireless/intel/iwlwifi/mld/scan.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/intel/iwlwifi/mld/scan.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/intel/iwlwifi/mld/scan.c- Extension
.c- Size
- 65811 bytes
- Lines
- 2323
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source 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.
- 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/crc32.hiwl-utils.hmld.hscan.hhcmd.hiface.hphy.hmlo.hfw/api/scan.hfw/dbg.h
Detected Declarations
struct iwl_mld_scan_timing_paramsstruct iwl_mld_scan_paramsstruct iwl_scan_req_params_ptrsstruct iwl_mld_scan_respect_p2p_go_iter_datastruct iwl_mld_scan_iter_datastruct iwl_scan_umac_handlerenum iwl_mld_scan_typefunction iwl_mld_scan_respect_p2p_go_iterfunction iwl_mld_get_respect_p2p_gofunction iwl_mld_scan_iteratorfunction for_each_set_bitfunction iwl_mld_get_scan_typefunction iwl_mld_scan_add_2ghz_elemsfunction iwl_mld_scan_add_tpc_report_elemfunction iwl_mld_scan_ooc_priorityfunction iwl_mld_scan_is_regularfunction iwl_mld_scan_is_fragmentedfunction iwl_mld_scan_uid_by_statusfunction iwl_mld_scan_ebs_status_strfunction iwl_mld_scan_ssid_existfunction iwl_mld_scan_fitsfunction iwl_mld_scan_build_probe_reqfunction iwl_mld_scan_get_cmd_gen_flagsfunction iwl_mld_scan_get_cmd_gen_flags2function iwl_mld_scan_cmd_set_dwellfunction iwl_mld_scan_cmd_set_gen_paramsfunction iwl_mld_scan_cmd_set_sched_paramsfunction iwl_mld_scan_cmd_build_ssidsfunction iwl_mld_scan_fill_6g_chan_listfunction iwl_mld_scan_cmd_set_probe_paramsfunction iwl_mld_scan_use_ebsfunction iwl_mld_scan_cmd_set_chan_flagsfunction iwl_mld_scan_ch_n_aps_flagfunction iwl_mld_scan_cmd_set_channelsfunction iwl_mld_scan_cfg_channels_6gfunction iwl_mld_scan_cmd_set_6ghz_chan_paramsfunction iwl_mld_scan_cmd_set_chan_paramsfunction iwl_mld_scan_umac_commonfunction iwl_mld_scan_umac_v18function iwl_mld_scan_umac_v17function iwl_mld_scan_build_cmdfunction iwl_mld_scan_pass_allfunction iwl_mld_config_sched_scan_profilesfunction iwl_mld_sched_scan_handle_non_psc_channelsfunction iwl_mld_scan_6ghz_passive_scanfunction time_afterfunction iwl_mld_scan_set_link_idfunction _iwl_mld_single_scan_start
Annotated Snippet
struct iwl_mld_scan_timing_params {
u32 suspend_time;
u32 max_out_time;
};
static const struct iwl_mld_scan_timing_params scan_timing[] = {
[IWL_SCAN_TYPE_UNASSOC] = {
.suspend_time = 0,
.max_out_time = 0,
},
[IWL_SCAN_TYPE_WILD] = {
.suspend_time = 30,
.max_out_time = 120,
},
[IWL_SCAN_TYPE_MILD] = {
.suspend_time = 120,
.max_out_time = 120,
},
[IWL_SCAN_TYPE_FRAGMENTED] = {
.suspend_time = 95,
.max_out_time = 44,
},
[IWL_SCAN_TYPE_FAST_BALANCE] = {
.suspend_time = 30,
.max_out_time = 37,
},
};
struct iwl_mld_scan_params {
enum iwl_mld_scan_type type;
u32 n_channels;
u16 delay;
int n_ssids;
struct cfg80211_ssid *ssids;
struct ieee80211_channel **channels;
u32 flags;
u8 *mac_addr;
u8 *mac_addr_mask;
bool no_cck;
bool pass_all;
int n_match_sets;
struct iwl_scan_probe_req preq;
struct cfg80211_match_set *match_sets;
int n_scan_plans;
struct cfg80211_sched_scan_plan *scan_plans;
bool iter_notif;
bool respect_p2p_go;
u8 fw_link_id;
struct cfg80211_scan_6ghz_params *scan_6ghz_params;
u32 n_6ghz_params;
bool scan_6ghz;
bool enable_6ghz_passive;
u8 bssid[ETH_ALEN] __aligned(2);
};
struct iwl_scan_req_params_ptrs {
struct iwl_scan_general_params_v11 *general_params;
struct iwl_scan_channel_params_v8 *channel_params;
struct iwl_scan_periodic_parms_v1 *periodic_params;
struct iwl_scan_probe_params_v4 *probe_params;
};
struct iwl_mld_scan_respect_p2p_go_iter_data {
struct ieee80211_vif *current_vif;
bool p2p_go;
};
static void iwl_mld_scan_respect_p2p_go_iter(void *_data, u8 *mac,
struct ieee80211_vif *vif)
{
struct iwl_mld_scan_respect_p2p_go_iter_data *data = _data;
/* exclude the given vif */
if (vif == data->current_vif)
return;
/* TODO: CDB check the band of the GO */
if (ieee80211_vif_type_p2p(vif) == NL80211_IFTYPE_P2P_GO &&
iwl_mld_vif_from_mac80211(vif)->ap_ibss_active)
data->p2p_go = true;
}
static bool iwl_mld_get_respect_p2p_go(struct iwl_mld *mld,
struct ieee80211_vif *vif,
bool low_latency)
{
struct iwl_mld_scan_respect_p2p_go_iter_data data = {
.current_vif = vif,
.p2p_go = false,
};
Annotation
- Immediate include surface: `linux/crc32.h`, `iwl-utils.h`, `mld.h`, `scan.h`, `hcmd.h`, `iface.h`, `phy.h`, `mlo.h`.
- Detected declarations: `struct iwl_mld_scan_timing_params`, `struct iwl_mld_scan_params`, `struct iwl_scan_req_params_ptrs`, `struct iwl_mld_scan_respect_p2p_go_iter_data`, `struct iwl_mld_scan_iter_data`, `struct iwl_scan_umac_handler`, `enum iwl_mld_scan_type`, `function iwl_mld_scan_respect_p2p_go_iter`, `function iwl_mld_get_respect_p2p_go`, `function iwl_mld_scan_iterator`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source 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.