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);
|
||
|
}
|
||
|
}
|
||
|
}
|