Subversion Repositories Kolibri OS

Rev

Rev 1434 | Rev 1616 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1029 serge 1
 
1408 serge 2
#define __SYSCALL_H__
3
4
 
5
 
1029 serge 6
7
 
8
{
9
    u32_t  code;
1613 serge 10
    u32_t  data[5];
11
}kevent_t;
12
13
 
14
{
15
  u32_t      handle;
1029 serge 16
  u32_t      io_code;
17
  void       *input;
18
  int        inp_size;
19
  void       *output;
20
  int        out_size;
21
}ioctl_t;
22
23
 
24
25
 
26
#define ERR_PARAM   -1
27
28
 
29
 
1408 serge 30
1029 serge 31
 
32
33
 
1434 serge 34
#define FASTCALL __attribute__ ((fastcall)) __attribute__ ((dllimport))
35
1029 serge 36
 
1434 serge 37
38
 
1029 serge 39
40
 
41
#define PciApi          __PciApi
42
//#define RegService      __RegService
43
#define CreateObject    __CreateObject
44
#define DestroyObject   __DestroyObject
45
46
 
47
48
 
49
#define PG_NOCACHE  0x018
50
51
 
52
void   STDCALL FreeKernelSpace(void *mem)__asm__("FreeKernelSpace");
1408 serge 53
addr_t STDCALL MapIoMem(addr_t base, size_t size, u32_t flags)__asm__("MapIoMem");
54
void*  STDCALL KernelAlloc(size_t size)__asm__("KernelAlloc");
1029 serge 55
void*  STDCALL KernelFree(void *mem)__asm__("KernelFree");
56
void*  STDCALL UserAlloc(size_t size)__asm__("UserAlloc");
57
int    STDCALL UserFree(void *mem)__asm__("UserFree");
58
59
 
1613 serge 60
1408 serge 61
 
62
 
1613 serge 63
addr_t STDCALL AllocPages(count_t count)__asm__("AllocPages");
1029 serge 64
65
 
66
67
 
68
69
 
70
71
 
1434 serge 72
void  FASTCALL MutexLock(struct mutex*)__asm__("MutexLock");
73
void  FASTCALL MutexUnlock(struct mutex*)__asm__("MutexUnlock");
74
1029 serge 75
 
76
77
 
78
                            int z, int h)__asm__("SetMouseData");
79
80
 
81
82
 
83
u16_t STDCALL PciRead16(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead16");
84
u32_t STDCALL PciRead32(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead32");
85
86
 
87
u32_t STDCALL PciWrite16(u32_t bus, u32_t devfn, u32_t reg,u16_t val)__asm__("PciWrite16");
88
u32_t STDCALL PciWrite32(u32_t bus, u32_t devfn, u32_t reg,u32_t val)__asm__("PciWrite32");
89
90
 
91
        PciRead8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
92
93
 
94
        PciRead16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
95
96
 
97
        PciRead32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
98
99
 
100
        PciWrite8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
101
102
 
103
        PciWrite16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
104
105
 
106
        PciWrite32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
107
108
 
109
 
110
111
 
112
int dbgprintf(const char* format, ...);
113
114
 
115
116
 
1613 serge 117
 
118
{
1029 serge 119
     u32_t  handle;
1613 serge 120
     u32_t  euid;
121
122
 
123
     "call *__imp__CreateEvent"
124
     :"=a"(handle),"=d"(euid)
125
     :"S" (ev), "c"(flags));
126
     __asm__ __volatile__ ("":::"ebx","ecx", "esi", "edi");
127
128
 
129
130
 
131
};
132
133
 
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"
241
     :"=a" (retval)
242
     :"a" (cmd)
243
     :"memory");
244
     return retval;
245
};
246
247
 
1408 serge 248
{
1029 serge 249
     void *retval;
250
251
 
252
     "call *__imp__CreateObject \n\t"
253
     :"=a" (retval)
254
     :"a" (size),"b"(pid)
255
     :"esi","edi", "memory");
256
     return retval;
257
}
258
259
 
1408 serge 260
{
1029 serge 261
     __asm__ __volatile__ (
262
     "call *__imp__DestroyObject \n\t"
1408 serge 263
     :
1029 serge 264
     :"a" (obj));
1408 serge 265
     __asm__ __volatile__ (
266
     ""
267
     :::"eax","ebx","ecx","edx","esi","edi","cc","memory");
268
}
1029 serge 269
270
 
1408 serge 271
{
1029 serge 272
    u32_t handle;
1408 serge 273
274
 
275
    (
276
     "pushl %%eax \n\t"
277
     "call *__imp__GetService"
278
     :"=eax" (handle)
279
     :"a" (name)
280
     :"ebx","ecx","edx","esi", "edi"
281
  );
282
  return handle;
283
};
284
285
 
286
{
287
     u32_t ifl;
1029 serge 288
     __asm__ __volatile__ (
289
     "pushf\n\t"
290
     "popl %0\n\t"
291
     "cli\n"
292
     : "=r" (ifl));
293
    return ifl;
294
}
295
296
 
1408 serge 297
{
1029 serge 298
     __asm__ __volatile__ (
299
     "pushl %0\n\t"
300
     "popf\n"
301
     : : "r" (ifl)
302
	);
303
}
304
305
 
1613 serge 306
{
307
    u32_t val;
308
    asm volatile (
309
    "pushfl\n\t"
310
    "popl %0\n"
311
    : "=r" (val));
312
    return val;
313
}
314
315
 
1408 serge 316
{
1029 serge 317
     u32_t tmp;
318
     __asm__ __volatile__ (
319
//     "xorl %%eax, %%eax \n\t"
320
     "cld \n\t"
321
     "rep stosb \n"
322
     :"=c"(tmp),"=D"(tmp)
323
     :"a"(0),"c"(len),"D"(dst));
324
     __asm__ __volatile__ ("":::"ecx","edi");
325
};
326
327
 
1408 serge 328
{
1029 serge 329
    __asm__ __volatile__
330
    ("outb  %1, %0\n" : : "dN"(port), "a"(val));
331
}
332
333
 
1408 serge 334
{
1029 serge 335
    __asm__ __volatile__
336
    ("outw  %1, %0\n" : : "dN"(port), "a"(val));
337
}
338
339
 
1408 serge 340
{
1029 serge 341
    __asm__ __volatile__
342
    ("outl  %1, %0\n" : : "dN"(port), "a"(val));
343
}
344
345
 
1408 serge 346
{
1029 serge 347
    u8_t tmp;
348
    __asm__ __volatile__
349
    ("inb %1, %0\n" : "=a"(tmp) : "dN"(port));
350
    return tmp;
351
};
352
353
 
1408 serge 354
{
1029 serge 355
    u16_t tmp;
356
    __asm__ __volatile__
357
    ("inw %1, %0\n" : "=a"(tmp) : "dN"(port));
358
    return tmp;
359
};
360
361
 
1408 serge 362
{
1029 serge 363
    u32_t tmp;
364
    __asm__ __volatile__
365
    ("inl %1, %0\n" : "=a"(tmp) : "dN"(port));
366
    return tmp;
367
};
368
369
 
1408 serge 370
{
1029 serge 371
     __asm__ __volatile__ (
372
     "call *__imp__Delay"
373
     ::"b" (time));
374
     __asm__ __volatile__ (
375
     "":::"ebx");
376
377
 
378
379
 
1613 serge 380
{
1029 serge 381
     __asm__ __volatile__ (
382
     "call *__imp__ChangeTask");
383
}
384
385
 
1613 serge 386
{
1408 serge 387
    __asm__ __volatile__
388
    (
389
        "call *__imp__SetScreen"
390
        :
391
        :"a" (width-1),"d"(height-1), "c"(pitch)
392
    );
393
    __asm__ __volatile__
394
    ("" :::"eax","ecx","edx");
395
}
396
397
 
398
399
 
400
{
401
    return (void __iomem*) MapIoMem(offset, size, 3);
402
}
403
404
 
405
{
406
    FreeKernelSpace(addr);
407
}
408
409
 
410
pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
411
                      addr_t *dma_handle)
412
{
413
    *dma_handle = AllocPages(size >> 12);
414
    return (void*)MapIoMem(*dma_handle, size, PG_SW+PG_NOCACHE);
415
}
416
417
 
418
{
419
    __asm__ __volatile__(
420
    "call *__imp__SysMsgBoardStr"
421
    ::"S" (text));
422
};
423
424
 
425