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