summaryrefslogtreecommitdiff
path: root/gnu-efi/lib/runtime/rtlock.c
diff options
context:
space:
mode:
authorSteve McIntyre <steve@einval.com>2021-03-23 23:49:46 +0000
committerSteve McIntyre <steve@einval.com>2021-03-23 23:49:46 +0000
commit1251a7ba86fc40a6aad8b4fecdbca2b61808d9fa (patch)
tree2125fda549aaca55cb49a48d54be77dec7fbf3df /gnu-efi/lib/runtime/rtlock.c
parent85b409232ce89b34626df9d72abedf5d4f5ccef6 (diff)
parent031e5cce385d3f96b1caa1d53495332a7eb03749 (diff)
downloadefi-boot-shim-debian/15.3-1.tar.gz
efi-boot-shim-debian/15.3-1.zip
Update upstream source from tag 'upstream/15.3'debian/15.3-1
Update to upstream version '15.3' with Debian dir 1b484f1c1ac270604a5a1451b34de4b0865c6211
Diffstat (limited to 'gnu-efi/lib/runtime/rtlock.c')
-rw-r--r--gnu-efi/lib/runtime/rtlock.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/gnu-efi/lib/runtime/rtlock.c b/gnu-efi/lib/runtime/rtlock.c
new file mode 100644
index 00000000..2eafdca1
--- /dev/null
+++ b/gnu-efi/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);
+ }
+ }
+}