/*
 * Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2019. All rights reserved.
 * Description: adec lock function
 * Author: audio
 * Create: 2019-12-30
 */

#include <pthread.h>

#include "adec_common.h"
#include "drv_ioctl_adec.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

static pthread_mutex_t g_adec_mpi_mutex = PTHREAD_MUTEX_INITIALIZER;

static pthread_mutex_t g_adec_api_mutex[ADEC_INSTANCE_MAXNUM] = {
    [0 ... (ADEC_INSTANCE_MAXNUM - 1)] = PTHREAD_MUTEX_INITIALIZER
};
static pthread_mutex_t g_adec_data_mutex[ADEC_INSTANCE_MAXNUM] = {
    [0 ... (ADEC_INSTANCE_MAXNUM - 1)] = PTHREAD_MUTEX_INITIALIZER
};
static pthread_mutex_t g_adec_io_mutex[ADEC_INSTANCE_MAXNUM] = {
    [0 ... (ADEC_INSTANCE_MAXNUM - 1)] = PTHREAD_MUTEX_INITIALIZER
};

td_void adec_mpi_lock(td_void)
{
    adec_mutex_lock(&g_adec_mpi_mutex);
}

td_void adec_mpi_unlock(td_void)
{
    adec_mutex_unlock(&g_adec_mpi_mutex);
}

td_void adec_api_lock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_lock(&g_adec_api_mutex[adec_id]);
}

td_void adec_api_unlock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_unlock(&g_adec_api_mutex[adec_id]);
}

td_void adec_data_lock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_lock(&g_adec_data_mutex[adec_id]);
}

td_void adec_data_unlock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_unlock(&g_adec_data_mutex[adec_id]);
}

td_void adec_io_lock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_lock(&g_adec_io_mutex[adec_id]);
}

td_void adec_io_unlock(td_u32 adec_id)
{
    if (adec_id >= ADEC_INSTANCE_MAXNUM) {
        return;
    }

    adec_mutex_unlock(&g_adec_io_mutex[adec_id]);
}

#ifdef __cplusplus
}
#endif /* __cplusplus */