text: /** @file
    DXE Core library services.
  
  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
  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);
  }
  
  
  
  