Rev 1616 | Rev 1631 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1029 | serge | 1 | |
1630 | serge | 2 | |
3 | |||
1408 | serge | 4 | #define __SYSCALL_H__ |
5 | |||
6 | |||
1029 | serge | 7 | |
8 | |||
1434 | serge | 9 | #define FASTCALL __attribute__ ((fastcall)) __attribute__ ((dllimport)) |
10 | |||
1029 | serge | 11 | |
1434 | serge | 12 | |
13 | |||
1029 | serge | 14 | |
15 | |||
16 | #define PciApi __PciApi |
||
17 | #define CreateObject __CreateObject |
||
18 | #define DestroyObject __DestroyObject |
||
19 | |||
20 | |||
21 | |||
22 | |||
23 | |||
24 | void STDCALL FreeKernelSpace(void *mem)__asm__("FreeKernelSpace"); |
||
1408 | serge | 25 | addr_t STDCALL MapIoMem(addr_t base, size_t size, u32_t flags)__asm__("MapIoMem"); |
26 | void* STDCALL KernelAlloc(size_t size)__asm__("KernelAlloc"); |
||
1029 | serge | 27 | void* STDCALL KernelFree(void *mem)__asm__("KernelFree"); |
28 | void* STDCALL UserAlloc(size_t size)__asm__("UserAlloc"); |
||
29 | int STDCALL UserFree(void *mem)__asm__("UserFree"); |
||
30 | |||
31 | |||
1613 | serge | 32 | |
1408 | serge | 33 | |
1616 | serge | 34 | |
1408 | serge | 35 | |
1613 | serge | 36 | addr_t STDCALL AllocPages(count_t count)__asm__("AllocPages"); |
1029 | serge | 37 | |
38 | |||
39 | |||
40 | |||
41 | |||
42 | |||
43 | |||
44 | |||
1434 | serge | 45 | void FASTCALL MutexLock(struct mutex*)__asm__("MutexLock"); |
46 | void FASTCALL MutexUnlock(struct mutex*)__asm__("MutexUnlock"); |
||
47 | |||
1029 | serge | 48 | |
49 | |||
50 | |||
51 | int z, int h)__asm__("SetMouseData"); |
||
52 | |||
53 | |||
54 | u16_t STDCALL PciRead16(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead16"); |
||
55 | u32_t STDCALL PciRead32(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead32"); |
||
56 | |||
57 | |||
58 | u32_t STDCALL PciWrite16(u32_t bus, u32_t devfn, u32_t reg,u16_t val)__asm__("PciWrite16"); |
||
59 | u32_t STDCALL PciWrite32(u32_t bus, u32_t devfn, u32_t reg,u32_t val)__asm__("PciWrite32"); |
||
60 | |||
61 | |||
62 | PciRead8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg)) |
||
63 | |||
64 | |||
65 | PciRead16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg)) |
||
66 | |||
67 | |||
68 | PciRead32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg)) |
||
69 | |||
70 | |||
71 | PciWrite8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val)) |
||
72 | |||
73 | |||
74 | PciWrite16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val)) |
||
75 | |||
76 | |||
77 | PciWrite32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val)) |
||
78 | |||
79 | |||
80 | |||
81 | |||
82 | |||
83 | int dbgprintf(const char* format, ...); |
||
84 | |||
85 | |||
86 | |||
87 | |||
1616 | serge | 88 | { |
1029 | serge | 89 | evhandle_t evh; |
1616 | serge | 90 | |
1613 | serge | 91 | |
92 | "call *__imp__CreateEvent" |
||
93 | :"=A"(evh.raw) |
||
1616 | serge | 94 | :"S" (ev), "c"(flags) |
95 | :"memory"); |
||
96 | __asm__ __volatile__ ("":::"ebx","ecx", "esi", "edi"); |
||
1613 | serge | 97 | |
98 | |||
1616 | serge | 99 | }; |
100 | |||
1613 | serge | 101 | |
1616 | serge | 102 | { |
103 | __asm__ __volatile__ ( |
||
104 | "call *__imp__RaiseEvent" |
||
105 | ::"a"(evh.handle),"b"(evh.euid),"d"(flags),"S" (ev) |
||
106 | :"memory"); |
||
107 | __asm__ __volatile__ ("":::"ebx","ecx", "esi", "edi"); |
||
108 | |||
109 | |||
110 | |||
111 | |||
112 | { |
||
113 | __asm__ __volatile__ ( |
||
114 | "call *__imp__WaitEvent" |
||
115 | ::"a"(handle),"b"(euid)); |
||
116 | __asm__ __volatile__ ("":::"ecx","edx", "esi"); |
||
117 | }; |
||
118 | |||
119 | |||
120 | { |
||
121 | u32_t handle; |
||
122 | |||
123 | |||
124 | "call *__imp__GetEvent" |
||
125 | :"=a"(handle) |
||
126 | :"D"(ev) |
||
127 | :"memory"); |
||
128 | __asm__ __volatile__ ("":::"ebx","ecx","edx", "esi","edi"); |
||
129 | return handle; |
||
1613 | serge | 130 | }; |
131 | |||
132 | |||
1616 | serge | 133 | |
1613 | serge | 134 | { |
135 | int retval; |
||
1029 | serge | 136 | |
137 | |||
138 | :"=a"(retval) |
||
139 | :"a"(61), "b"(1)); |
||
140 | return retval; |
||
141 | } |
||
142 | |||
143 | |||
1613 | serge | 144 | { |
1029 | serge | 145 | int retval; |
146 | |||
147 | |||
148 | :"=a"(retval) |
||
149 | :"a"(61), "b"(2)); |
||
150 | return retval; |
||
151 | } |
||
152 | |||
153 | |||
1613 | serge | 154 | { |
1029 | serge | 155 | int retval; |
156 | |||
157 | |||
158 | :"=a"(retval) |
||
159 | :"a"(61), "b"(3)); |
||
160 | return retval; |
||
161 | } |
||
162 | |||
163 | |||
1408 | serge | 164 | { |
1029 | serge | 165 | u32_t retval; |
166 | |||
167 | |||
168 | "call *__imp__GetPgAddr \n\t" |
||
169 | :"=eax" (retval) |
||
170 | :"a" (mem) ); |
||
171 | return retval; |
||
172 | }; |
||
173 | |||
174 | |||
1408 | serge | 175 | { |
1029 | serge | 176 | size = (size+4095) & ~4095; |
177 | __asm__ __volatile__ ( |
||
178 | "call *__imp__CommitPages" |
||
179 | ::"a" (page), "b"(mem),"c"(size>>12) |
||
180 | :"edx" ); |
||
181 | __asm__ __volatile__ ("":::"eax","ebx","ecx"); |
||
182 | }; |
||
183 | |||
184 | |||
1408 | serge | 185 | { |
1029 | serge | 186 | size = (size+4095) & ~4095; |
187 | __asm__ __volatile__ ( |
||
188 | "call *__imp__UnmapPages" |
||
189 | ::"a" (mem), "c"(size>>12) |
||
190 | :"edx"); |
||
191 | __asm__ __volatile__ ("":::"eax","ecx"); |
||
192 | }; |
||
193 | |||
194 | |||
1408 | serge | 195 | { |
1029 | serge | 196 | if( !delay ) |
197 | delay++; |
||
198 | delay*= 500; |
||
1408 | serge | 199 | |
1029 | serge | 200 | |
201 | __asm__ __volatile__( |
||
1408 | serge | 202 | "xorl %%eax, %%eax \n\t" |
203 | "cpuid \n\t" |
||
204 | :::"eax","ebx","ecx","edx"); |
||
205 | }; |
||
206 | |||
207 | |||
208 | { |
||
209 | if(!delay) delay++; |
||
210 | delay*= 500; |
||
211 | |||
212 | |||
213 | { |
||
214 | __asm__ __volatile__( |
||
215 | "xorl %%eax, %%eax \n\t" |
||
216 | "cpuid" |
||
217 | :::"eax","ebx","ecx","edx" ); |
||
218 | } |
||
219 | } |
||
220 | |||
221 | |||
222 | { |
||
223 | time /= 10; |
||
224 | if(!time) time = 1; |
||
225 | |||
226 | |||
1029 | serge | 227 | "call *__imp__Delay" |
1408 | serge | 228 | ::"b" (time)); |
229 | __asm__ __volatile__ ( |
||
230 | "":::"ebx"); |
||
231 | |||
232 | |||
1029 | serge | 233 | |
234 | |||
1408 | serge | 235 | |
236 | { |
||
1029 | serge | 237 | u32_t retval; |
238 | |||
239 | |||
240 | "call *__imp__PciApi \n\t" |
||
1616 | serge | 241 | "movzxb %%al, %%eax" |
242 | :"=a" (retval) |
||
1029 | serge | 243 | :"a" (cmd) |
244 | :"cc"); |
||
1630 | serge | 245 | |
246 | |||
1029 | serge | 247 | }; |
248 | |||
249 | |||
1408 | serge | 250 | { |
1029 | serge | 251 | void *retval; |
252 | |||
253 | |||
254 | "call *__imp__CreateObject \n\t" |
||
255 | :"=a" (retval) |
||
256 | :"a" (size),"b"(pid) |
||
257 | :"esi","edi", "memory"); |
||
258 | return retval; |
||
259 | } |
||
260 | |||
261 | |||
1408 | serge | 262 | { |
1029 | serge | 263 | __asm__ __volatile__ ( |
264 | "call *__imp__DestroyObject \n\t" |
||
1408 | serge | 265 | : |
1029 | serge | 266 | :"a" (obj)); |
1408 | serge | 267 | __asm__ __volatile__ ( |
268 | "" |
||
269 | :::"eax","ebx","ecx","edx","esi","edi","cc","memory"); |
||
270 | } |
||
1029 | serge | 271 | |
272 | |||
1408 | serge | 273 | { |
1029 | serge | 274 | u32_t handle; |
1408 | serge | 275 | |
276 | |||
277 | ( |
||
278 | "pushl %%eax \n\t" |
||
279 | "call *__imp__GetService" |
||
280 | :"=eax" (handle) |
||
281 | :"a" (name) |
||
282 | :"ebx","ecx","edx","esi", "edi" |
||
283 | ); |
||
284 | return handle; |
||
285 | }; |
||
286 | |||
287 | |||
288 | { |
||
289 | u32_t ifl; |
||
1029 | serge | 290 | __asm__ __volatile__ ( |
291 | "pushf\n\t" |
||
292 | "popl %0\n\t" |
||
293 | "cli\n" |
||
294 | : "=r" (ifl)); |
||
295 | return ifl; |
||
296 | } |
||
297 | |||
298 | |||
1616 | serge | 299 | { |
1029 | serge | 300 | if (efl & (1<<9)) |
1616 | serge | 301 | __asm__ __volatile__ ("sti"); |
302 | } |
||
1029 | serge | 303 | |
304 | |||
1613 | serge | 305 | { |
306 | u32_t val; |
||
307 | asm volatile ( |
||
308 | "pushfl\n\t" |
||
309 | "popl %0\n" |
||
310 | : "=r" (val)); |
||
311 | return val; |
||
312 | } |
||
313 | |||
314 | |||
1408 | serge | 315 | { |
1029 | serge | 316 | u32_t tmp; |
317 | __asm__ __volatile__ ( |
||
318 | "cld \n\t" |
||
319 | "rep stosb \n" |
||
320 | :"=c"(tmp),"=D"(tmp) |
||
321 | :"a"(0),"c"(len),"D"(dst)); |
||
322 | __asm__ __volatile__ ("":::"ecx","edi"); |
||
323 | }; |
||
324 | |||
325 | |||
1408 | serge | 326 | { |
1029 | serge | 327 | __asm__ __volatile__ |
328 | ("outb %1, %0\n" : : "dN"(port), "a"(val)); |
||
329 | } |
||
330 | |||
331 | |||
1408 | serge | 332 | { |
1029 | serge | 333 | __asm__ __volatile__ |
334 | ("outw %1, %0\n" : : "dN"(port), "a"(val)); |
||
335 | } |
||
336 | |||
337 | |||
1408 | serge | 338 | { |
1029 | serge | 339 | __asm__ __volatile__ |
340 | ("outl %1, %0\n" : : "dN"(port), "a"(val)); |
||
341 | } |
||
342 | |||
343 | |||
1408 | serge | 344 | { |
1029 | serge | 345 | u8_t tmp; |
346 | __asm__ __volatile__ |
||
347 | ("inb %1, %0\n" : "=a"(tmp) : "dN"(port)); |
||
348 | return tmp; |
||
349 | }; |
||
350 | |||
351 | |||
1408 | serge | 352 | { |
1029 | serge | 353 | u16_t tmp; |
354 | __asm__ __volatile__ |
||
355 | ("inw %1, %0\n" : "=a"(tmp) : "dN"(port)); |
||
356 | return tmp; |
||
357 | }; |
||
358 | |||
359 | |||
1408 | serge | 360 | { |
1029 | serge | 361 | u32_t tmp; |
362 | __asm__ __volatile__ |
||
363 | ("inl %1, %0\n" : "=a"(tmp) : "dN"(port)); |
||
364 | return tmp; |
||
365 | }; |
||
366 | |||
367 | |||
1408 | serge | 368 | { |
1029 | serge | 369 | __asm__ __volatile__ ( |
370 | "call *__imp__Delay" |
||
371 | ::"b" (time)); |
||
372 | __asm__ __volatile__ ( |
||
373 | "":::"ebx"); |
||
374 | |||
375 | |||
376 | |||
377 | |||
1613 | serge | 378 | { |
1029 | serge | 379 | __asm__ __volatile__ ( |
380 | "call *__imp__ChangeTask"); |
||
381 | } |
||
382 | |||
383 | |||
1613 | serge | 384 | { |
1408 | serge | 385 | __asm__ __volatile__ |
386 | ( |
||
387 | "call *__imp__SetScreen" |
||
388 | : |
||
389 | :"a" (width-1),"d"(height-1), "c"(pitch) |
||
390 | ); |
||
391 | __asm__ __volatile__ |
||
392 | ("" :::"eax","ecx","edx"); |
||
393 | } |
||
394 | |||
395 | |||
396 | |||
397 | |||
398 | { |
||
399 | return (void __iomem*) MapIoMem(offset, size, 3); |
||
400 | } |
||
401 | |||
402 | |||
403 | { |
||
404 | FreeKernelSpace(addr); |
||
405 | } |
||
406 | |||
407 | |||
408 | pci_alloc_consistent(struct pci_dev *hwdev, size_t size, |
||
409 | addr_t *dma_handle) |
||
410 | { |
||
411 | |||
1616 | serge | 412 | |
413 | |||
414 | |||
1408 | serge | 415 | return (void*)MapIoMem(*dma_handle, size, PG_SW+PG_NOCACHE); |
416 | } |
||
417 | |||
418 | |||
419 | { |
||
420 | __asm__ __volatile__( |
||
421 | "call *__imp__SysMsgBoardStr" |
||
422 | ::"S" (text)); |
||
423 | }; |
||
424 | |||
425 | |||
426 | ><9)) |