161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang/*
261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * Copyright@ Samsung Electronics Co. LTD
361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *
461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * Licensed under the Apache License, Version 2.0 (the "License");
561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * you may not use this file except in compliance with the License.
661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * You may obtain a copy of the License at
761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *
861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *      http://www.apache.org/licenses/LICENSE-2.0
961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *
1061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * Unless required by applicable law or agreed to in writing, software
1161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * distributed under the License is distributed on an "AS IS" BASIS,
1261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * See the License for the specific language governing permissions and
1461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * limitations under the License.
1561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang*/
1661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
1761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang/*!
1861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * \file      ExynosMutex.cpp
1961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * \brief     source file for ExynosMutex
2061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * \author    Sangwoo, Park(sw5771.park@samsung.com)
2161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * \date      2011/06/15
2261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *
2361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * <b>Revision History: </b>
2461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang * - 2010/06/15 : Sangwoo, Park(sw5771.park@samsung.com) \n
2561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *   Initial version
2661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang *
2761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang */
2861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
2961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang//#define LOG_NDEBUG 0
3061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#define LOG_TAG "ExynosMutex"
3161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <utils/Log.h>
3261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
3361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <utils/threads.h>
3461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changusing namespace android;
3561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
3661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <stdio.h>
3761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <stdarg.h>
3861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <stdlib.h>
3961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include <string.h>
4061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
4161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#include "ExynosMutex.h"
4261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
4361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang//#define EXYNOS_MUTEX_DEBUG
4461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
45c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho ChangExynosMutex::ExynosMutex()
4661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
4761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    m_mutex = NULL;
48c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    m_flagCreate = false;
49c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    m_type = TYPE_BASE;
50c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang}
51c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
52c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho ChangExynosMutex::~ExynosMutex()
53c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang{
54c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == true)
55c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        this->destroy();
56c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang}
57c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
58c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool ExynosMutex::create(int type, char* name)
59c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang{
60c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == true) {
61c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::Already created", __func__);
62c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return false;
63c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    }
64c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
65c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    int androidMutexType = 0;
66c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
6761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    m_type = TYPE_BASE;
6861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
6961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    switch (type) {
7061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    case TYPE_PRIVATE:
7161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        androidMutexType = Mutex::PRIVATE;
7261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        break;
7361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    case TYPE_SHARED:
7461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        androidMutexType = Mutex::SHARED;
7561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        break;
7661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    default:
7753b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::unmatched type(%d) fail", __func__, type);
78c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return false;
7961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
8061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
8161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    m_mutex = new Mutex(androidMutexType, name);
8261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (m_mutex == NULL) {
8353b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::Mutex create fail", __func__);
84c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return false;
8561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
8661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
8761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    m_type = type;
8861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    strcpy(m_name, name);
89c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
90c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    m_flagCreate = true;
91c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
92c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    return true;
9361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
9461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
95c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changvoid ExynosMutex::destroy(void)
9661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
97c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == false) {
98c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::Not yet created", __func__);
99c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return;
100c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    }
101c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
10261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (m_mutex)
10361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        delete ((Mutex *)m_mutex);
10461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    m_mutex = NULL;
105c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
106c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    m_flagCreate = false;
10761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
10861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
109c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool ExynosMutex::getCreatedStatus(void)
11061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
111c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    return m_flagCreate;
112c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang}
11361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
114c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool ExynosMutex::lock(void)
115c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang{
116c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == false) {
117c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::Not yet created", __func__);
11861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
11961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
12061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
121c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
122c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    ALOGD("%s::%s'lock() start", __func__, m_name);
123c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang#endif
124c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
12561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (((Mutex *)m_mutex)->lock() != 0) {
12653b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::m_core->lock() fail", __func__);
12761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
12861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
12961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
13061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
13153b4197a2353461bda663a86887adb68f6325e43Dima Zavin    ALOGD("%s::%s'lock() end", __func__, m_name);
13261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#endif
13361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
13461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return true;
13561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
13661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
137c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool ExynosMutex::unLock(void)
13861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
139c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == false) {
140c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::Not yet created", __func__);
141c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return false;
142c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    }
143c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
14461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
14553b4197a2353461bda663a86887adb68f6325e43Dima Zavin    ALOGD("%s::%s'unlock() start", __func__, m_name);
14661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#endif
14761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
14861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    ((Mutex *)m_mutex)->unlock();
14961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
15061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
15153b4197a2353461bda663a86887adb68f6325e43Dima Zavin    ALOGD("%s::%s'unlock() end", __func__, m_name);
15261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#endif
15361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
15461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return true;
15561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
15661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
157c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool ExynosMutex::tryLock(void)
15861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
159c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (m_flagCreate == false) {
160c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::Not yet created", __func__);
161c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        return false;
162c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    }
163c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
16461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    int ret = 0;
16561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
16661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
16753b4197a2353461bda663a86887adb68f6325e43Dima Zavin    ALOGD("%s::%s'trylock() start", __func__, m_name);
16861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#endif
16961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
17061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    ret = ((Mutex *)m_mutex)->tryLock();
17161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
17261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#ifdef EXYNOS_MUTEX_DEBUG
17353b4197a2353461bda663a86887adb68f6325e43Dima Zavin    ALOGD("%s::%s'trylock() end", __func__, m_name);
17461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang#endif
17561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
17661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return (ret == 0) ? true : false;
17761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
17861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
179c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changint ExynosMutex::getType(void)
18061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
18161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return m_type;
18261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
18361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
18461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changvoid *exynos_mutex_create(
18561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    int type,
18661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    char *name)
18761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
188c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    ExynosMutex *mutex = new ExynosMutex();
189c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
190c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (mutex->create(type, name) == false) {
191c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ALOGE("%s::mutex->create() fail", __func__);
192c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        delete mutex;
193c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        mutex = NULL;
194c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    }
19561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
19661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return (void*)mutex;
19761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
19861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
19961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changbool exynos_mutex_destroy(
20061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
20161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
20261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
20353b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
20461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
20561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
20661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
207c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang    if (((ExynosMutex *)handle)->getCreatedStatus() == true)
208c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang        ((ExynosMutex *)handle)->destroy();
209c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Chang
21061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    delete (ExynosMutex *)handle;
21161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
21261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return true;
21361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
21461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
21561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changbool exynos_mutex_lock(
21661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
21761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
21861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
21953b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
22061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
22161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
22261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
22361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return ((ExynosMutex *)handle)->lock();
22461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
22561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
22661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
22761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changbool exynos_mutex_unlock(
22861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
22961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
23061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
23153b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
23261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
23361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
23461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
23561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return ((ExynosMutex *)handle)->unLock();
23661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
23761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
23861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
23961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changbool exynos_mutex_trylock(
24061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
24161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
24261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
24353b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
24461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
24561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
24661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
24761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return ((ExynosMutex *)handle)->tryLock();
24861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
24961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
25061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
25161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Changint exynos_mutex_get_type(
25261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
25361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
25461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
25553b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
25661bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
25761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
25861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
25961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return ((ExynosMutex *)handle)->getType();
26061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
26161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
262c3e0af6f8857ca153c96d976dc58d1eab3001cecJiho Changbool exynos_mutex_get_created_status(
26361bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    void *handle)
26461bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang{
26561bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    if (handle == NULL) {
26653b4197a2353461bda663a86887adb68f6325e43Dima Zavin        ALOGE("%s::handle is null", __func__);
26761bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang        return false;
26861bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    }
26961bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
27061bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang    return ((ExynosMutex *)handle)->getCreatedStatus();
27161bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang}
27261bc154d7285f4dd0c28a7c74e9b3154445e209bJiho Chang
273