13d8536b4Sopenharmony_ci/* 23d8536b4Sopenharmony_ci * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 33d8536b4Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. 43d8536b4Sopenharmony_ci * 53d8536b4Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification, 63d8536b4Sopenharmony_ci * are permitted provided that the following conditions are met: 73d8536b4Sopenharmony_ci * 83d8536b4Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of 93d8536b4Sopenharmony_ci * conditions and the following disclaimer. 103d8536b4Sopenharmony_ci * 113d8536b4Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list 123d8536b4Sopenharmony_ci * of conditions and the following disclaimer in the documentation and/or other materials 133d8536b4Sopenharmony_ci * provided with the distribution. 143d8536b4Sopenharmony_ci * 153d8536b4Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used 163d8536b4Sopenharmony_ci * to endorse or promote products derived from this software without specific prior written 173d8536b4Sopenharmony_ci * permission. 183d8536b4Sopenharmony_ci * 193d8536b4Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 203d8536b4Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 213d8536b4Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 223d8536b4Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 233d8536b4Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 243d8536b4Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 253d8536b4Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 263d8536b4Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 273d8536b4Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 283d8536b4Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 293d8536b4Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 303d8536b4Sopenharmony_ci */ 313d8536b4Sopenharmony_ci 323d8536b4Sopenharmony_ci#include "los_mux.h" 333d8536b4Sopenharmony_ci#include "los_config.h" 343d8536b4Sopenharmony_ci#include "los_debug.h" 353d8536b4Sopenharmony_ci#include "los_hook.h" 363d8536b4Sopenharmony_ci#include "los_interrupt.h" 373d8536b4Sopenharmony_ci#include "los_memory.h" 383d8536b4Sopenharmony_ci#include "los_sched.h" 393d8536b4Sopenharmony_ci 403d8536b4Sopenharmony_ci#if (LOSCFG_BASE_IPC_MUX == 1) 413d8536b4Sopenharmony_ci 423d8536b4Sopenharmony_ciLITE_OS_SEC_BSS LosMuxCB* g_allMux = NULL; 433d8536b4Sopenharmony_ciLITE_OS_SEC_DATA_INIT LOS_DL_LIST g_unusedMuxList; 443d8536b4Sopenharmony_ci 453d8536b4Sopenharmony_ci/***************************************************************************** 463d8536b4Sopenharmony_ci Function : OsMuxInit 473d8536b4Sopenharmony_ci Description : Initializes the mutex 483d8536b4Sopenharmony_ci Input : None 493d8536b4Sopenharmony_ci Output : None 503d8536b4Sopenharmony_ci Return : LOS_OK on success, or error code on failure 513d8536b4Sopenharmony_ci *****************************************************************************/ 523d8536b4Sopenharmony_ciLITE_OS_SEC_TEXT_INIT UINT32 OsMuxInit(VOID) 533d8536b4Sopenharmony_ci{ 543d8536b4Sopenharmony_ci LosMuxCB *muxNode = NULL; 553d8536b4Sopenharmony_ci UINT32 index; 563d8536b4Sopenharmony_ci 573d8536b4Sopenharmony_ci LOS_ListInit(&g_unusedMuxList); 583d8536b4Sopenharmony_ci 593d8536b4Sopenharmony_ci if (LOSCFG_BASE_IPC_MUX_LIMIT == 0) { 603d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_MAXNUM_ZERO; 613d8536b4Sopenharmony_ci } 623d8536b4Sopenharmony_ci 633d8536b4Sopenharmony_ci g_allMux = (LosMuxCB *)LOS_MemAlloc(m_aucSysMem0, (LOSCFG_BASE_IPC_MUX_LIMIT * sizeof(LosMuxCB))); 643d8536b4Sopenharmony_ci if (g_allMux == NULL) { 653d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_NO_MEMORY; 663d8536b4Sopenharmony_ci } 673d8536b4Sopenharmony_ci 683d8536b4Sopenharmony_ci for (index = 0; index < LOSCFG_BASE_IPC_MUX_LIMIT; index++) { 693d8536b4Sopenharmony_ci muxNode = ((LosMuxCB *)g_allMux) + index; 703d8536b4Sopenharmony_ci muxNode->muxID = index; 713d8536b4Sopenharmony_ci muxNode->owner = (LosTaskCB *)NULL; 723d8536b4Sopenharmony_ci muxNode->muxStat = OS_MUX_UNUSED; 733d8536b4Sopenharmony_ci#if (LOSCFG_MUTEX_CREATE_TRACE == 1) 743d8536b4Sopenharmony_ci muxNode->createInfo = 0; 753d8536b4Sopenharmony_ci#endif 763d8536b4Sopenharmony_ci LOS_ListTailInsert(&g_unusedMuxList, &muxNode->muxList); 773d8536b4Sopenharmony_ci } 783d8536b4Sopenharmony_ci return LOS_OK; 793d8536b4Sopenharmony_ci} 803d8536b4Sopenharmony_ci 813d8536b4Sopenharmony_ci/***************************************************************************** 823d8536b4Sopenharmony_ci Function : LOS_MuxCreate 833d8536b4Sopenharmony_ci Description : Create a mutex 843d8536b4Sopenharmony_ci Input : None 853d8536b4Sopenharmony_ci Output : muxHandle ------ Mutex operation handle 863d8536b4Sopenharmony_ci Return : LOS_OK on success, or error code on failure 873d8536b4Sopenharmony_ci *****************************************************************************/ 883d8536b4Sopenharmony_ciLITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxCreate(UINT32 *muxHandle) 893d8536b4Sopenharmony_ci{ 903d8536b4Sopenharmony_ci UINT32 intSave; 913d8536b4Sopenharmony_ci LosMuxCB *muxCreated = NULL; 923d8536b4Sopenharmony_ci LOS_DL_LIST *unusedMux = NULL; 933d8536b4Sopenharmony_ci UINT32 errNo; 943d8536b4Sopenharmony_ci UINT32 errLine; 953d8536b4Sopenharmony_ci 963d8536b4Sopenharmony_ci if (muxHandle == NULL) { 973d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_PTR_NULL; 983d8536b4Sopenharmony_ci } 993d8536b4Sopenharmony_ci 1003d8536b4Sopenharmony_ci intSave = LOS_IntLock(); 1013d8536b4Sopenharmony_ci if (LOS_ListEmpty(&g_unusedMuxList)) { 1023d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 1033d8536b4Sopenharmony_ci OS_GOTO_ERR_HANDLER(LOS_ERRNO_MUX_ALL_BUSY); 1043d8536b4Sopenharmony_ci } 1053d8536b4Sopenharmony_ci 1063d8536b4Sopenharmony_ci unusedMux = LOS_DL_LIST_FIRST(&(g_unusedMuxList)); 1073d8536b4Sopenharmony_ci LOS_ListDelete(unusedMux); 1083d8536b4Sopenharmony_ci muxCreated = (GET_MUX_LIST(unusedMux)); 1093d8536b4Sopenharmony_ci muxCreated->muxCount = 0; 1103d8536b4Sopenharmony_ci muxCreated->muxStat = OS_MUX_USED; 1113d8536b4Sopenharmony_ci muxCreated->priority = 0; 1123d8536b4Sopenharmony_ci muxCreated->owner = (LosTaskCB *)NULL; 1133d8536b4Sopenharmony_ci LOS_ListInit(&muxCreated->muxList); 1143d8536b4Sopenharmony_ci *muxHandle = (UINT32)muxCreated->muxID; 1153d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 1163d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_CREATE, muxCreated); 1173d8536b4Sopenharmony_ci return LOS_OK; 1183d8536b4Sopenharmony_ciERR_HANDLER: 1193d8536b4Sopenharmony_ci OS_RETURN_ERROR_P2(errLine, errNo); 1203d8536b4Sopenharmony_ci} 1213d8536b4Sopenharmony_ci 1223d8536b4Sopenharmony_ci/***************************************************************************** 1233d8536b4Sopenharmony_ci Function : LOS_MuxDelete 1243d8536b4Sopenharmony_ci Description : Delete a mutex 1253d8536b4Sopenharmony_ci Input : muxHandle ------Mutex operation handle 1263d8536b4Sopenharmony_ci Output : None 1273d8536b4Sopenharmony_ci Return : LOS_OK on success, or error code on failure 1283d8536b4Sopenharmony_ci *****************************************************************************/ 1293d8536b4Sopenharmony_ciLITE_OS_SEC_TEXT_INIT UINT32 LOS_MuxDelete(UINT32 muxHandle) 1303d8536b4Sopenharmony_ci{ 1313d8536b4Sopenharmony_ci UINT32 intSave; 1323d8536b4Sopenharmony_ci LosMuxCB *muxDeleted = NULL; 1333d8536b4Sopenharmony_ci UINT32 errNo; 1343d8536b4Sopenharmony_ci UINT32 errLine; 1353d8536b4Sopenharmony_ci 1363d8536b4Sopenharmony_ci if (muxHandle >= (UINT32)LOSCFG_BASE_IPC_MUX_LIMIT) { 1373d8536b4Sopenharmony_ci OS_GOTO_ERR_HANDLER(LOS_ERRNO_MUX_INVALID); 1383d8536b4Sopenharmony_ci } 1393d8536b4Sopenharmony_ci 1403d8536b4Sopenharmony_ci muxDeleted = GET_MUX(muxHandle); 1413d8536b4Sopenharmony_ci intSave = LOS_IntLock(); 1423d8536b4Sopenharmony_ci if (muxDeleted->muxStat == OS_MUX_UNUSED) { 1433d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 1443d8536b4Sopenharmony_ci OS_GOTO_ERR_HANDLER(LOS_ERRNO_MUX_INVALID); 1453d8536b4Sopenharmony_ci } 1463d8536b4Sopenharmony_ci 1473d8536b4Sopenharmony_ci if ((!LOS_ListEmpty(&muxDeleted->muxList)) || muxDeleted->muxCount) { 1483d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 1493d8536b4Sopenharmony_ci OS_GOTO_ERR_HANDLER(LOS_ERRNO_MUX_PENDED); 1503d8536b4Sopenharmony_ci } 1513d8536b4Sopenharmony_ci 1523d8536b4Sopenharmony_ci LOS_ListAdd(&g_unusedMuxList, &muxDeleted->muxList); 1533d8536b4Sopenharmony_ci muxDeleted->muxStat = OS_MUX_UNUSED; 1543d8536b4Sopenharmony_ci#if (LOSCFG_MUTEX_CREATE_TRACE == 1) 1553d8536b4Sopenharmony_ci muxDeleted->createInfo = 0; 1563d8536b4Sopenharmony_ci#endif 1573d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 1583d8536b4Sopenharmony_ci 1593d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_DELETE, muxDeleted); 1603d8536b4Sopenharmony_ci return LOS_OK; 1613d8536b4Sopenharmony_ciERR_HANDLER: 1623d8536b4Sopenharmony_ci OS_RETURN_ERROR_P2(errLine, errNo); 1633d8536b4Sopenharmony_ci} 1643d8536b4Sopenharmony_ci 1653d8536b4Sopenharmony_ciSTATIC_INLINE UINT32 OsMuxValidCheck(LosMuxCB *muxPended) 1663d8536b4Sopenharmony_ci{ 1673d8536b4Sopenharmony_ci if (muxPended->muxStat == OS_MUX_UNUSED) { 1683d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_INVALID; 1693d8536b4Sopenharmony_ci } 1703d8536b4Sopenharmony_ci 1713d8536b4Sopenharmony_ci if (OS_INT_ACTIVE) { 1723d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_IN_INTERR; 1733d8536b4Sopenharmony_ci } 1743d8536b4Sopenharmony_ci 1753d8536b4Sopenharmony_ci if (g_losTaskLock) { 1763d8536b4Sopenharmony_ci PRINT_ERR("!!!LOS_ERRNO_MUX_PEND_IN_LOCK!!!\n"); 1773d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_PEND_IN_LOCK; 1783d8536b4Sopenharmony_ci } 1793d8536b4Sopenharmony_ci 1803d8536b4Sopenharmony_ci if (g_losTask.runTask->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) { 1813d8536b4Sopenharmony_ci return LOS_ERRNO_MUX_PEND_IN_SYSTEM_TASK; 1823d8536b4Sopenharmony_ci } 1833d8536b4Sopenharmony_ci 1843d8536b4Sopenharmony_ci return LOS_OK; 1853d8536b4Sopenharmony_ci} 1863d8536b4Sopenharmony_ci 1873d8536b4Sopenharmony_ci/***************************************************************************** 1883d8536b4Sopenharmony_ci Function : LOS_MuxPend 1893d8536b4Sopenharmony_ci Description : Specify the mutex P operation 1903d8536b4Sopenharmony_ci Input : muxHandle ------ Mutex operation handleone 1913d8536b4Sopenharmony_ci : timeOut ------- waiting time 1923d8536b4Sopenharmony_ci Output : None 1933d8536b4Sopenharmony_ci Return : LOS_OK on success, or error code on failure 1943d8536b4Sopenharmony_ci *****************************************************************************/ 1953d8536b4Sopenharmony_ciLITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout) 1963d8536b4Sopenharmony_ci{ 1973d8536b4Sopenharmony_ci UINT32 intSave; 1983d8536b4Sopenharmony_ci LosMuxCB *muxPended = NULL; 1993d8536b4Sopenharmony_ci UINT32 retErr; 2003d8536b4Sopenharmony_ci LosTaskCB *runningTask = NULL; 2013d8536b4Sopenharmony_ci 2023d8536b4Sopenharmony_ci if (muxHandle >= (UINT32)LOSCFG_BASE_IPC_MUX_LIMIT) { 2033d8536b4Sopenharmony_ci OS_RETURN_ERROR(LOS_ERRNO_MUX_INVALID); 2043d8536b4Sopenharmony_ci } 2053d8536b4Sopenharmony_ci 2063d8536b4Sopenharmony_ci muxPended = GET_MUX(muxHandle); 2073d8536b4Sopenharmony_ci intSave = LOS_IntLock(); 2083d8536b4Sopenharmony_ci retErr = OsMuxValidCheck(muxPended); 2093d8536b4Sopenharmony_ci if (retErr) { 2103d8536b4Sopenharmony_ci goto ERROR_MUX_PEND; 2113d8536b4Sopenharmony_ci } 2123d8536b4Sopenharmony_ci 2133d8536b4Sopenharmony_ci runningTask = (LosTaskCB *)g_losTask.runTask; 2143d8536b4Sopenharmony_ci if (muxPended->muxCount == 0) { 2153d8536b4Sopenharmony_ci muxPended->muxCount++; 2163d8536b4Sopenharmony_ci muxPended->owner = runningTask; 2173d8536b4Sopenharmony_ci muxPended->priority = runningTask->priority; 2183d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2193d8536b4Sopenharmony_ci goto HOOK; 2203d8536b4Sopenharmony_ci } 2213d8536b4Sopenharmony_ci 2223d8536b4Sopenharmony_ci if (muxPended->owner == runningTask) { 2233d8536b4Sopenharmony_ci muxPended->muxCount++; 2243d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2253d8536b4Sopenharmony_ci goto HOOK; 2263d8536b4Sopenharmony_ci } 2273d8536b4Sopenharmony_ci 2283d8536b4Sopenharmony_ci if (!timeout) { 2293d8536b4Sopenharmony_ci retErr = LOS_ERRNO_MUX_UNAVAILABLE; 2303d8536b4Sopenharmony_ci goto ERROR_MUX_PEND; 2313d8536b4Sopenharmony_ci } 2323d8536b4Sopenharmony_ci 2333d8536b4Sopenharmony_ci runningTask->taskMux = (VOID *)muxPended; 2343d8536b4Sopenharmony_ci 2353d8536b4Sopenharmony_ci if (muxPended->owner->priority > runningTask->priority) { 2363d8536b4Sopenharmony_ci (VOID)OsSchedModifyTaskSchedParam(muxPended->owner, runningTask->priority); 2373d8536b4Sopenharmony_ci } 2383d8536b4Sopenharmony_ci 2393d8536b4Sopenharmony_ci OsSchedTaskWait(&muxPended->muxList, timeout); 2403d8536b4Sopenharmony_ci 2413d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2423d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_PEND, muxPended, timeout); 2433d8536b4Sopenharmony_ci LOS_Schedule(); 2443d8536b4Sopenharmony_ci 2453d8536b4Sopenharmony_ci intSave = LOS_IntLock(); 2463d8536b4Sopenharmony_ci if (runningTask->taskStatus & OS_TASK_STATUS_TIMEOUT) { 2473d8536b4Sopenharmony_ci runningTask->taskStatus &= (~OS_TASK_STATUS_TIMEOUT); 2483d8536b4Sopenharmony_ci retErr = LOS_ERRNO_MUX_TIMEOUT; 2493d8536b4Sopenharmony_ci goto ERROR_MUX_PEND; 2503d8536b4Sopenharmony_ci } 2513d8536b4Sopenharmony_ci 2523d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2533d8536b4Sopenharmony_ci return LOS_OK; 2543d8536b4Sopenharmony_ci 2553d8536b4Sopenharmony_ciHOOK: 2563d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_PEND, muxPended, timeout); 2573d8536b4Sopenharmony_ci return LOS_OK; 2583d8536b4Sopenharmony_ci 2593d8536b4Sopenharmony_ciERROR_MUX_PEND: 2603d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2613d8536b4Sopenharmony_ci OS_RETURN_ERROR(retErr); 2623d8536b4Sopenharmony_ci} 2633d8536b4Sopenharmony_ci 2643d8536b4Sopenharmony_ci/***************************************************************************** 2653d8536b4Sopenharmony_ci Function : LOS_MuxPost 2663d8536b4Sopenharmony_ci Description : Specify the mutex V operation, 2673d8536b4Sopenharmony_ci Input : muxHandle ------ Mutex operation handle 2683d8536b4Sopenharmony_ci Output : None 2693d8536b4Sopenharmony_ci Return : LOS_OK on success, or error code on failure 2703d8536b4Sopenharmony_ci *****************************************************************************/ 2713d8536b4Sopenharmony_ciLITE_OS_SEC_TEXT UINT32 LOS_MuxPost(UINT32 muxHandle) 2723d8536b4Sopenharmony_ci{ 2733d8536b4Sopenharmony_ci UINT32 intSave; 2743d8536b4Sopenharmony_ci LosMuxCB *muxPosted = GET_MUX(muxHandle); 2753d8536b4Sopenharmony_ci LosTaskCB *resumedTask = NULL; 2763d8536b4Sopenharmony_ci LosTaskCB *runningTask = NULL; 2773d8536b4Sopenharmony_ci 2783d8536b4Sopenharmony_ci intSave = LOS_IntLock(); 2793d8536b4Sopenharmony_ci 2803d8536b4Sopenharmony_ci if ((muxHandle >= (UINT32)LOSCFG_BASE_IPC_MUX_LIMIT) || 2813d8536b4Sopenharmony_ci (muxPosted->muxStat == OS_MUX_UNUSED)) { 2823d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2833d8536b4Sopenharmony_ci OS_RETURN_ERROR(LOS_ERRNO_MUX_INVALID); 2843d8536b4Sopenharmony_ci } 2853d8536b4Sopenharmony_ci 2863d8536b4Sopenharmony_ci if (OS_INT_ACTIVE) { 2873d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2883d8536b4Sopenharmony_ci OS_RETURN_ERROR(LOS_ERRNO_MUX_IN_INTERR); 2893d8536b4Sopenharmony_ci } 2903d8536b4Sopenharmony_ci 2913d8536b4Sopenharmony_ci runningTask = (LosTaskCB *)g_losTask.runTask; 2923d8536b4Sopenharmony_ci if ((muxPosted->muxCount == 0) || (muxPosted->owner != runningTask)) { 2933d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2943d8536b4Sopenharmony_ci OS_RETURN_ERROR(LOS_ERRNO_MUX_INVALID); 2953d8536b4Sopenharmony_ci } 2963d8536b4Sopenharmony_ci 2973d8536b4Sopenharmony_ci if (--(muxPosted->muxCount) != 0) { 2983d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 2993d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_POST, muxPosted); 3003d8536b4Sopenharmony_ci return LOS_OK; 3013d8536b4Sopenharmony_ci } 3023d8536b4Sopenharmony_ci 3033d8536b4Sopenharmony_ci if ((muxPosted->owner->priority) != muxPosted->priority) { 3043d8536b4Sopenharmony_ci (VOID)OsSchedModifyTaskSchedParam(muxPosted->owner, muxPosted->priority); 3053d8536b4Sopenharmony_ci } 3063d8536b4Sopenharmony_ci 3073d8536b4Sopenharmony_ci if (!LOS_ListEmpty(&muxPosted->muxList)) { 3083d8536b4Sopenharmony_ci resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(muxPosted->muxList))); 3093d8536b4Sopenharmony_ci 3103d8536b4Sopenharmony_ci muxPosted->muxCount = 1; 3113d8536b4Sopenharmony_ci muxPosted->owner = resumedTask; 3123d8536b4Sopenharmony_ci muxPosted->priority = resumedTask->priority; 3133d8536b4Sopenharmony_ci resumedTask->taskMux = NULL; 3143d8536b4Sopenharmony_ci 3153d8536b4Sopenharmony_ci OsSchedTaskWake(resumedTask); 3163d8536b4Sopenharmony_ci 3173d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 3183d8536b4Sopenharmony_ci OsHookCall(LOS_HOOK_TYPE_MUX_POST, muxPosted); 3193d8536b4Sopenharmony_ci LOS_Schedule(); 3203d8536b4Sopenharmony_ci } else { 3213d8536b4Sopenharmony_ci muxPosted->owner = NULL; 3223d8536b4Sopenharmony_ci LOS_IntRestore(intSave); 3233d8536b4Sopenharmony_ci } 3243d8536b4Sopenharmony_ci 3253d8536b4Sopenharmony_ci return LOS_OK; 3263d8536b4Sopenharmony_ci} 3273d8536b4Sopenharmony_ci 3283d8536b4Sopenharmony_ci#endif /* (LOSCFG_BASE_IPC_MUX == 1) */ 329