diff options
Diffstat (limited to 'gnu-efi/gnu-efi-3.0/lib/runtime/rtlock.c')
-rw-r--r-- | gnu-efi/gnu-efi-3.0/lib/runtime/rtlock.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gnu-efi/gnu-efi-3.0/lib/runtime/rtlock.c b/gnu-efi/gnu-efi-3.0/lib/runtime/rtlock.c new file mode 100644 index 0000000..2eafdca --- /dev/null +++ b/gnu-efi/gnu-efi-3.0/lib/runtime/rtlock.c @@ -0,0 +1,102 @@ +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + lock.c + +Abstract: + + Implements FLOCK + + + +Revision History + +--*/ + + +#include "lib.h" + + + +#ifndef __GNUC__ +#pragma RUNTIME_CODE(RtAcquireLock) +#endif +VOID +RtAcquireLock ( + IN FLOCK *Lock + ) +/*++ + +Routine Description: + + Raising to the task priority level of the mutual exclusion + lock, and then acquires ownership of the lock. + +Arguments: + + Lock - The lock to acquire + +Returns: + + Lock owned + +--*/ +{ + if (BS) { + if (BS->RaiseTPL != NULL) { + Lock->OwnerTpl = uefi_call_wrapper(BS->RaiseTPL, 1, Lock->Tpl); + } + } + else { + if (LibRuntimeRaiseTPL != NULL) { + Lock->OwnerTpl = LibRuntimeRaiseTPL(Lock->Tpl); + } + } + Lock->Lock += 1; + ASSERT (Lock->Lock == 1); +} + + +#ifndef __GNUC__ +#pragma RUNTIME_CODE(RtAcquireLock) +#endif +VOID +RtReleaseLock ( + IN FLOCK *Lock + ) +/*++ + +Routine Description: + + Releases ownership of the mutual exclusion lock, and + restores the previous task priority level. + +Arguments: + + Lock - The lock to release + +Returns: + + Lock unowned + +--*/ +{ + EFI_TPL Tpl; + + Tpl = Lock->OwnerTpl; + ASSERT(Lock->Lock == 1); + Lock->Lock -= 1; + if (BS) { + if (BS->RestoreTPL != NULL) { + uefi_call_wrapper(BS->RestoreTPL, 1, Tpl); + } + } + else { + if (LibRuntimeRestoreTPL != NULL) { + LibRuntimeRestoreTPL(Tpl); + } + } +} |