Subversion Repositories Kolibri OS

Rev

Rev 3482 | Rev 4125 | 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
void   STDCALL MapPage(void *vaddr, addr_t paddr, u32_t flags)__asm__("MapPage");
3031 serge 42
1029 serge 43
 
2967 Serge 44
 
1029 serge 45
46
 
47
48
 
49
50
 
1434 serge 51
void  FASTCALL MutexLock(struct mutex*)__asm__("MutexLock");
52
void  FASTCALL MutexUnlock(struct mutex*)__asm__("MutexUnlock");
53
1029 serge 54
 
1872 serge 55
u32_t  IMPORT  GetPid(void)__asm__("GetPid");
2169 serge 56
1872 serge 57
 
2967 Serge 58
                    void *fn, void *data)asm("TimerHs");
59
60
 
3482 Serge 61
62
 
1029 serge 63
64
 
65
                            int z, int h)__asm__("SetMouseData");
66
67
 
1872 serge 68
69
 
70
 
1029 serge 71
u16_t STDCALL PciRead16(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead16");
72
u32_t STDCALL PciRead32(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead32");
73
74
 
75
u32_t STDCALL PciWrite16(u32_t bus, u32_t devfn, u32_t reg,u16_t val)__asm__("PciWrite16");
76
u32_t STDCALL PciWrite32(u32_t bus, u32_t devfn, u32_t reg,u32_t val)__asm__("PciWrite32");
77
78
 
79
        PciRead8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
80
81
 
82
        PciRead16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
83
84
 
85
        PciRead32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
86
87
 
88
        PciWrite8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
89
90
 
91
        PciWrite16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
92
93
 
94
        PciWrite32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
95
96
 
3031 serge 97
                    u8 *val)
98
{
99
    *val = PciRead8(dev->busnr, dev->devfn, where);
100
    return 1;
101
}
102
103
 
104
                    u16 *val)
105
{
106
    *val = PciRead16(dev->busnr, dev->devfn, where);
107
    return 1;
108
}
109
110
 
111
                    u32 *val)
112
{
113
    *val = PciRead32(dev->busnr, dev->devfn, where);
114
    return 1;
115
}
116
117
 
118
                    u8 val)
119
{
120
    PciWrite8(dev->busnr, dev->devfn, where, val);
121
    return 1;
122
}
123
124
 
125
                    u16 val)
126
{
127
    PciWrite16(dev->busnr, dev->devfn, where, val);
128
    return 1;
129
}
130
131
 
132
                    u32 val)
133
{
134
    PciWrite32(dev->busnr, dev->devfn, where, val);
135
    return 1;
136
}
137
138
 
1029 serge 139
140
 
141
int dbgprintf(const char* format, ...);
142
143
 
144
145
 
4110 Serge 146
{
147
    int pid;
148
     __asm__ __volatile__ (
149
     "call *__imp__CreateThread"
150
     :"=a"(pid)
151
     :"b"(1),"c"(entry),"d"(0)
152
     :"memory");
153
     __asm__ __volatile__ ("":::"ebx","ecx","edx","esi","edi");
154
     return pid;
155
};
156
157
 
158
 
1616 serge 159
{
1029 serge 160
     evhandle_t evh;
1616 serge 161
1613 serge 162
 
163
     "call *__imp__CreateEvent"
164
     :"=A"(evh.raw)
1616 serge 165
     :"S" (ev), "c"(flags)
166
     :"memory");
167
     __asm__ __volatile__ ("":::"ebx","ecx","edx","esi", "edi");
2005 serge 168
1613 serge 169
 
1616 serge 170
};
171
1613 serge 172
 
1616 serge 173
{
174
     __asm__ __volatile__ (
175
     "call *__imp__RaiseEvent"
176
     ::"a"(evh.handle),"b"(evh.euid),"d"(flags),"S" (ev)
177
     :"memory");
178
     __asm__ __volatile__ ("":::"ebx","ecx","edx","esi","edi");
2005 serge 179
1616 serge 180
 
181
182
 
2005 serge 183
{
1616 serge 184
     __asm__ __volatile__ (
185
     "call *__imp__WaitEvent"
186
     ::"a"(evh.handle),"b"(evh.euid));
2005 serge 187
     __asm__ __volatile__ ("":::"ebx","ecx","edx","esi","edi");
188
};
1616 serge 189
190
 
3391 Serge 191
{
192
    int retval;
193
    __asm__ __volatile__ (
194
    "call *__imp__WaitEventTimeout"
195
    :"=a"(retval)
196
    :"a"(evh.handle),"b"(evh.euid), "c"(timeout));
197
    __asm__ __volatile__ ("":::"ebx","ecx","edx","esi","edi");
198
    return retval;
199
};
200
201
 
2967 Serge 202
{
203
     __asm__ __volatile__ (
204
     "call *__imp__DestroyEvent"
205
     ::"a"(evh.handle),"b"(evh.euid));
206
     __asm__ __volatile__ ("":::"ebx","ecx","edx","esi","edi");
207
};
208
209
 
1616 serge 210
{
211
    u32_t  handle;
212
213
 
214
    "call *__imp__GetEvent"
215
    :"=a"(handle)
216
    :"D"(ev)
217
    :"memory");
218
    __asm__ __volatile__ ("":::"ebx","ecx","edx", "esi","edi");
219
     return handle;
1613 serge 220
};
221
222
 
1616 serge 223
 
1613 serge 224
{
225
  int retval;
1029 serge 226
227
 
228
      :"=a"(retval)
229
      :"a"(61), "b"(1));
230
  return retval;
231
}
232
233
 
1613 serge 234
{
1029 serge 235
  int retval;
236
237
 
238
      :"=a"(retval)
239
      :"a"(61), "b"(2));
240
  return retval;
241
}
242
243
 
1613 serge 244
{
1029 serge 245
  int retval;
246
247
 
248
      :"=a"(retval)
249
      :"a"(61), "b"(3));
250
  return retval;
251
}
252
253
 
1408 serge 254
{
1029 serge 255
     u32_t retval;
256
257
 
258
     "call *__imp__GetPgAddr \n\t"
259
     :"=a" (retval)
2967 Serge 260
     :"a" (mem) );
1029 serge 261
     return retval;
262
};
263
264
 
1408 serge 265
{
1029 serge 266
     size = (size+4095) & ~4095;
267
     __asm__ __volatile__ (
268
     "call *__imp__CommitPages"
269
     ::"a" (page), "b"(mem),"c"(size>>12)
270
     :"edx" );
271
     __asm__ __volatile__ ("":::"eax","ebx","ecx");
272
};
273
274
 
1408 serge 275
{
1029 serge 276
     size = (size+4095) & ~4095;
277
     __asm__ __volatile__ (
278
     "call *__imp__UnmapPages"
279
     ::"a" (mem), "c"(size>>12)
280
     :"edx");
281
     __asm__ __volatile__ ("":::"eax","ecx");
282
};
283
284
 
1408 serge 285
{
1029 serge 286
     if( !delay )
287
        delay++;
288
     delay*= 500;
1408 serge 289
1029 serge 290
 
291
        __asm__ __volatile__(
1408 serge 292
        "xorl %%eax, %%eax \n\t"
293
        "cpuid \n\t"
294
        :::"eax","ebx","ecx","edx");
295
     };
296
297
 
298
{
299
    if(!delay) delay++;
300
    delay*= 100;
2967 Serge 301
1408 serge 302
 
303
    {
304
        __asm__ __volatile__(
305
        "xorl %%eax, %%eax \n\t"
306
        "cpuid"
307
        :::"eax","ebx","ecx","edx" );
308
    }
309
}
310
311
 
1964 serge 312
{
313
    msecs /= 10;
314
    if(!msecs) msecs = 1;
315
316
 
317
     "call *__imp__Delay"
318
     ::"b" (msecs));
319
     __asm__ __volatile__ (
320
     "":::"ebx");
321
322
 
323
324
 
1408 serge 325
{
326
    time /= 10;
327
    if(!time) time = 1;
328
329
 
1029 serge 330
     "call *__imp__Delay"
1408 serge 331
     ::"b" (time));
332
     __asm__ __volatile__ (
333
     "":::"ebx");
334
335
 
1029 serge 336
337
 
1408 serge 338
{
1029 serge 339
     u32_t retval;
340
341
 
342
     "call *__imp__PciApi \n\t"
1616 serge 343
     "movzxb %%al, %%eax"
344
     :"=a" (retval)
1029 serge 345
     :"a" (cmd)
346
     :"cc");
1630 serge 347
348
 
1029 serge 349
};
350
351
 
1408 serge 352
{
1029 serge 353
     void *retval;
354
355
 
356
     "call *__imp__CreateObject \n\t"
357
     :"=a" (retval)
358
     :"a" (size),"b"(pid)
359
     :"esi","edi", "memory");
360
     return retval;
361
}
362
363
 
1408 serge 364
{
1029 serge 365
     __asm__ __volatile__ (
366
     "call *__imp__DestroyObject \n\t"
1408 serge 367
     :
1029 serge 368
     :"a" (obj));
1408 serge 369
     __asm__ __volatile__ (
370
     ""
371
     :::"eax","ebx","ecx","edx","esi","edi","cc","memory");
372
}
1029 serge 373
374
 
1408 serge 375
{
1029 serge 376
    u32_t handle;
1408 serge 377
378
 
379
    (
380
     "pushl %%eax \n\t"
381
     "call *__imp__GetService"
382
     :"=a" (handle)
2967 Serge 383
     :"a" (name)
1408 serge 384
     :"ebx","ecx","edx","esi", "edi"
385
  );
386
  return handle;
387
};
388
389
 
390
{
391
     u32_t ifl;
1029 serge 392
     __asm__ __volatile__ (
393
     "pushf\n\t"
394
     "popl %0\n\t"
395
     "cli\n"
396
     : "=r" (ifl));
397
    return ifl;
398
}
399
400
 
1616 serge 401
{
1029 serge 402
     if (efl & (1<<9))
1616 serge 403
        __asm__ __volatile__ ("sti");
404
}
1029 serge 405
406
 
1613 serge 407
{
408
    u32_t val;
409
    asm volatile (
410
    "pushfl\n\t"
411
    "popl %0\n"
412
    : "=r" (val));
413
    return val;
414
}
415
416
 
1408 serge 417
{
1029 serge 418
     u32_t tmp;
419
     __asm__ __volatile__ (
420
     "cld \n\t"
421
     "rep stosb \n"
422
     :"=c"(tmp),"=D"(tmp)
423
     :"a"(0),"c"(len),"D"(dst));
424
     __asm__ __volatile__ ("":::"ecx","edi");
425
};
426
427
 
1408 serge 428
{
1029 serge 429
    __asm__ __volatile__
430
    ("outb  %1, %0\n" : : "dN"(port), "a"(val));
431
}
432
433
 
1408 serge 434
{
1029 serge 435
    __asm__ __volatile__
436
    ("outw  %1, %0\n" : : "dN"(port), "a"(val));
437
}
438
439
 
1408 serge 440
{
1029 serge 441
    __asm__ __volatile__
442
    ("outl  %1, %0\n" : : "dN"(port), "a"(val));
443
}
444
445
 
1408 serge 446
{
1029 serge 447
    u8_t tmp;
448
    __asm__ __volatile__
449
    ("inb %1, %0\n" : "=a"(tmp) : "dN"(port));
450
    return tmp;
451
};
452
453
 
1408 serge 454
{
1029 serge 455
    u16_t tmp;
456
    __asm__ __volatile__
457
    ("inw %1, %0\n" : "=a"(tmp) : "dN"(port));
458
    return tmp;
459
};
460
461
 
1408 serge 462
{
1029 serge 463
    u32_t tmp;
464
    __asm__ __volatile__
465
    ("inl %1, %0\n" : "=a"(tmp) : "dN"(port));
466
    return tmp;
467
};
468
469
 
1408 serge 470
{
1029 serge 471
     __asm__ __volatile__ (
472
     "call *__imp__Delay"
473
     ::"b" (time));
474
     __asm__ __volatile__ (
475
     "":::"ebx");
476
477
 
478
479
 
1613 serge 480
{
1029 serge 481
     __asm__ __volatile__ (
482
     "call *__imp__ChangeTask");
483
}
484
485
 
1613 serge 486
{
1408 serge 487
    __asm__ __volatile__
488
    (
489
        "call *__imp__SetScreen"
490
        :
491
        :"a" (width-1),"d"(height-1), "c"(pitch)
492
    );
493
    __asm__ __volatile__
494
    ("" :::"eax","ecx","edx");
495
}
496
497
 
498
499
 
500
{
501
    return (void __iomem*) MapIoMem(offset, size, PG_SW|PG_NOCACHE);
2967 Serge 502
}
1408 serge 503
504
 
3391 Serge 505
{
506
    return (void __iomem*) MapIoMem(offset, size, PG_SW|PG_NOCACHE);
507
}
508
509
 
510
 
1408 serge 511
{
512
    FreeKernelSpace(addr);
513
}
514
515
 
516
{
517
    __asm__ __volatile__(
518
    "call *__imp__SysMsgBoardStr"
519
    ::"S" (text));
520
};
521
522
 
2161 serge 523
524
 
3031 serge 525
{
526
    void *mem;
527
528
 
529
    if(mem)
530
        memset(mem, 0, size);
531
532
 
533
};
534
535
 
536
{
537
    KernelFree(addr);
538
}
539
540
 
541
542
 
543
#define RWSEM_ACTIVE_BIAS               0x00000001
544
#define RWSEM_ACTIVE_MASK               0x0000ffff
545
#define RWSEM_WAITING_BIAS              (-0x00010000)
546
#define RWSEM_ACTIVE_READ_BIAS          RWSEM_ACTIVE_BIAS
547
#define RWSEM_ACTIVE_WRITE_BIAS         (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
548
549
 
550
 
3243 Serge 551
//{
552
//    sem->count = RWSEM_UNLOCKED_VALUE;
553
//    spin_lock_init(&sem->wait_lock);
554
//    INIT_LIST_HEAD(&sem->wait_list);
555
//}
556
3031 serge 557
 
1408 serge 558
>