Subversion Repositories Kolibri OS

Rev

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