blob: 498228e32191d744d9d574c0c5e0b31c30f0f9e0 [file] [log] [blame]
// Copyright 2021 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.
#include <fuchsia/hardware/wlan/mac/cpp/banjo.h>
#include <fuchsia/wlan/ieee80211/c/banjo.h>
#include <fuchsia/wlan/internal/cpp/banjo.h>
#include <lib/ddk/device.h>
#include <ddktl/device.h>
#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_WLANMAC_DEVICE_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_WLANMAC_DEVICE_H_
struct iwl_mvm_vif;
struct iwl_trans;
namespace wlan::iwlwifi {
class WlanmacDevice;
using WlanmacDeviceType = ddk::Device<WlanmacDevice, ddk::Initializable, ddk::Unbindable>;
class WlanmacDevice : public WlanmacDeviceType,
public ::ddk::WlanmacProtocol<WlanmacDevice, ::ddk::base_protocol> {
public:
WlanmacDevice(zx_device* parent, iwl_trans* drvdata, uint16_t iface_id,
struct iwl_mvm_vif* mvmvif)
: WlanmacDeviceType(parent), mvmvif_(mvmvif), drvdata_(drvdata), iface_id_(iface_id){}
~WlanmacDevice() = default;
void DdkInit(ddk::InitTxn txn);
void DdkRelease();
void DdkUnbind(ddk::UnbindTxn txn);
// Wlanmac interface implementation.
zx_status_t WlanmacQuery(uint32_t options, wlanmac_info_t* out_info);
zx_status_t WlanmacStart(const wlanmac_ifc_protocol_t* ifc, zx::channel* out_mlme_channel);
void WlanmacStop();
zx_status_t WlanmacQueueTx(uint32_t options, const wlan_tx_packet_t* packet);
zx_status_t WlanmacSetChannel(uint32_t options, const wlan_channel_t* channel);
zx_status_t WlanmacConfigureBss(uint32_t options, const bss_config_t* config);
zx_status_t WlanmacEnableBeaconing(uint32_t options, const wlan_bcn_config_t* bcn_cfg);
zx_status_t WlanmacConfigureBeacon(uint32_t options, const wlan_tx_packet_t* pkt);
zx_status_t WlanmacSetKey(uint32_t options, const wlan_key_config_t* key_config);
zx_status_t WlanmacConfigureAssoc(uint32_t options, const wlan_assoc_ctx_t* assoc_ctx);
zx_status_t WlanmacClearAssoc(uint32_t options,
const uint8_t peer_addr_list[fuchsia_wlan_ieee80211_MAC_ADDR_LEN]);
zx_status_t WlanmacStartHwScan(const wlan_hw_scan_config_t* scan_config);
zx_status_t WlanmacUpdateWmmParams(wlan_ac_t ac, const wlan_wmm_params_t* params);
protected:
struct iwl_mvm_vif* mvmvif_;
private:
iwl_trans* drvdata_;
uint16_t iface_id_;
};
} // namespace wlan::iwlwifi
#endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_WLANMAC_DEVICE_H_