| // Copyright 2016 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 GARNET_LIB_MAGMA_SRC_SYS_DRIVER_MAGMA_SYSTEM_CONTEXT_H_ |
| #define GARNET_LIB_MAGMA_SRC_SYS_DRIVER_MAGMA_SYSTEM_CONTEXT_H_ |
| |
| #include <functional> |
| #include <memory> |
| |
| #include "magma_system_buffer.h" |
| #include "magma_system_semaphore.h" |
| #include "magma_util/status.h" |
| #include "msd.h" |
| |
| using msd_context_unique_ptr_t = std::unique_ptr<msd_context_t, decltype(&msd_context_destroy)>; |
| |
| static inline msd_context_unique_ptr_t MsdContextUniquePtr(msd_context_t* context) |
| { |
| return msd_context_unique_ptr_t(context, &msd_context_destroy); |
| } |
| |
| class MagmaSystemContext { |
| public: |
| class Owner { |
| public: |
| virtual std::shared_ptr<MagmaSystemBuffer> LookupBufferForContext(uint64_t id) = 0; |
| virtual std::shared_ptr<MagmaSystemSemaphore> LookupSemaphoreForContext(uint64_t id) = 0; |
| }; |
| |
| MagmaSystemContext(Owner* owner, msd_context_unique_ptr_t msd_ctx) |
| : owner_(owner), msd_ctx_(std::move(msd_ctx)) |
| { |
| } |
| |
| magma::Status ExecuteCommandBuffer(std::unique_ptr<magma::PlatformBuffer> command_buffer); |
| magma::Status ExecuteImmediateCommands(uint64_t commands_size, void* commands, |
| uint64_t semaphore_count, uint64_t* semaphore_ids); |
| |
| private: |
| msd_context_t* msd_ctx() { return msd_ctx_.get(); } |
| |
| Owner* owner_; |
| |
| msd_context_unique_ptr_t msd_ctx_; |
| |
| friend class CommandBufferHelper; |
| }; |
| |
| #endif // GARNET_LIB_MAGMA_SRC_SYS_DRIVER_MAGMA_SYSTEM_CONTEXT_H_ |