blob: 6ca6084260c61ba96790fe226fa87e3f9aaebbaf [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
library ddk.hw.wlan.wlaninfo;
using ddk.hw.wlan.ieee80211;
enum WlanInfoMacRole {
/// Device operating as a non-AP station (i.e., a client of an AP).
client = 0x1;
/// Device operating as an access point.
ap = 0x2;
/// Device operating as a mesh node.
mesh = 0x4;
};
enum WlanInfoPhyType {
/// IEEE 802.11 for 1, 2 Mbps.
dsss = 0x01;
/// IEEE 802.11 for 5.5, 11 Mbps. ERP-CCK.
cck = 0x02;
/// IEEE 802.11g, 1, 2, 5,5, 11, 12, 24 Mbps + [6, 54] Mbps.
erp = 0x04;
/// IEEE 802.11a/g.
ofdm = 0x4;
/// IEEE 802.11n.
ht = 0x08;
/// IEEE 802.11ac.
vht = 0x10;
/// IEEE 802.11ax.
hew = 0x20;
};
enum WlanInfoDriverFeature {
/// Device or driver implements scanning.
scan_offload = 0x00000001;
/// Device or driver implements rate selection.
rate_selection = 0x00000002;
/// Device is not a physical device.
synth = 0x00000004;
/// Driver supports transmission reports, and will use the
/// wlanmac_ifc.report_tx_status() callback to report the status of each queued
/// transmission.
tx_status_report = 0x00000008;
/// Set this flag to indicate whether SME should trust this device or driver to
/// handle DFS channels correctly in an active scan (e.g. it makes sure DFS
/// channel is safe to transmit before doing so).
dfs = 0x00000010;
/// Temporary feature flag for incrementally transitioning drivers to use SME
/// channel on iface creation.
temp_direct_sme_channel = 0x40000000;
};
enum WlanInfoHardwareCapability {
/// Short packet preamble.
short_preamble = 0x01;
/// Spectrum management.
spectrum_mgmt = 0x02;
/// Short slot times after packet collision.
short_slot_time = 0x04;
/// Radio measurement.
radio_msmt = 0x08;
};
/// This is a simplified expression of channel starting frequencies. Expand this
/// list as Fuchsia evolves.
enum WlanInfoBand {
/// Channel starting frequency: 2.407 GHz.
2ghz = 0;
/// Channel starting frequency: 5.000 GHz.
5ghz = 1;
/// The number of defined bands.
count = 2;
};
/// The maximum number of supported channels in a WlanInfoChannelList.
const usize WLAN_INFO_CHANNEL_LIST_MAX_CHANNELS = 64;
/// A list of channels in a band. Channels are numbered as in IEEE Std 802.11-2016,
/// 17.3.8.4.2, where each channel is defined as:
///
/// (base_freq + 5 * n) MHz
///
/// where n is between 1 and 200 (inclusive). Here n represents the channel number.
///
/// Example:
/// Standard 2.4GHz channels:
/// base_freq = 2407 MHz
/// n = 1-14
struct WlanInfoChannelList {
/// The base frequency in this band.
uint16 base_freq;
/// A list of channel center frequencies, as multiples of 5 MHz above base_freq.
array<uint8>:WLAN_INFO_CHANNEL_LIST_MAX_CHANNELS channels;
};
/// The maximum number of basic rates in WlanInfoBandInfo.
const usize WLAN_INFO_BAND_INFO_MAX_BASIC_RATES = 12;
/// Information about a particular WLAN band. Capabilities are grouped by band, by
/// de facto industry standard.
struct WlanInfoBandInfo {
/// The supported band.
WlanInfoBand band;
/// HT PHY capabilities, if supported.
bool ht_supported;
ddk.hw.wlan.ieee80211.Ieee80211HtCapabilities ht_caps;
/// VHT PHY capabilities, if supported.
bool vht_supported;
ddk.hw.wlan.ieee80211.Ieee80211VhtCapabilities vht_caps;
/// Basic rates supported in this band, in units of 500 kbit/s (as defined in
/// IEEE Std 802.11-2016, 9.4.2.3). For example, 1 Mbit/s is represented as 0x02.
array<uint8>:WLAN_INFO_BAND_INFO_MAX_BASIC_RATES basic_rates;
/// Channels supported in this band.
WlanInfoChannelList supported_channels;
};
/// The maximum number of bands supported in a WlanInfo struct. For now this is 2
/// to keep the struct a small, fixed size.
const usize WLAN_INFO_MAX_BANDS = 2;
struct WlanInfo {
/// MAC address.
array<uint8>:6 mac_addr;
/// Bitmask for MAC roles supported. For an interface, this will be a single
/// value.
WlanInfoMacRole mac_role;
/// Bitmask indicating the WlanInfoPhyType values supported by the hardware.
WlanInfoPhyType supported_phys;
/// Bitmask indicating the WlanInfoDriverFeature values supported by the driver
/// and hardware.
WlanInfoDriverFeature driver_features;
/// Bitmask indicating WlanInfoHardwareCapability values.
WlanInfoHardwareCapability caps;
/// Supported bands.
array<WlanInfoBandInfo>:WLAN_INFO_MAX_BANDS bands;
usize bands_count;
};