| // Copyright 2020 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. |
| |
| #ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_PCIE_DEVICE_H_ |
| #define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_PCIE_DEVICE_H_ |
| |
| #include <lib/ddk/device.h> |
| |
| #include <memory> |
| |
| #include "third_party/iwlwifi/platform/kernel.h" |
| #include "third_party/iwlwifi/platform/wlanphy-impl-device.h" |
| |
| namespace async { |
| class Loop; |
| } // namespace async |
| |
| namespace wlan::iwlwifi { |
| |
| class DriverInspector; |
| |
| // This class contains the Fuchsia-specific PCIE bus initialization logic, using the DDKTL classes |
| // to manage the lifetime of a iwlwifi driver instance. |
| class PcieDevice : public WlanphyImplDevice { |
| public: |
| PcieDevice(const PcieDevice& device) = delete; |
| PcieDevice& operator=(const PcieDevice& other) = delete; |
| virtual ~PcieDevice() override; |
| |
| // Creates and binds PcieDevice instance. On success hands device off to device lifecycle |
| // management. |
| static zx_status_t Create(zx_device_t* parent_device); |
| |
| // Device implementation. |
| iwl_trans* drvdata() override; |
| const iwl_trans* drvdata() const override; |
| void DdkInit(::ddk::InitTxn txn) override; |
| void DdkUnbind(::ddk::UnbindTxn txn) override; |
| |
| protected: |
| explicit PcieDevice(zx_device_t* parent); |
| |
| std::unique_ptr<DriverInspector> driver_inspector_; |
| std::unique_ptr<::async::Loop> task_loop_; |
| std::unique_ptr<::async::Loop> irq_loop_; |
| iwl_pci_dev pci_dev_; |
| }; |
| |
| } // namespace wlan::iwlwifi |
| |
| #endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_PLATFORM_PCIE_DEVICE_H_ |