3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: hal/halx86/up/spinlock.c
5 * PURPOSE: Spinlock and Queued Spinlock Support
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
15 #undef KeAcquireSpinLock
16 #undef KeReleaseSpinLock
20 /* FUNCTIONS *****************************************************************/
27 KeLowerIrql(KIRQL NewIrql
)
29 /* Call the fastcall function */
38 KeRaiseIrql(KIRQL NewIrql
,
41 /* Call the fastcall function */
42 *OldIrql
= KfRaiseIrql(NewIrql
);
50 KeAcquireSpinLock(PKSPIN_LOCK SpinLock
,
53 /* Call the fastcall function */
54 *OldIrql
= KfAcquireSpinLock(SpinLock
);
62 KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock
)
64 /* Simply raise to dispatch */
65 return KfRaiseIrql(DISPATCH_LEVEL
);
73 KeReleaseSpinLock(PKSPIN_LOCK SpinLock
,
76 /* Call the fastcall function */
77 KfReleaseSpinLock(SpinLock
, NewIrql
);
85 KfAcquireSpinLock(PKSPIN_LOCK SpinLock
)
87 /* Simply raise to dispatch */
88 return KfRaiseIrql(DISPATCH_LEVEL
);
96 KfReleaseSpinLock(PKSPIN_LOCK SpinLock
,
99 /* Simply lower IRQL back */
100 KfLowerIrql(OldIrql
);
108 KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
)
110 /* Simply raise to dispatch */
111 return KfRaiseIrql(DISPATCH_LEVEL
);
119 KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
)
121 /* Simply raise to dispatch */
122 return KfRaiseIrql(DISPATCH_LEVEL
);
130 KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock
,
131 IN PKLOCK_QUEUE_HANDLE LockHandle
)
133 /* Simply raise to dispatch */
134 LockHandle
->OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
142 KeAcquireInStackQueuedSpinLockRaiseToSynch(IN PKSPIN_LOCK SpinLock
,
143 IN PKLOCK_QUEUE_HANDLE LockHandle
)
145 /* Simply raise to synch */
146 LockHandle
->OldIrql
= KfRaiseIrql(SYNCH_LEVEL
);
154 KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
157 /* Simply lower IRQL back */
158 KfLowerIrql(OldIrql
);
166 KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle
)
168 /* Simply lower IRQL back */
169 KfLowerIrql(LockHandle
->OldIrql
);
177 KeTryToAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
180 /* Simply raise to dispatch */
181 *OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
183 /* Always return true on UP Machines */
192 KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
195 /* Simply raise to dispatch */
196 *OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
198 /* Always return true on UP Machines */