blob: a7f6ebe2e3e92ab0b39a39f2c6b8613510eda8a7 [file] [log] [blame]
// 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 "msd_img_semaphore.h"
std::unique_ptr<MsdImgSemaphore>
MsdImgSemaphore::Import(uint32_t handle)
{
auto platform_semaphore = magma::PlatformSemaphore::Import(handle);
if (!platform_semaphore)
return DRETP(nullptr, "MsdImgSemaphore::Create: Could not create platform semaphore from token");
return std::make_unique<MsdImgSemaphore>(std::move(platform_semaphore));
}
std::unique_ptr<MsdImgSemaphore>
MsdImgSemaphore::Create()
{
auto platform_semaphore = magma::PlatformSemaphore::Create();
if (!platform_semaphore)
return DRETP(nullptr, "MsdImgSemaphore::Create: Could not create platform semaphore");
return std::make_unique<MsdImgSemaphore>(std::move(platform_semaphore));
}
MsdImgSemaphore::MsdImgSemaphore(std::unique_ptr<magma::PlatformSemaphore> platform_semaphore)
: platform_semaphore_(std::move(platform_semaphore))
{
}
MsdImgSemaphore::~MsdImgSemaphore() = default;
//////////////////////////////////////////////////////////////////////////////
magma_status_t
msd_semaphore_import(uint32_t handle, msd_semaphore_t** semaphore_out)
{
auto semaphore = MsdImgSemaphore::Import(handle);
if (!semaphore)
{
return DRET(MAGMA_STATUS_INVALID_ARGS);
}
*semaphore_out = new MsdImgAbiSemaphore(std::move(semaphore));
return MAGMA_STATUS_OK;
}
void
msd_semaphore_release(msd_semaphore_t* semaphore)
{
delete MsdImgAbiSemaphore::cast(semaphore);
}