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