drivers/net/wireless/ti/wlcore/event.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/ti/wlcore/event.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/ti/wlcore/event.c- Extension
.c- Size
- 9980 bytes
- Lines
- 390
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- 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
wlcore.hdebug.hio.hevent.hps.hscan.hwl12xx_80211.hhw_ops.h
Detected Declarations
function Copyrightfunction wlcore_event_rssi_triggerfunction wl1271_stop_ba_eventfunction for_each_set_bitfunction wlcore_event_soft_gemini_sensefunction wl12xx_for_each_wlvif_stafunction wlcore_event_sched_scan_completedfunction wlcore_event_ba_rx_constraintfunction wl12xx_for_each_wlviffunction wlcore_event_channel_switchfunction wl12xx_for_each_wlviffunction wlcore_event_dummy_packetfunction wlcore_disconnect_stafunction for_each_set_bitfunction wl12xx_for_each_wlvif_apfunction wlcore_event_max_tx_failurefunction wlcore_event_inactive_stafunction wlcore_event_roc_completefunction wlcore_event_beacon_lossfunction wl12xx_for_each_wlvif_stafunction wl1271_event_unmaskfunction wl1271_event_handleexport wlcore_event_fw_loggerexport wlcore_event_rssi_triggerexport wlcore_event_soft_gemini_senseexport wlcore_event_sched_scan_completedexport wlcore_event_ba_rx_constraintexport wlcore_event_channel_switchexport wlcore_event_dummy_packetexport wlcore_event_max_tx_failureexport wlcore_event_inactive_staexport wlcore_event_roc_completeexport wlcore_event_beacon_loss
Annotated Snippet
wl12xx_for_each_wlvif_sta(wl, wlvif) {
wl1271_recalc_rx_streaming(wl, wlvif);
}
}
}
EXPORT_SYMBOL_GPL(wlcore_event_soft_gemini_sense);
void wlcore_event_sched_scan_completed(struct wl1271 *wl,
u8 status)
{
wl1271_debug(DEBUG_EVENT, "PERIODIC_SCAN_COMPLETE_EVENT (status 0x%0x)",
status);
if (wl->sched_vif) {
ieee80211_sched_scan_stopped(wl->hw);
wl->sched_vif = NULL;
}
}
EXPORT_SYMBOL_GPL(wlcore_event_sched_scan_completed);
void wlcore_event_ba_rx_constraint(struct wl1271 *wl,
unsigned long roles_bitmap,
unsigned long allowed_bitmap)
{
struct wl12xx_vif *wlvif;
wl1271_debug(DEBUG_EVENT, "%s: roles=0x%lx allowed=0x%lx",
__func__, roles_bitmap, allowed_bitmap);
wl12xx_for_each_wlvif(wl, wlvif) {
if (wlvif->role_id == WL12XX_INVALID_ROLE_ID ||
!test_bit(wlvif->role_id , &roles_bitmap))
continue;
wlvif->ba_allowed = !!test_bit(wlvif->role_id,
&allowed_bitmap);
if (!wlvif->ba_allowed)
wl1271_stop_ba_event(wl, wlvif);
}
}
EXPORT_SYMBOL_GPL(wlcore_event_ba_rx_constraint);
void wlcore_event_channel_switch(struct wl1271 *wl,
unsigned long roles_bitmap,
bool success)
{
struct wl12xx_vif *wlvif;
struct ieee80211_vif *vif;
wl1271_debug(DEBUG_EVENT, "%s: roles=0x%lx success=%d",
__func__, roles_bitmap, success);
wl12xx_for_each_wlvif(wl, wlvif) {
if (wlvif->role_id == WL12XX_INVALID_ROLE_ID ||
!test_bit(wlvif->role_id , &roles_bitmap))
continue;
if (!test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS,
&wlvif->flags))
continue;
vif = wl12xx_wlvif_to_vif(wlvif);
if (wlvif->bss_type == BSS_TYPE_STA_BSS) {
ieee80211_chswitch_done(vif, success, 0);
cancel_delayed_work(&wlvif->channel_switch_work);
} else {
set_bit(WLVIF_FLAG_BEACON_DISABLED, &wlvif->flags);
ieee80211_csa_finish(vif, 0);
}
}
}
EXPORT_SYMBOL_GPL(wlcore_event_channel_switch);
void wlcore_event_dummy_packet(struct wl1271 *wl)
{
if (wl->plt) {
wl1271_info("Got DUMMY_PACKET event in PLT mode. FW bug, ignoring.");
return;
}
wl1271_debug(DEBUG_EVENT, "DUMMY_PACKET_ID_EVENT_ID");
wl1271_tx_dummy_packet(wl);
}
EXPORT_SYMBOL_GPL(wlcore_event_dummy_packet);
static void wlcore_disconnect_sta(struct wl1271 *wl, unsigned long sta_bitmap)
{
u32 num_packets = wl->conf.tx.max_tx_retries;
struct wl12xx_vif *wlvif;
Annotation
- Immediate include surface: `wlcore.h`, `debug.h`, `io.h`, `event.h`, `ps.h`, `scan.h`, `wl12xx_80211.h`, `hw_ops.h`.
- Detected declarations: `function Copyright`, `function wlcore_event_rssi_trigger`, `function wl1271_stop_ba_event`, `function for_each_set_bit`, `function wlcore_event_soft_gemini_sense`, `function wl12xx_for_each_wlvif_sta`, `function wlcore_event_sched_scan_completed`, `function wlcore_event_ba_rx_constraint`, `function wl12xx_for_each_wlvif`, `function wlcore_event_channel_switch`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration implementation candidate.
- 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.