1 1.1 jakllsch /* $NetBSD: lock.c,v 1.1.1.1 2014/04/01 16:16:06 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 VOID 26 1.1 jakllsch InitializeLock ( 27 1.1 jakllsch IN OUT FLOCK *Lock, 28 1.1 jakllsch IN EFI_TPL Priority 29 1.1 jakllsch ) 30 1.1 jakllsch /*++ 31 1.1 jakllsch 32 1.1 jakllsch Routine Description: 33 1.1 jakllsch 34 1.1 jakllsch Initialize a basic mutual exclusion lock. Each lock 35 1.1 jakllsch provides mutual exclusion access at it's task priority 36 1.1 jakllsch level. Since there is no-premption (at any TPL) or 37 1.1 jakllsch multiprocessor support, acquiring the lock only consists 38 1.1 jakllsch of raising to the locks TPL. 39 1.1 jakllsch 40 1.1 jakllsch Note on a debug build the lock is acquired and released 41 1.1 jakllsch to help ensure proper usage. 42 1.1 jakllsch 43 1.1 jakllsch Arguments: 44 1.1 jakllsch 45 1.1 jakllsch Lock - The FLOCK structure to initialize 46 1.1 jakllsch 47 1.1 jakllsch Priority - The task priority level of the lock 48 1.1 jakllsch 49 1.1 jakllsch 50 1.1 jakllsch Returns: 51 1.1 jakllsch 52 1.1 jakllsch An initialized F Lock structure. 53 1.1 jakllsch 54 1.1 jakllsch --*/ 55 1.1 jakllsch { 56 1.1 jakllsch Lock->Tpl = Priority; 57 1.1 jakllsch Lock->OwnerTpl = 0; 58 1.1 jakllsch Lock->Lock = 0; 59 1.1 jakllsch } 60 1.1 jakllsch 61 1.1 jakllsch 62 1.1 jakllsch VOID 63 1.1 jakllsch AcquireLock ( 64 1.1 jakllsch IN FLOCK *Lock 65 1.1 jakllsch ) 66 1.1 jakllsch /*++ 67 1.1 jakllsch 68 1.1 jakllsch Routine Description: 69 1.1 jakllsch 70 1.1 jakllsch Raising to the task priority level of the mutual exclusion 71 1.1 jakllsch lock, and then acquires ownership of the lock. 72 1.1 jakllsch 73 1.1 jakllsch Arguments: 74 1.1 jakllsch 75 1.1 jakllsch Lock - The lock to acquire 76 1.1 jakllsch 77 1.1 jakllsch Returns: 78 1.1 jakllsch 79 1.1 jakllsch Lock owned 80 1.1 jakllsch 81 1.1 jakllsch --*/ 82 1.1 jakllsch { 83 1.1 jakllsch RtAcquireLock (Lock); 84 1.1 jakllsch } 85 1.1 jakllsch 86 1.1 jakllsch 87 1.1 jakllsch VOID 88 1.1 jakllsch ReleaseLock ( 89 1.1 jakllsch IN FLOCK *Lock 90 1.1 jakllsch ) 91 1.1 jakllsch /*++ 92 1.1 jakllsch 93 1.1 jakllsch Routine Description: 94 1.1 jakllsch 95 1.1 jakllsch Releases ownership of the mutual exclusion lock, and 96 1.1 jakllsch restores the previous task priority level. 97 1.1 jakllsch 98 1.1 jakllsch Arguments: 99 1.1 jakllsch 100 1.1 jakllsch Lock - The lock to release 101 1.1 jakllsch 102 1.1 jakllsch Returns: 103 1.1 jakllsch 104 1.1 jakllsch Lock unowned 105 1.1 jakllsch 106 1.1 jakllsch --*/ 107 1.1 jakllsch { 108 1.1 jakllsch RtReleaseLock (Lock); 109 1.1 jakllsch } 110