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