Subversion Repositories Kolibri OS

Rev

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