Subversion Repositories Kolibri OS

Rev

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