Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
948 serge 1
 
2
3
 
4
{
5
  u32_t      handle;
6
  u32_t      io_code;
7
  void       *input;
8
  int        inp_size;
9
  void       *output;
10
  int        out_size;
11
}ioctl_t;
12
13
 
14
15
 
16
#define ERR_PARAM   -1
17
18
 
19
 
20
21
 
22
23
 
24
#define IMPORT __attribute__ ((dllimport))
25
26
 
27
28
 
29
#define PciApi          __PciApi
30
//#define RegService      __RegService
31
#define CreateObject    __CreateObject
32
#define DestroyObject   __DestroyObject
33
34
 
35
36
 
37
#define PG_NOCACHE  0x018
38
39
 
40
void*  STDCALL KernelAlloc(size_t size)__asm__("KernelAlloc");
41
void*  STDCALL KernelFree(void *mem)__asm__("KernelFree");
42
void*  STDCALL UserAlloc(size_t size)__asm__("UserAlloc");
43
int    STDCALL UserFree(void *mem)__asm__("UserFree");
44
45
 
46
47
 
48
49
 
50
51
 
52
//void *DestroyObject(void *obj);
53
54
 
55
56
 
57
58
 
59
 
60
61
 
62
u16_t STDCALL PciRead16(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead16");
63
u32_t STDCALL PciRead32(u32_t bus, u32_t devfn, u32_t reg)__asm__("PciRead32");
64
65
 
951 serge 66
u32_t STDCALL PciWrite16(u32_t bus, u32_t devfn, u32_t reg,u16_t val)__asm__("PciWrite16");
67
u32_t STDCALL PciWrite32(u32_t bus, u32_t devfn, u32_t reg,u32_t val)__asm__("PciWrite32");
68
948 serge 69
 
70
        PciRead8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
71
72
 
951 serge 73
        PciRead16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
74
948 serge 75
 
951 serge 76
        PciRead32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg))
77
78
 
948 serge 79
        PciWrite8(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
80
81
 
82
        PciWrite16(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
83
84
 
85
        PciWrite32(PCI_BUS_FROM_TAG(tag),PCI_DFN_FROM_TAG(tag),(reg),(val))
86
87
 
88
 
89
90
 
91
int dbgprintf(const char* format, ...);
92
93
 
94
95
 
96
{
97
  int retval;
98
99
 
100
      :"=a"(retval)
101
      :"a"(61), "b"(1));
102
  return retval;
103
}
104
105
 
106
{
107
  int retval;
108
109
 
110
      :"=a"(retval)
111
      :"a"(61), "b"(2));
112
  return retval;
113
}
114
115
 
116
{
117
  int retval;
118
119
 
120
      :"=a"(retval)
121
      :"a"(61), "b"(3));
122
  return retval;
123
}
124
125
 
126
{
127
     u32_t retval;
128
129
 
130
     "call *__imp__GetPgAddr \n\t"
131
     :"=eax" (retval)
132
     :"a" (mem) );
133
     return retval;
134
};
135
136
 
137
{
138
     size = (size+4095) & ~4095;
139
     __asm__ __volatile__ (
140
     "call *__imp__CommitPages"
141
     ::"a" (page), "b"(mem),"c"(size>>12)
142
     :"edx" );
143
     __asm__ __volatile__ ("":::"eax","ebx","ecx");
144
};
145
146
 
147
{
148
     size = (size+4095) & ~4095;
149
     __asm__ __volatile__ (
150
     "call *__imp__UnmapPages"
151
     ::"a" (mem), "c"(size>>12)
152
     :"edx");
153
     __asm__ __volatile__ ("":::"eax","ecx");
154
};
155
156
 
157
{
158
     if( !delay )
159
        delay++;
160
     delay*=2000;
161
162
 
163
     "1:\n\t"
164
     "xorl %%eax, %%eax \n\t"
165
     "cpuid \n\t"
166
     "decl %%edi \n\t"
167
     "jnz 1b"
168
     :
169
     :"D"(delay)
170
     :"eax","ebx","ecx","edx");
171
};
172
173
 
174
{
175
     u32_t retval;
176
177
 
178
     "call *__imp__PciApi"
179
     :"=a" (retval)
180
     :"a" (cmd)
181
     :"memory");
182
     return retval;
183
};
184
185
 
186
{
187
     void *retval;
188
189
 
190
     "call *__imp__CreateObject \n\t"
191
     :"=a" (retval)
192
     :"a" (size),"b"(pid)
193
     :"esi","edi", "memory");
194
     return retval;
195
}
196
197
 
198
{
199
     __asm__ __volatile__ (
200
     "call *__imp__DestroyObject"
201
     :
202
     :"a" (obj)
203
     :"ebx","edx","esi","edi", "memory");
204
}
205
206
 
207
 
208
u32 __RegService(char *name, srv_proc_t proc)
209
{
210
  u32 retval;
211
212
 
213
  (
214
    "pushl %%eax \n\t"
215
    "pushl %%ebx \n\t"
216
    "call *__imp__RegService \n\t"
217
    :"=eax" (retval)
218
    :"a" (proc), "b" (name)
219
    :"memory"
220
  );
221
  return retval;
222
};
223
*/
224
225
 
226
{
227
     u32_t ifl;
228
     __asm__ __volatile__ (
229
     "pushf\n\t"
230
     "popl %0\n\t"
231
     "cli\n"
232
     : "=r" (ifl));
233
    return ifl;
234
}
235
236
 
237
{
238
     __asm__ __volatile__ (
239
     "pushl %0\n\t"
240
     "popf\n"
241
     : : "r" (ifl)
242
	);
243
}
244
245
 
246
{
247
     u32_t tmp;
248
     __asm__ __volatile__ (
249
//     "xorl %%eax, %%eax \n\t"
250
     "cld \n\t"
251
     "rep stosb \n"
252
     :"=c"(tmp),"=D"(tmp)
253
     :"a"(0),"c"(len),"D"(dst));
254
     __asm__ __volatile__ ("":::"ecx","edi");
255
};
256