// 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;

/// Role of a WLAN device.
enum WlanInfoMacRole : uint8 {
    /// 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;

    // FIDL enums don't allow two definitions of the same number, please use
    // WLAN_INFO_PHY_TYPE_OFDM.
    // TODO(http://fxbug.dev/74579): Clean this up.
    // IEEE 802.11a/g.
    //OFDM = 0x4;

    /// IEEE 802.11n.
    HT = 0x08;

    /// IEEE 802.11ac.
    VHT = 0x10;

    /// IEEE 802.11ax.
    HEW = 0x20;
};

const uint32 WLAN_INFO_PHY_TYPE_OFDM = 0x4;

enum WlanInfoDriverFeature : uint32 {
    /// 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;

    /// Driver responds to probe requests in hardware.
    PROBE_RESP_OFFLOAD = 0x00000020;

    /// Driver supports running the SAE handshake in SME.
    SAE_SME_AUTH = 0x00000040;

    /// Driver implements the SAE handshake.
    SAE_DRIVER_AUTH = 0x00000080;

    /// Driver supports management frame protection and IGTK installation.
    MFP = 0x00000100;
};

/// IEEE Std 802.11-206 Section 9.4.1.4 Capability Information Field
enum WlanInfoHardwareCapability : uint32 {
    /// Short packet preamble.
    SHORT_PREAMBLE = 0x0020;

    /// Spectrum management.
    SPECTRUM_MGMT = 0x0100;

    // QoS capable.
    QOS = 0x0200;

    /// Short slot times after packet collision.
    SHORT_SLOT_TIME = 0x0400;

    /// Radio measurement.
    RADIO_MSMT = 0x1000;

    // Supports simutaneous client-ap use
    // TODO(fxbug.dev/54923): Move SIMULTANEOUS_CLIENT_AP to a different Fuchsia specific capability enum.
    // This enum should only be used for IEEE 802.11 fields. This type should also be reduced
    // to uint16_t once this is done.
    SIMULTANEOUS_CLIENT_AP = 0x10000;
};

/// This is a simplified expression of channel starting frequencies. Expand this
/// list as Fuchsia evolves.
enum WlanInfoBand {
    /// Channel starting frequency: 2.407 GHz.
    TWO_GHZ = 0;

    /// Channel starting frequency: 5.000 GHz.
    FIVE_GHZ = 1;

    /// The number of defined bands.
    COUNT = 2;
};

const uint32 WLAN_INFO_BAND_2GHZ = 0;
const uint32 WLAN_INFO_BAND_5GHZ = 1;

/// The maximum number of supported channels in a WlanInfoChannelList.
const uint32 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 rates in WlanInfoBandInfo.
// IEEE Std 802.11-2016 defines 12 values in dot11SupportedDataRatesRxTable
const uint32 WLAN_INFO_BAND_INFO_MAX_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;

    /// 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_RATES 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 uint32 WLAN_INFO_MAX_BANDS = 2;
