3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: hal/halppc/generic/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
22 KfRaiseIrql (KIRQL NewIrql
);
25 KfLowerIrql (KIRQL NewIrql
);
27 /* FUNCTIONS *****************************************************************/
34 KeLowerIrql(KIRQL NewIrql
)
36 /* Call the fastcall function */
46 KeRaiseIrql(KIRQL NewIrql
,
49 /* Call the fastcall function */
50 return *OldIrql
= KfRaiseIrql(NewIrql
);
58 KeAcquireSpinLock(PKSPIN_LOCK SpinLock
,
61 /* Call the fastcall function */
62 *OldIrql
= KfAcquireSpinLock(SpinLock
);
70 KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock
)
72 /* Simply raise to dispatch */
73 return KfRaiseIrql(DISPATCH_LEVEL
);
81 KeReleaseSpinLock(PKSPIN_LOCK SpinLock
,
84 /* Call the fastcall function */
85 KfReleaseSpinLock(SpinLock
, NewIrql
);
93 KfAcquireSpinLock(PKSPIN_LOCK SpinLock
)
95 /* Simply raise to dispatch */
96 return KfRaiseIrql(DISPATCH_LEVEL
);
104 KfReleaseSpinLock(PKSPIN_LOCK SpinLock
,
107 /* Simply lower IRQL back */
108 KfLowerIrql(OldIrql
);
116 KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
)
118 /* Simply raise to dispatch */
119 return KfRaiseIrql(DISPATCH_LEVEL
);
127 KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
)
129 /* Simply raise to dispatch */
130 return KfRaiseIrql(DISPATCH_LEVEL
);
138 KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock
,
139 IN PKLOCK_QUEUE_HANDLE LockHandle
)
141 /* Simply raise to dispatch */
142 LockHandle
->OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
150 KeAcquireInStackQueuedSpinLockRaiseToSynch(IN PKSPIN_LOCK SpinLock
,
151 IN PKLOCK_QUEUE_HANDLE LockHandle
)
153 /* Simply raise to synch */
154 LockHandle
->OldIrql
= KfRaiseIrql(SYNCH_LEVEL
);
162 KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
165 /* Simply lower IRQL back */
166 KfLowerIrql(OldIrql
);
174 KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle
)
176 /* Simply lower IRQL back */
177 KfLowerIrql(LockHandle
->OldIrql
);
185 KeTryToAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
188 /* Simply raise to dispatch */
189 *OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
191 /* Always return true on UP Machines */
200 KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
203 /* Simply raise to dispatch */
204 *OldIrql
= KfRaiseIrql(DISPATCH_LEVEL
);
206 /* Always return true on UP Machines */