Subversion Repositories Kolibri OS

Rev

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