Curle
d588e232c4
This branch has been dedicated to purely the UEFI bootloader. As such, all other code has been removed. This code can be compiled with Visual Studio, gcc or llvm.
103 lines
1.5 KiB
C
103 lines
1.5 KiB
C
/*++
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|