net/mac80211/wbrf.c
Source file repositories/reference/linux-study-clean/net/mac80211/wbrf.c
File Facts
- System
- Linux kernel
- Corpus path
net/mac80211/wbrf.c- Extension
.c- Size
- 2287 bytes
- Lines
- 95
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/acpi_amd_wbrf.hlinux/units.hnet/cfg80211.hieee80211_i.h
Detected Declarations
function Copyrightfunction get_chan_freq_boundaryfunction get_ranges_from_chandeffunction ieee80211_add_wbrffunction ieee80211_remove_wbrf
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* Wifi Band Exclusion Interface for WLAN
* Copyright (C) 2023 Advanced Micro Devices
* Copyright (C) 2025 Intel Corporation
*
*/
#include <linux/acpi_amd_wbrf.h>
#include <linux/units.h>
#include <net/cfg80211.h>
#include "ieee80211_i.h"
void ieee80211_check_wbrf_support(struct ieee80211_local *local)
{
struct wiphy *wiphy = local->hw.wiphy;
struct device *dev;
if (!wiphy)
return;
dev = wiphy->dev.parent;
if (!dev)
return;
local->wbrf_supported = acpi_amd_wbrf_supported_producer(dev);
}
static void get_chan_freq_boundary(u32 center_freq, u32 bandwidth, u64 *start, u64 *end)
{
bandwidth *= KHZ_PER_MHZ;
center_freq *= KHZ_PER_MHZ;
*start = center_freq - bandwidth / 2;
*end = center_freq + bandwidth / 2;
/* Frequency in Hz is expected */
*start = *start * HZ_PER_KHZ;
*end = *end * HZ_PER_KHZ;
}
static void get_ranges_from_chandef(struct cfg80211_chan_def *chandef,
struct wbrf_ranges_in_out *ranges_in)
{
u64 start_freq1, end_freq1;
u64 start_freq2, end_freq2;
int bandwidth;
bandwidth = cfg80211_chandef_get_width(chandef);
get_chan_freq_boundary(chandef->center_freq1, bandwidth, &start_freq1, &end_freq1);
ranges_in->band_list[0].start = start_freq1;
ranges_in->band_list[0].end = end_freq1;
ranges_in->num_of_ranges = 1;
if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
get_chan_freq_boundary(chandef->center_freq2, bandwidth, &start_freq2, &end_freq2);
ranges_in->band_list[1].start = start_freq2;
ranges_in->band_list[1].end = end_freq2;
ranges_in->num_of_ranges++;
}
}
void ieee80211_add_wbrf(struct ieee80211_local *local, struct cfg80211_chan_def *chandef)
{
struct wbrf_ranges_in_out ranges_in = {0};
struct device *dev;
if (!local->wbrf_supported)
return;
dev = local->hw.wiphy->dev.parent;
get_ranges_from_chandef(chandef, &ranges_in);
acpi_amd_wbrf_add_remove(dev, WBRF_RECORD_ADD, &ranges_in);
}
void ieee80211_remove_wbrf(struct ieee80211_local *local, struct cfg80211_chan_def *chandef)
{
struct wbrf_ranges_in_out ranges_in = {0};
struct device *dev;
if (!local->wbrf_supported)
return;
dev = local->hw.wiphy->dev.parent;
Annotation
- Immediate include surface: `linux/acpi_amd_wbrf.h`, `linux/units.h`, `net/cfg80211.h`, `ieee80211_i.h`.
- Detected declarations: `function Copyright`, `function get_chan_freq_boundary`, `function get_ranges_from_chandef`, `function ieee80211_add_wbrf`, `function ieee80211_remove_wbrf`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- 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.