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