xref: /netbsd/sys/external/bsd/gnu-efi/dist/lib/lock.c (revision 01d0c315)
1*01d0c315Sjakllsch /*	$NetBSD: lock.c,v 1.1.1.1 2014/04/01 16:16:06 jakllsch Exp $	*/
2*01d0c315Sjakllsch 
3*01d0c315Sjakllsch /*++
4*01d0c315Sjakllsch 
5*01d0c315Sjakllsch Copyright (c) 1998  Intel Corporation
6*01d0c315Sjakllsch 
7*01d0c315Sjakllsch Module Name:
8*01d0c315Sjakllsch 
9*01d0c315Sjakllsch     lock.c
10*01d0c315Sjakllsch 
11*01d0c315Sjakllsch Abstract:
12*01d0c315Sjakllsch 
13*01d0c315Sjakllsch     Implements FLOCK
14*01d0c315Sjakllsch 
15*01d0c315Sjakllsch 
16*01d0c315Sjakllsch 
17*01d0c315Sjakllsch Revision History
18*01d0c315Sjakllsch 
19*01d0c315Sjakllsch --*/
20*01d0c315Sjakllsch 
21*01d0c315Sjakllsch 
22*01d0c315Sjakllsch #include "lib.h"
23*01d0c315Sjakllsch 
24*01d0c315Sjakllsch 
25*01d0c315Sjakllsch VOID
InitializeLock(IN OUT FLOCK * Lock,IN EFI_TPL Priority)26*01d0c315Sjakllsch InitializeLock (
27*01d0c315Sjakllsch     IN OUT FLOCK    *Lock,
28*01d0c315Sjakllsch     IN EFI_TPL      Priority
29*01d0c315Sjakllsch     )
30*01d0c315Sjakllsch /*++
31*01d0c315Sjakllsch 
32*01d0c315Sjakllsch Routine Description:
33*01d0c315Sjakllsch 
34*01d0c315Sjakllsch     Initialize a basic mutual exclusion lock.   Each lock
35*01d0c315Sjakllsch     provides mutual exclusion access at it's task priority
36*01d0c315Sjakllsch     level.  Since there is no-premption (at any TPL) or
37*01d0c315Sjakllsch     multiprocessor support, acquiring the lock only consists
38*01d0c315Sjakllsch     of raising to the locks TPL.
39*01d0c315Sjakllsch 
40*01d0c315Sjakllsch     Note on a debug build the lock is acquired and released
41*01d0c315Sjakllsch     to help ensure proper usage.
42*01d0c315Sjakllsch 
43*01d0c315Sjakllsch Arguments:
44*01d0c315Sjakllsch 
45*01d0c315Sjakllsch     Lock        - The FLOCK structure to initialize
46*01d0c315Sjakllsch 
47*01d0c315Sjakllsch     Priority    - The task priority level of the lock
48*01d0c315Sjakllsch 
49*01d0c315Sjakllsch 
50*01d0c315Sjakllsch Returns:
51*01d0c315Sjakllsch 
52*01d0c315Sjakllsch     An initialized F Lock structure.
53*01d0c315Sjakllsch 
54*01d0c315Sjakllsch --*/
55*01d0c315Sjakllsch {
56*01d0c315Sjakllsch     Lock->Tpl = Priority;
57*01d0c315Sjakllsch     Lock->OwnerTpl = 0;
58*01d0c315Sjakllsch     Lock->Lock = 0;
59*01d0c315Sjakllsch }
60*01d0c315Sjakllsch 
61*01d0c315Sjakllsch 
62*01d0c315Sjakllsch VOID
AcquireLock(IN FLOCK * Lock)63*01d0c315Sjakllsch AcquireLock (
64*01d0c315Sjakllsch     IN FLOCK    *Lock
65*01d0c315Sjakllsch     )
66*01d0c315Sjakllsch /*++
67*01d0c315Sjakllsch 
68*01d0c315Sjakllsch Routine Description:
69*01d0c315Sjakllsch 
70*01d0c315Sjakllsch     Raising to the task priority level of the mutual exclusion
71*01d0c315Sjakllsch     lock, and then acquires ownership of the lock.
72*01d0c315Sjakllsch 
73*01d0c315Sjakllsch Arguments:
74*01d0c315Sjakllsch 
75*01d0c315Sjakllsch     Lock        - The lock to acquire
76*01d0c315Sjakllsch 
77*01d0c315Sjakllsch Returns:
78*01d0c315Sjakllsch 
79*01d0c315Sjakllsch     Lock owned
80*01d0c315Sjakllsch 
81*01d0c315Sjakllsch --*/
82*01d0c315Sjakllsch {
83*01d0c315Sjakllsch     RtAcquireLock (Lock);
84*01d0c315Sjakllsch }
85*01d0c315Sjakllsch 
86*01d0c315Sjakllsch 
87*01d0c315Sjakllsch VOID
ReleaseLock(IN FLOCK * Lock)88*01d0c315Sjakllsch ReleaseLock (
89*01d0c315Sjakllsch     IN FLOCK    *Lock
90*01d0c315Sjakllsch     )
91*01d0c315Sjakllsch /*++
92*01d0c315Sjakllsch 
93*01d0c315Sjakllsch Routine Description:
94*01d0c315Sjakllsch 
95*01d0c315Sjakllsch     Releases ownership of the mutual exclusion lock, and
96*01d0c315Sjakllsch     restores the previous task priority level.
97*01d0c315Sjakllsch 
98*01d0c315Sjakllsch Arguments:
99*01d0c315Sjakllsch 
100*01d0c315Sjakllsch     Lock        - The lock to release
101*01d0c315Sjakllsch 
102*01d0c315Sjakllsch Returns:
103*01d0c315Sjakllsch 
104*01d0c315Sjakllsch     Lock unowned
105*01d0c315Sjakllsch 
106*01d0c315Sjakllsch --*/
107*01d0c315Sjakllsch {
108*01d0c315Sjakllsch     RtReleaseLock (Lock);
109*01d0c315Sjakllsch }
110