Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2781 → Rev 2782

/tags/0.3.0/boot/arch/ia64/loader/gefi/lib/runtime/rtlock.c
0,0 → 1,98
/*++
 
Copyright (c) 1998 Intel Corporation
 
Module Name:
 
lock.c
 
Abstract:
 
Implements FLOCK
 
 
 
Revision History
 
--*/
 
 
#include "lib.h"
 
 
 
#pragma RUNTIME_CODE(RtAcquireLock)
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 = BS->RaiseTPL(Lock->Tpl);
}
}
else {
if (LibRuntimeRaiseTPL != NULL) {
Lock->OwnerTpl = LibRuntimeRaiseTPL(Lock->Tpl);
}
}
Lock->Lock += 1;
ASSERT (Lock->Lock == 1);
}
 
 
#pragma RUNTIME_CODE(RtAcquireLock)
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) {
BS->RestoreTPL (Tpl);
}
}
else {
if (LibRuntimeRestoreTPL != NULL) {
LibRuntimeRestoreTPL(Tpl);
}
}
}