Subversion Repositories Kolibri OS

Rev

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