1 1.1.1.1.6.2 yamt /* $NetBSD: lock.c,v 1.1.1.1.6.2 2014/05/22 11:40:58 yamt Exp $ */ 2 1.1.1.1.6.2 yamt 3 1.1.1.1.6.2 yamt /*++ 4 1.1.1.1.6.2 yamt 5 1.1.1.1.6.2 yamt Copyright (c) 1998 Intel Corporation 6 1.1.1.1.6.2 yamt 7 1.1.1.1.6.2 yamt Module Name: 8 1.1.1.1.6.2 yamt 9 1.1.1.1.6.2 yamt lock.c 10 1.1.1.1.6.2 yamt 11 1.1.1.1.6.2 yamt Abstract: 12 1.1.1.1.6.2 yamt 13 1.1.1.1.6.2 yamt Implements FLOCK 14 1.1.1.1.6.2 yamt 15 1.1.1.1.6.2 yamt 16 1.1.1.1.6.2 yamt 17 1.1.1.1.6.2 yamt Revision History 18 1.1.1.1.6.2 yamt 19 1.1.1.1.6.2 yamt --*/ 20 1.1.1.1.6.2 yamt 21 1.1.1.1.6.2 yamt 22 1.1.1.1.6.2 yamt #include "lib.h" 23 1.1.1.1.6.2 yamt 24 1.1.1.1.6.2 yamt 25 1.1.1.1.6.2 yamt VOID 26 1.1.1.1.6.2 yamt InitializeLock ( 27 1.1.1.1.6.2 yamt IN OUT FLOCK *Lock, 28 1.1.1.1.6.2 yamt IN EFI_TPL Priority 29 1.1.1.1.6.2 yamt ) 30 1.1.1.1.6.2 yamt /*++ 31 1.1.1.1.6.2 yamt 32 1.1.1.1.6.2 yamt Routine Description: 33 1.1.1.1.6.2 yamt 34 1.1.1.1.6.2 yamt Initialize a basic mutual exclusion lock. Each lock 35 1.1.1.1.6.2 yamt provides mutual exclusion access at it's task priority 36 1.1.1.1.6.2 yamt level. Since there is no-premption (at any TPL) or 37 1.1.1.1.6.2 yamt multiprocessor support, acquiring the lock only consists 38 1.1.1.1.6.2 yamt of raising to the locks TPL. 39 1.1.1.1.6.2 yamt 40 1.1.1.1.6.2 yamt Note on a debug build the lock is acquired and released 41 1.1.1.1.6.2 yamt to help ensure proper usage. 42 1.1.1.1.6.2 yamt 43 1.1.1.1.6.2 yamt Arguments: 44 1.1.1.1.6.2 yamt 45 1.1.1.1.6.2 yamt Lock - The FLOCK structure to initialize 46 1.1.1.1.6.2 yamt 47 1.1.1.1.6.2 yamt Priority - The task priority level of the lock 48 1.1.1.1.6.2 yamt 49 1.1.1.1.6.2 yamt 50 1.1.1.1.6.2 yamt Returns: 51 1.1.1.1.6.2 yamt 52 1.1.1.1.6.2 yamt An initialized F Lock structure. 53 1.1.1.1.6.2 yamt 54 1.1.1.1.6.2 yamt --*/ 55 1.1.1.1.6.2 yamt { 56 1.1.1.1.6.2 yamt Lock->Tpl = Priority; 57 1.1.1.1.6.2 yamt Lock->OwnerTpl = 0; 58 1.1.1.1.6.2 yamt Lock->Lock = 0; 59 1.1.1.1.6.2 yamt } 60 1.1.1.1.6.2 yamt 61 1.1.1.1.6.2 yamt 62 1.1.1.1.6.2 yamt VOID 63 1.1.1.1.6.2 yamt AcquireLock ( 64 1.1.1.1.6.2 yamt IN FLOCK *Lock 65 1.1.1.1.6.2 yamt ) 66 1.1.1.1.6.2 yamt /*++ 67 1.1.1.1.6.2 yamt 68 1.1.1.1.6.2 yamt Routine Description: 69 1.1.1.1.6.2 yamt 70 1.1.1.1.6.2 yamt Raising to the task priority level of the mutual exclusion 71 1.1.1.1.6.2 yamt lock, and then acquires ownership of the lock. 72 1.1.1.1.6.2 yamt 73 1.1.1.1.6.2 yamt Arguments: 74 1.1.1.1.6.2 yamt 75 1.1.1.1.6.2 yamt Lock - The lock to acquire 76 1.1.1.1.6.2 yamt 77 1.1.1.1.6.2 yamt Returns: 78 1.1.1.1.6.2 yamt 79 1.1.1.1.6.2 yamt Lock owned 80 1.1.1.1.6.2 yamt 81 1.1.1.1.6.2 yamt --*/ 82 1.1.1.1.6.2 yamt { 83 1.1.1.1.6.2 yamt RtAcquireLock (Lock); 84 1.1.1.1.6.2 yamt } 85 1.1.1.1.6.2 yamt 86 1.1.1.1.6.2 yamt 87 1.1.1.1.6.2 yamt VOID 88 1.1.1.1.6.2 yamt ReleaseLock ( 89 1.1.1.1.6.2 yamt IN FLOCK *Lock 90 1.1.1.1.6.2 yamt ) 91 1.1.1.1.6.2 yamt /*++ 92 1.1.1.1.6.2 yamt 93 1.1.1.1.6.2 yamt Routine Description: 94 1.1.1.1.6.2 yamt 95 1.1.1.1.6.2 yamt Releases ownership of the mutual exclusion lock, and 96 1.1.1.1.6.2 yamt restores the previous task priority level. 97 1.1.1.1.6.2 yamt 98 1.1.1.1.6.2 yamt Arguments: 99 1.1.1.1.6.2 yamt 100 1.1.1.1.6.2 yamt Lock - The lock to release 101 1.1.1.1.6.2 yamt 102 1.1.1.1.6.2 yamt Returns: 103 1.1.1.1.6.2 yamt 104 1.1.1.1.6.2 yamt Lock unowned 105 1.1.1.1.6.2 yamt 106 1.1.1.1.6.2 yamt --*/ 107 1.1.1.1.6.2 yamt { 108 1.1.1.1.6.2 yamt RtReleaseLock (Lock); 109 1.1.1.1.6.2 yamt } 110