Newer
Older
mbed-os / platform / FEATURE_EXPERIMENTAL_API / FEATURE_PSA / TARGET_TFM / TARGET_TFM_V1_0 / TARGET_TFM_DUALCPU / src / tfm_multi_core_api.c
@Rajkumar Kanagaraj Rajkumar Kanagaraj on 21 Aug 2020 1 KB Move FEATURE_EXPERIMENTAL_API for PSA to platform
/*
 * Copyright (c) 2019, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *
 */

#include "tfm_api.h"
#include "tfm_mailbox.h"
#include "tfm_multi_core_api.h"
#include "cmsis_os2.h"
#include "mbed_rtos_storage.h"

#define MAX_SEMAPHORE_COUNT            NUM_MAILBOX_QUEUE_SLOT

static void *ns_lock_handle = NULL;
static mbed_rtos_storage_semaphore_t tfm_ns_sema_obj;

__attribute__((weak))
enum tfm_status_e tfm_ns_interface_init(void)
{
    osSemaphoreAttr_t sema_attrib = {
        .name = "tfm_ns_lock",
        .attr_bits = 0,
        .cb_size = sizeof(tfm_ns_sema_obj),
        .cb_mem = &tfm_ns_sema_obj
    };

    ns_lock_handle = osSemaphoreNew(MAX_SEMAPHORE_COUNT,
                                    MAX_SEMAPHORE_COUNT,
                                    &sema_attrib);
    if (!ns_lock_handle) {
        return TFM_ERROR_GENERIC;
    }

    return TFM_SUCCESS;
}

int32_t tfm_ns_wait_for_s_cpu_ready(void)
{
    return tfm_platform_ns_wait_for_s_cpu_ready();
}

uint32_t tfm_ns_multi_core_lock_acquire(void)
{
    return osSemaphoreAcquire(ns_lock_handle, osWaitForever);
}

uint32_t tfm_ns_multi_core_lock_release(void)
{
    return osSemaphoreRelease(ns_lock_handle);
}