| // 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 ZIRCON_SYSTEM_ULIB_CLOCKTREE_TEST_TESTCLOCK_H_ | |
| #define ZIRCON_SYSTEM_ULIB_CLOCKTREE_TEST_TESTCLOCK_H_ | |
| #include "baseclock.h" | |
| namespace clk { | |
| // Trivial Clock implementation that doesn't support any operations. | |
| class TestNullClock : public BaseClock { | |
| public: | |
| TestNullClock(const char* name, uint32_t id, uint32_t parent) | |
| : BaseClock(name, id), parent_(parent) {} | |
| zx_status_t Enable() override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t Disable() override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t IsHwEnabled(bool* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t SetRate(const Hertz rate, const Hertz parent_rate) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| zx_status_t QuerySupportedRate(const Hertz max, const Hertz parent_rate, Hertz* out) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| zx_status_t GetRate(const Hertz parent_rate, Hertz* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t SetInput(const uint32_t index) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetNumInputs(uint32_t* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetInput(uint32_t* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetInputId(const uint32_t index, uint32_t* id) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| uint32_t ParentId() override final { return parent_; } | |
| private: | |
| const uint32_t parent_; | |
| }; | |
| class TestGateClock : public BaseClock { | |
| public: | |
| TestGateClock(const char* name, uint32_t id, uint32_t parent, bool enabled = false) | |
| : BaseClock(name, id), | |
| parent_(parent), | |
| enabled_(enabled), | |
| enable_count_(0), | |
| disable_count_(0) {} | |
| zx_status_t Enable() override final { | |
| enable_count_++; | |
| enabled_ = true; | |
| return ZX_OK; | |
| } | |
| zx_status_t Disable() override final { | |
| disable_count_++; | |
| enabled_ = false; | |
| return ZX_OK; | |
| } | |
| zx_status_t IsHwEnabled(bool* out) override final { | |
| *out = enabled_; | |
| return ZX_OK; | |
| } | |
| zx_status_t SetRate(const Hertz rate, const Hertz parent_rate) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| zx_status_t QuerySupportedRate(const Hertz max, const Hertz parent_rate, Hertz* out) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| zx_status_t GetRate(const Hertz parent_rate, Hertz* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t SetInput(const uint32_t index) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetNumInputs(uint32_t* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetInput(uint32_t* out) override { return ZX_ERR_NOT_SUPPORTED; } | |
| zx_status_t GetInputId(const uint32_t index, uint32_t* id) override { | |
| return ZX_ERR_NOT_SUPPORTED; | |
| } | |
| uint32_t ParentId() override final { return parent_; } | |
| uint32_t EnableCount() const { return enable_count_; } | |
| uint32_t DisableCount() const { return disable_count_; } | |
| private: | |
| const uint32_t parent_; | |
| bool enabled_; | |
| uint32_t enable_count_; | |
| uint32_t disable_count_; | |
| }; | |
| // Simple clock implementation that returns ZX_ERR_INTERNAL for each call. | |
| class TestFailClock : public BaseClock { | |
| public: | |
| TestFailClock(const char* name, uint32_t id, uint32_t parent) | |
| : BaseClock(name, id), parent_(parent) {} | |
| zx_status_t Enable() override { return ZX_ERR_INTERNAL; } | |
| zx_status_t Disable() override { return ZX_ERR_INTERNAL; } | |
| zx_status_t IsHwEnabled(bool* out) override { return ZX_ERR_INTERNAL; } | |
| zx_status_t SetRate(const Hertz rate, const Hertz parent_rate) override { | |
| return ZX_ERR_INTERNAL; | |
| } | |
| zx_status_t QuerySupportedRate(const Hertz max, const Hertz parent_rate, Hertz* out) override { | |
| return ZX_ERR_INTERNAL; | |
| } | |
| zx_status_t GetRate(const Hertz parent_rate, Hertz* out) override { return ZX_ERR_INTERNAL; } | |
| zx_status_t SetInput(const uint32_t index) override { return ZX_ERR_INTERNAL; } | |
| zx_status_t GetNumInputs(uint32_t* out) override { return ZX_ERR_INTERNAL; } | |
| zx_status_t GetInput(uint32_t* out) override { return ZX_ERR_INTERNAL; } | |
| zx_status_t GetInputId(const uint32_t index, uint32_t* id) override { return ZX_ERR_INTERNAL; } | |
| uint32_t ParentId() override final { return parent_; } | |
| private: | |
| const uint32_t parent_; | |
| }; | |
| class TestMuxClockTrivial : public BaseClock { | |
| public: | |
| TestMuxClockTrivial(const char* name, const uint32_t id, const uint32_t* parents, uint32_t n) | |
| : BaseClock(name, id), parents_(parents), n_(n), index_(0) {} | |
| /// Clock Gating Control. | |
| virtual zx_status_t Enable() override { return ZX_ERR_NOT_SUPPORTED; }; | |
| virtual zx_status_t Disable() override { return ZX_ERR_NOT_SUPPORTED; }; | |
| virtual zx_status_t IsHwEnabled(bool* out) override { return ZX_ERR_NOT_SUPPORTED; }; | |
| // Clock frequency control. | |
| virtual zx_status_t SetRate(const Hertz rate, const Hertz parent_rate) override { return ZX_ERR_NOT_SUPPORTED; }; | |
| virtual zx_status_t QuerySupportedRate(const Hertz max, const Hertz parent_rate, Hertz* out) override { return ZX_ERR_NOT_SUPPORTED; }; | |
| virtual zx_status_t GetRate(const Hertz parent_rate, Hertz* out) override { return ZX_ERR_NOT_SUPPORTED; }; | |
| zx_status_t SetInput(const uint32_t index) override; | |
| zx_status_t GetNumInputs(uint32_t* out) override; | |
| zx_status_t GetInput(uint32_t* out) override; | |
| zx_status_t GetInputId(const uint32_t index, uint32_t* id) override; | |
| uint32_t ParentId() override; | |
| private: | |
| const uint32_t* parents_; | |
| const uint32_t n_; | |
| uint32_t index_; | |
| }; | |
| class TestMuxClockFail : public TestMuxClockTrivial { | |
| public: | |
| TestMuxClockFail(const char* name, const uint32_t id, const uint32_t* parents, uint32_t n) | |
| : TestMuxClockTrivial(name, id, parents, n) {} | |
| zx_status_t SetInput(const uint32_t index) override { return ZX_ERR_INTERNAL; } | |
| }; | |
| } // namespace clk | |
| #endif // ZIRCON_SYSTEM_ULIB_CLOCKTREE_TEST_TESTCLOCK_H_ |