Reactos
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 */