| // 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 |