blob: 7c5f192ac526a20d29c8c525bfd00ce144ddf750 [file] [log] [blame] [edit]
// Copyright 2022 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.
/// Acronyms
/// Iface: Interface
/// Phy: Physical
/// Mac: Medium Access Control
/// Sta: Station
/// Addr: Address
library fuchsia.wlan.wlanphyimpl;
using fuchsia.wlan.common;
using fuchsia.wlan.ieee80211 as ieee80211;
using zx;
const WLANPHY_ALPHA2_LEN uint8 = 2;
type WlanPhyCountry = flexible union {
/// ISO Alpha-2 takes two octet alphabet characters.
/// This needs to be expanded if at least one WLAN device driver or firmware
/// requires more than two octets.
1: alpha2 array<uint8, WLANPHY_ALPHA2_LEN>;
};
@discoverable
@transport("Driver")
protocol WlanPhyImpl {
/// MAC roles supported for ifaces on the physical device.
GetSupportedMacRoles() -> (struct {
supported_mac_roles
vector<fuchsia.wlan.common.WlanMacRole>:fuchsia.wlan.common.MAX_SUPPORTED_MAC_ROLES;
}) error zx.status;
/// Create a new interface with the specified role, returning the interface id.
/// Some common error codes are:
/// ZX_ERR_NO_RESOURCES: maximum number of interfaces have already been created
/// ZX_ERR_NOT_SUPPORTED: device does not support the specified role
CreateIface(resource table {
/// The station role for this interface. A device may support multiple roles,
/// but an interface is instantiated with a single role. This field is required.
1: role fuchsia.wlan.common.WlanMacRole;
/// A handle to the direct MLME channel, if supported by the driver. This
/// channel should be used by SME to communicate with MLME via the MLME
/// protocol. This field is required.
2: mlme_channel zx.handle:CHANNEL;
/// The initial station address set from configuration layer. This field is optional.
3: init_sta_addr ieee80211.MacAddr;
}) -> (table {
/// This field is always present.
1: iface_id uint16;
}) error zx.status;
/// Destroy the interface with the matching id.
/// Some common error codes are:
/// ZX_ERR_NOT_FOUND: Specified iface does not exist or has already been removed.
/// ZX_ERR_UNAVAILABLE: Device is busy and cannot be removed, try again later.
DestroyIface(table {
/// This field is required.
1: iface_id uint16;
}) -> () error zx.status;
/// Set country with a WlanPhyCountry.
/// Some common error codes are:
/// ZX_ERR_NOT_FOUND: Specified country code not supported. PHY state is left unchanged.
SetCountry(struct {
country WlanPhyCountry;
}) -> () error zx.status;
/// Set device to a world-safe country, i.e. a mode that conforms to all
/// regulatory constraints globally.
/// Generally expected to succeed if the device is in a functional state.
ClearCountry() -> () error zx.status;
/// Read currently configured country. Implementations are advised to read the
/// country directly from the firmware, where possible.
/// Generally expected to succeed if the device is in a functional state.
GetCountry() -> (struct {
country WlanPhyCountry;
}) error zx.status;
/// Set Power Save mode On/Off on device. In most implementations this
/// likely to be set in Firmware.
/// Some common error codes are:
/// ZX_ERR_NOT_SUPPORTED: Specified Power Save mode not supported.
SetPowerSaveMode(table {
/// This field is required.
1: ps_mode fuchsia.wlan.common.PowerSaveType;
}) -> () error zx.status;
/// Get current Power Save Mode from device. In most implementation this
/// likely to be retrieved from Firmware.
GetPowerSaveMode() -> (table {
/// This field is required.
1: ps_mode fuchsia.wlan.common.PowerSaveType;
}) error zx.status;
};