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*01d0c315SjakllschInitializeLock ( 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*01d0c315SjakllschAcquireLock ( 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*01d0c315SjakllschReleaseLock ( 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