blob: 8426baf3027e0529135bab19782c0c7953893098 [file] [log] [blame] [edit]
// 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 fuchsia.hardware.wlanphyimpl;
using ddk.hw.wlan.wlaninfo;
using fuchsia.wlan.ieee80211 as ieee80211;
using zx;
/// Parameters to create an interface.
type WlanphyImplCreateIfaceReq = resource struct {
/// The station role for this interface. A device may support multiple roles,
/// but an interface is instantiated with a single role.
role ddk.hw.wlan.wlaninfo.WlanInfoMacRole;
/// A handle to the direct MLME channel, if supported by the driver.
mlme_channel zx.handle:CHANNEL;
/// Whether this iface creation request come with an initial station address.
has_init_sta_addr bool;
/// The initial station address set from configuration layer.
init_sta_addr ieee80211.MacAddr;
};
/// Info about this WLAN PHY.
type WlanphyImplInfo = struct {
/// Bitmask for MAC roles supported. For an interface, this will be a single
/// value.
supported_mac_roles ddk.hw.wlan.wlaninfo.WlanInfoMacRole;
};
const WLANPHY_ALPHA2_LEN uint8 = 2;
@packed
type WlanphyCountry = strict 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>;
2: val uint16;
};
@transport("Banjo")
@banjo_layout("ddk-protocol")
protocol WlanphyImpl {
/// Get information about the capabilities of the physical device.
Query() -> (struct {
s zx.status;
info WlanphyImplInfo;
});
/// 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 struct {
req WlanphyImplCreateIfaceReq;
}) -> (struct {
s zx.status;
iface_id uint16;
});
/// Destroy the interface with the matching id.
DestroyIface(struct {
iface_id uint16;
}) -> (struct {
s zx.status;
});
/// Set country with a WlanphyCountry
SetCountry(struct {
country WlanphyCountry;
}) -> (struct {
s zx.status;
});
/// Set device to a world-safe country
ClearCountry() -> (struct {
s zx.status;
});
/// Read currently configured country. Implementations are advised to read the
/// country directly from the firmware, where possible.
GetCountry() -> (struct {
s zx.status;
country WlanphyCountry;
});
};