blob: b2d0896218a3fa022acaae562c3a88eab1b9a3d2 [file] [log] [blame]
// 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.
#include "third_party/iwlwifi/test/sim-scan.h"
#include <string.h>
#include <zircon/assert.h>
extern "C" {
#include "third_party/iwlwifi/mvm/mvm.h"
}
namespace wlan::testing {
zx_status_t HandleScanAbort(struct iwl_trans* trans, struct iwl_host_cmd* cmd) {
// Since callbacks have not been implemented, pretend to notify scan cancellation.
struct iwl_umac_scan_complete scan_notif{.status = IWL_SCAN_OFFLOAD_ABORTED};
struct iwl_iobuf* io_buf = nullptr;
iwl_mvm* mvm = iwl_trans_get_mvm(trans);
if (iwl_iobuf_allocate_contiguous(trans->dev, sizeof(scan_notif) + sizeof(struct iwl_rx_packet),
&io_buf) == ZX_OK) {
struct iwl_rx_packet* pkt = reinterpret_cast<struct iwl_rx_packet*>(iwl_iobuf_virtual(io_buf));
// Most fields are not cared but initialized with known values.
pkt->len_n_flags = cpu_to_le32(0);
pkt->hdr.cmd = 0;
pkt->hdr.group_id = 0;
pkt->hdr.sequence = 0;
memcpy(pkt->data, &scan_notif, sizeof(scan_notif));
struct iwl_rx_cmd_buffer* rx_cmd = reinterpret_cast<struct iwl_rx_cmd_buffer*>(io_buf);
rx_cmd->_iobuf = io_buf;
rx_cmd->_offset = 0;
iwl_mvm_rx_umac_scan_complete_notif(mvm, rx_cmd);
iwl_iobuf_release(io_buf);
return ZX_OK;
}
return ZX_ERR_NO_RESOURCES;
}
} // namespace wlan::testing