| // 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. |
| |
| // |
| // Simulated firmware for iwlwifi. |
| // |
| // This class actually simulates a transport layer ops (just like a PCI-e bus). |
| // |
| // By the way, this class also holds a 'iwl_trans' instance, which contains 'op_mode' and 'mvm' |
| // after Init() is called. |
| |
| #ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_SIM_TRANS_H_ |
| #define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_SIM_TRANS_H_ |
| |
| #include <memory> |
| |
| #include "third_party/iwlwifi/platform/kernel.h" |
| #include "third_party/iwlwifi/test/sim-mvm.h" |
| |
| namespace async { |
| |
| class Loop; |
| |
| } // namespace async |
| |
| namespace wlan { |
| namespace iwlwifi { |
| |
| class RcuManager; |
| class WlanphyImplDevice; |
| |
| } // namespace iwlwifi |
| |
| namespace testing { |
| |
| // The struct to store the internal state of the simulated firmware. |
| struct sim_trans_priv { |
| SimMvm* fw; |
| |
| // The pointer pointing back to a Test case for mock functions. This must be initialized before |
| // mock functions are called. |
| void* test; |
| }; |
| |
| static inline struct sim_trans_priv* IWL_TRANS_GET_SIM_TRANS(struct iwl_trans* trans) { |
| return (struct sim_trans_priv*)trans->trans_specific; |
| } |
| |
| class SimTransport : public SimMvm { |
| public: |
| explicit SimTransport(zx_device_t* parent); |
| ~SimTransport(); |
| |
| // This function must be called before starting using other functions. |
| zx_status_t Init(); |
| |
| // Member accessors. |
| struct iwl_trans* iwl_trans(); |
| const struct iwl_trans* iwl_trans() const; |
| ::wlan::iwlwifi::WlanphyImplDevice* sim_device(); |
| const ::wlan::iwlwifi::WlanphyImplDevice* sim_device() const; |
| |
| private: |
| std::unique_ptr<::async::Loop> task_loop_; |
| std::unique_ptr<::async::Loop> irq_loop_; |
| std::unique_ptr<::wlan::iwlwifi::RcuManager> rcu_manager_; |
| struct device device_; |
| struct iwl_trans* iwl_trans_; |
| wlan::iwlwifi::WlanphyImplDevice* sim_device_; |
| }; |
| |
| } // namespace testing |
| } // namespace wlan |
| |
| #endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_SIM_TRANS_H_ |