blob: f04437a78693ea020219243fec12cd0f183553d7 [file] [log] [blame]
// 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.
#include <zxtest/zxtest.h>
#include "third_party/iwlwifi/test/sim-nvm.h"
extern "C" {
#include "third_party/iwlwifi/mvm/mvm.h"
}
#include "third_party/iwlwifi/iwl-drv.h"
#include "third_party/iwlwifi/test/fake-ucode-test.h"
namespace wlan::testing {
namespace {
class NvmTest : public FakeUcodeTest {
public:
NvmTest() : FakeUcodeTest(0, BIT(IWL_UCODE_TLV_CAPA_LAR_SUPPORT), 0, 0) {}
~NvmTest() {}
};
// Please refer the default NVM data in sim-default-nvm.cc. The expected values in this test
// are based on those binary data.
TEST_F(NvmTest, TestParsingDefaultNvm) {
auto mvm = iwl_trans_get_mvm(sim_trans_.iwl_trans());
auto data = mvm->nvm_data;
EXPECT_EQ(data->nvm_version, 0xc16);
// Compare the parsed MAC address
uint8_t expected_mac[] = {0xb4, 0xd5, 0xbd, 0x11, 0x22, 0x33};
EXPECT_BYTES_EQ(expected_mac, data->hw_addr, sizeof(expected_mac));
EXPECT_EQ(data->n_hw_addrs, 5);
// Radio config
EXPECT_EQ(data->radio_cfg_type, NVM_RF_CFG_TYPE_MSK(0x33d0));
// Features
EXPECT_EQ(data->sku_cap_band_24ghz_enable, true);
EXPECT_EQ(data->sku_cap_band_52ghz_enable, true);
EXPECT_EQ(data->sku_cap_11n_enable, true);
EXPECT_EQ(data->sku_cap_11ac_enable, true);
EXPECT_EQ(data->sku_cap_mimo_disabled, false);
EXPECT_EQ(data->calib_version, 255);
// Band and channel info
// - 2G band
EXPECT_EQ(data->bands[WLAN_INFO_BAND_TWO_GHZ].band, WLAN_INFO_BAND_TWO_GHZ);
EXPECT_EQ(data->bands[WLAN_INFO_BAND_TWO_GHZ].n_channels, 14);
EXPECT_EQ(data->bands[WLAN_INFO_BAND_TWO_GHZ].channels[0].ch_num, 1);
// - 5G band
EXPECT_EQ(data->bands[WLAN_INFO_BAND_FIVE_GHZ].band, WLAN_INFO_BAND_FIVE_GHZ);
EXPECT_EQ(data->bands[WLAN_INFO_BAND_FIVE_GHZ].n_channels, 25);
EXPECT_EQ(data->bands[WLAN_INFO_BAND_FIVE_GHZ].channels[0].ch_num, 36);
}
TEST_F(NvmTest, CfgRatesTo80211) {
EXPECT_EQ(2, cfg_rates_to_80211(1 * 10)); // 1 Mbps
}
TEST_F(NvmTest, UpdateMcc) {
auto mvm = iwl_trans_get_mvm(sim_trans_.iwl_trans());
struct iwl_mcc_update_resp *resp;
mtx_lock(&mvm->mutex);
EXPECT_EQ(ZX_OK, iwl_mvm_update_mcc(mvm, "US", MCC_SOURCE_WIFI, &resp));
mtx_unlock(&mvm->mutex);
EXPECT_EQ(resp->mcc, 0x5553); // "US"
free(resp);
}
TEST_F(NvmTest, InitMcc) {
auto mvm = iwl_trans_get_mvm(sim_trans_.iwl_trans());
mtx_lock(&mvm->mutex);
EXPECT_EQ(ZX_OK, iwl_mvm_init_mcc(mvm));
mtx_unlock(&mvm->mutex);
EXPECT_EQ(true, mvm->lar_regdom_set);
}
} // namespace
} // namespace wlan::testing