/** @file DXE Core library services. Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "DxeMain.h" // // Lock Stuff // /** Initialize a basic mutual exclusion lock. Each lock provides mutual exclusion access at it's task priority level. Since there is no-premption (at any TPL) or multiprocessor support, acquiring the lock only consists of raising to the locks TPL. @param Lock The EFI_LOCK structure to initialize @retval EFI_SUCCESS Lock Owned. @retval EFI_ACCESS_DENIED Reentrant Lock Acquisition, Lock not Owned. **/ EFI_STATUS CoreAcquireLockOrFail ( IN EFI_LOCK *Lock ) { ASSERT (Lock != NULL); ASSERT (Lock->Lock != EfiLockUninitialized); if (Lock->Lock == EfiLockAcquired) { // // Lock is already owned, so bail out // return EFI_ACCESS_DENIED; } Lock->OwnerTpl = CoreRaiseTpl (Lock->Tpl); Lock->Lock = EfiLockAcquired; return EFI_SUCCESS; } /** Raising to the task priority level of the mutual exclusion lock, and then acquires ownership of the lock. @param Lock The lock to acquire @return Lock owned **/ VOID CoreAcquireLock ( IN EFI_LOCK *Lock ) { ASSERT (Lock != NULL); ASSERT (Lock->Lock == EfiLockReleased); Lock->OwnerTpl = CoreRaiseTpl (Lock->Tpl); Lock->Lock = EfiLockAcquired; } /** Releases ownership of the mutual exclusion lock, and restores the previous task priority level. @param Lock The lock to release @return Lock unowned **/ VOID CoreReleaseLock ( IN EFI_LOCK *Lock ) { EFI_TPL Tpl; ASSERT (Lock != NULL); ASSERT (Lock->Lock == EfiLockAcquired); Tpl = Lock->OwnerTpl; Lock->Lock = EfiLockReleased; CoreRestoreTpl (Tpl); }