1 /* 2 * PROJECT: ReactOS HAL 3 * LICENSE: BSD - See COPYING.ARM in the top level directory 4 * FILE: hal/halarm/generic/spinlock.c 5 * PURPOSE: SpinLock Routines 6 * PROGRAMMERS: ReactOS Portable Systems Group 7 */ 8 9 /* INCLUDES ******************************************************************/ 10 11 #include <hal.h> 12 #define NDEBUG 13 #include <debug.h> 14 15 #undef KeAcquireSpinLock 16 #undef KeReleaseSpinLock 17 #undef KeRaiseIrql 18 #undef KeLowerIrql 19 20 /* FUNCTIONS *****************************************************************/ 21 22 /* 23 * @implemented 24 */ 25 VOID 26 NTAPI 27 KeRaiseIrql(KIRQL NewIrql, 28 PKIRQL OldIrql) 29 { 30 /* Call the fastcall function */ 31 *OldIrql = KfRaiseIrql(NewIrql); 32 } 33 34 /* 35 * @implemented 36 */ 37 VOID 38 NTAPI 39 KeLowerIrql(KIRQL NewIrql) 40 { 41 /* Call the fastcall function */ 42 KfLowerIrql(NewIrql); 43 } 44 45 /* 46 * @implemented 47 */ 48 VOID 49 NTAPI 50 KeAcquireSpinLock(PKSPIN_LOCK SpinLock, 51 PKIRQL OldIrql) 52 { 53 /* Call the fastcall function */ 54 *OldIrql = KfAcquireSpinLock(SpinLock); 55 } 56 57 /* 58 * @implemented 59 */ 60 KIRQL 61 FASTCALL 62 KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) 63 { 64 /* Simply raise to dispatch */ 65 return KfRaiseIrql(DISPATCH_LEVEL); 66 } 67 68 /* 69 * @implemented 70 */ 71 VOID 72 NTAPI 73 KeReleaseSpinLock(PKSPIN_LOCK SpinLock, 74 KIRQL NewIrql) 75 { 76 /* Call the fastcall function */ 77 KfReleaseSpinLock(SpinLock, NewIrql); 78 } 79 80 /* 81 * @implemented 82 */ 83 KIRQL 84 FASTCALL 85 KfAcquireSpinLock(PKSPIN_LOCK SpinLock) 86 { 87 /* Simply raise to dispatch */ 88 return KfRaiseIrql(DISPATCH_LEVEL); 89 } 90 91 /* 92 * @implemented 93 */ 94 VOID 95 FASTCALL 96 KfReleaseSpinLock(PKSPIN_LOCK SpinLock, 97 KIRQL OldIrql) 98 { 99 /* Simply lower IRQL back */ 100 KeLowerIrql(OldIrql); 101 } 102 103 /* 104 * @implemented 105 */ 106 KIRQL 107 FASTCALL 108 KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) 109 { 110 /* Simply raise to dispatch */ 111 return KfRaiseIrql(DISPATCH_LEVEL); 112 } 113 114 /* 115 * @implemented 116 */ 117 KIRQL 118 FASTCALL 119 KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) 120 { 121 /* Simply raise to dispatch */ 122 return KfRaiseIrql(DISPATCH_LEVEL); 123 } 124 125 /* 126 * @implemented 127 */ 128 VOID 129 FASTCALL 130 KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock, 131 IN PKLOCK_QUEUE_HANDLE LockHandle) 132 { 133 /* Simply raise to dispatch */ 134 LockHandle->OldIrql = KfRaiseIrql(DISPATCH_LEVEL); 135 } 136 137 /* 138 * @implemented 139 */ 140 VOID 141 FASTCALL 142 KeAcquireInStackQueuedSpinLockRaiseToSynch(IN PKSPIN_LOCK SpinLock, 143 IN PKLOCK_QUEUE_HANDLE LockHandle) 144 { 145 /* Simply raise to dispatch */ 146 LockHandle->OldIrql = KfRaiseIrql(DISPATCH_LEVEL); 147 } 148 149 /* 150 * @implemented 151 */ 152 VOID 153 FASTCALL 154 KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, 155 IN KIRQL OldIrql) 156 { 157 /* Simply lower IRQL back */ 158 KfLowerIrql(OldIrql); 159 } 160 161 /* 162 * @implemented 163 */ 164 VOID 165 FASTCALL 166 KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) 167 { 168 /* Simply lower IRQL back */ 169 KfLowerIrql(LockHandle->OldIrql); 170 } 171 172 /* 173 * @implemented 174 */ 175 BOOLEAN 176 FASTCALL 177 KeTryToAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, 178 IN PKIRQL OldIrql) 179 { 180 /* Simply raise to synch */ 181 KeRaiseIrql(SYNCH_LEVEL, OldIrql); 182 183 /* Always return true on UP Machines */ 184 return TRUE; 185 } 186 187 /* 188 * @implemented 189 */ 190 LOGICAL 191 FASTCALL 192 KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, 193 OUT PKIRQL OldIrql) 194 { 195 /* Simply raise to dispatch */ 196 KeRaiseIrql(DISPATCH_LEVEL, OldIrql); 197 198 /* Always return true on UP Machines */ 199 return TRUE; 200 } 201 202 /* EOF */ 203