Reactos
at listview 202 lines 3.7 kB view raw
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 */ 25VOID 26NTAPI 27KeRaiseIrql(KIRQL NewIrql, 28 PKIRQL OldIrql) 29{ 30 /* Call the fastcall function */ 31 *OldIrql = KfRaiseIrql(NewIrql); 32} 33 34/* 35 * @implemented 36 */ 37VOID 38NTAPI 39KeLowerIrql(KIRQL NewIrql) 40{ 41 /* Call the fastcall function */ 42 KfLowerIrql(NewIrql); 43} 44 45/* 46 * @implemented 47 */ 48VOID 49NTAPI 50KeAcquireSpinLock(PKSPIN_LOCK SpinLock, 51 PKIRQL OldIrql) 52{ 53 /* Call the fastcall function */ 54 *OldIrql = KfAcquireSpinLock(SpinLock); 55} 56 57/* 58 * @implemented 59 */ 60KIRQL 61FASTCALL 62KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) 63{ 64 /* Simply raise to dispatch */ 65 return KfRaiseIrql(DISPATCH_LEVEL); 66} 67 68/* 69 * @implemented 70 */ 71VOID 72NTAPI 73KeReleaseSpinLock(PKSPIN_LOCK SpinLock, 74 KIRQL NewIrql) 75{ 76 /* Call the fastcall function */ 77 KfReleaseSpinLock(SpinLock, NewIrql); 78} 79 80/* 81 * @implemented 82 */ 83KIRQL 84FASTCALL 85KfAcquireSpinLock(PKSPIN_LOCK SpinLock) 86{ 87 /* Simply raise to dispatch */ 88 return KfRaiseIrql(DISPATCH_LEVEL); 89} 90 91/* 92 * @implemented 93 */ 94VOID 95FASTCALL 96KfReleaseSpinLock(PKSPIN_LOCK SpinLock, 97 KIRQL OldIrql) 98{ 99 /* Simply lower IRQL back */ 100 KeLowerIrql(OldIrql); 101} 102 103/* 104 * @implemented 105 */ 106KIRQL 107FASTCALL 108KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) 109{ 110 /* Simply raise to dispatch */ 111 return KfRaiseIrql(DISPATCH_LEVEL); 112} 113 114/* 115 * @implemented 116 */ 117KIRQL 118FASTCALL 119KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) 120{ 121 /* Simply raise to dispatch */ 122 return KfRaiseIrql(DISPATCH_LEVEL); 123} 124 125/* 126 * @implemented 127 */ 128VOID 129FASTCALL 130KeAcquireInStackQueuedSpinLock(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 */ 140VOID 141FASTCALL 142KeAcquireInStackQueuedSpinLockRaiseToSynch(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 */ 152VOID 153FASTCALL 154KeReleaseQueuedSpinLock(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 */ 164VOID 165FASTCALL 166KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) 167{ 168 /* Simply lower IRQL back */ 169 KfLowerIrql(LockHandle->OldIrql); 170} 171 172/* 173 * @implemented 174 */ 175BOOLEAN 176FASTCALL 177KeTryToAcquireQueuedSpinLockRaiseToSynch(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 */ 190LOGICAL 191FASTCALL 192KeTryToAcquireQueuedSpinLock(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 */