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