Subversion Repositories Kolibri OS

Rev

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