1/*	$NetBSD$	*/
2
3/*++
4
5Copyright (c) 1998  Intel Corporation
6
7Module Name:
8
9    lock.c
10
11Abstract:
12
13    Implements FLOCK
14
15
16
17Revision History
18
19--*/
20
21
22#include "lib.h"
23
24
25
26#ifndef __GNUC__
27#pragma RUNTIME_CODE(RtAcquireLock)
28#endif
29VOID
30RtAcquireLock (
31    IN FLOCK    *Lock
32    )
33/*++
34
35Routine Description:
36
37    Raising to the task priority level of the mutual exclusion
38    lock, and then acquires ownership of the lock.
39
40Arguments:
41
42    Lock        - The lock to acquire
43
44Returns:
45
46    Lock owned
47
48--*/
49{
50    if (BS) {
51        if (BS->RaiseTPL != NULL) {
52            Lock->OwnerTpl = uefi_call_wrapper(BS->RaiseTPL, 1, Lock->Tpl);
53        }
54    }
55    else {
56        if (LibRuntimeRaiseTPL != NULL) {
57            Lock->OwnerTpl = LibRuntimeRaiseTPL(Lock->Tpl);
58        }
59    }
60    Lock->Lock += 1;
61    ASSERT (Lock->Lock == 1);
62}
63
64
65#ifndef __GNUC__
66#pragma RUNTIME_CODE(RtAcquireLock)
67#endif
68VOID
69RtReleaseLock (
70    IN FLOCK    *Lock
71    )
72/*++
73
74Routine Description:
75
76    Releases ownership of the mutual exclusion lock, and
77    restores the previous task priority level.
78
79Arguments:
80
81    Lock        - The lock to release
82
83Returns:
84
85    Lock unowned
86
87--*/
88{
89    EFI_TPL     Tpl;
90
91    Tpl = Lock->OwnerTpl;
92    ASSERT(Lock->Lock == 1);
93    Lock->Lock -= 1;
94    if (BS) {
95        if (BS->RestoreTPL != NULL) {
96            uefi_call_wrapper(BS->RestoreTPL, 1, Tpl);
97        }
98    }
99    else {
100        if (LibRuntimeRestoreTPL != NULL) {
101            LibRuntimeRestoreTPL(Tpl);
102        }
103    }
104}
105