source: trunk/src/win32k/dev32/d32hlp.asm@ 5280

Last change on this file since 5280 was 5204, checked in by bird, 25 years ago

No change.

File size: 6.9 KB
Line 
1; $Id: d32hlp.asm,v 1.5 2001-02-20 05:00:53 bird Exp $
2;
3; d32hlp - 32-bit Device Driver Helper Function.
4;
5; Copyright (c) 1999 knut st. osmundsen
6;
7; Project Odin Software License can be found in LICENSE.TXT
8;
9 .386p
10
11
12;
13; Include files
14;
15 include devsegdf.inc
16 include devhlp.inc
17
18
19;
20; Exported symbols
21;
22 public D32Hlp_VirtToLin
23 public D32Hlp_VirtToLin2
24 public D32Hlp_VirtToLin3
25 public D32Hlp_GetDOSVar
26 public D32Hlp_Yield
27 public D32Hlp_VMAlloc
28 public D32Hlp_VMFree
29 public D32Hlp_VMSetMem
30 public D32Hlp_VMLock
31 public D32Hlp_VMLock2
32 public D32Hlp_VMUnLock
33
34
35;
36; extrns
37;
38 extrn _Device_Help:dword
39
40
41CODE32 segment
42 assume cs:CODE32, ds:flat, ss:nothing, es:nothing
43 .386p
44
45;PVOID D32HLPCALL D32Hlp_VirtToLin(ULONG ulPtr16); /* eax */
46; Sideeffect: edx holds the error code on error.
47D32Hlp_VirtToLin proc near
48 push esi
49
50 movzx esi, ax
51 shr eax, 16
52 mov dl, DevHlp_VirtToLin
53 jmp far ptr CODE16:Thunk16_VirtToLin
54Thunk32_VirtToLin::
55 jnc Finished
56 mov edx, eax
57 xor eax, eax
58
59Finished:
60 pop esi
61 ret
62D32Hlp_VirtToLin endp
63
64
65;PVOID D32HLPCALL D32Hlp_VirtToLin2(USHORT usSelector, /* ax */
66; ULONG ulOffset); /* edx */
67; Sideeffect: edx holds the error code on error.
68D32Hlp_VirtToLin2 proc near
69 push esi
70
71 mov esi, edx
72 mov dl, DevHlp_VirtToLin
73 jmp far ptr CODE16:Thunk16_VirtToLin2
74Thunk32_VirtToLin2::
75 jnc Finished
76 mov edx, eax
77 xor eax, eax
78
79Finished:
80 pop esi
81 ret
82D32Hlp_VirtToLin2 endp
83
84
85;D32RET D32HLPCALL D32Hlp_VirtToLin3(USHORT usSelector, /* ax */
86; ULONG ulOffset, /* edx */
87; PPVOID ppvLinAddress); /* ecx */
88D32Hlp_VirtToLin3 proc near
89 push esi
90
91 mov esi, edx
92 mov dl, DevHlp_VirtToLin
93 jmp far ptr CODE16:Thunk16_VirtToLin3
94Thunk32_VirtToLin3::
95 jc Finished
96 mov [ecx], eax
97 xor eax, eax
98
99Finished:
100 pop esi
101 ret
102D32Hlp_VirtToLin3 endp
103
104
105;PVOID D32HLPCALL D32Hlp_GetDOSVar(ULONG ulVarNumber, /* eax */
106; ULONG ulVarMember); /* edx */
107D32Hlp_GetDOSVar proc near
108 push bx
109 mov ecx, edx
110 mov dl, DevHlp_GetDOSVar
111 jmp far ptr CODE16:Thunk16_GetDOSVar
112Thunk32_GetDOSVar::
113 jc Error
114 shl eax, 16
115 mov bx, ax
116 xchg eax, ebx
117 call D32Hlp_VirtToLin
118 jmp Finished
119
120Error:
121 xor eax, eax
122
123Finished:
124 pop bx
125 ret
126D32Hlp_GetDOSVar endp
127
128
129;VOID D32HLPCALL D32Hlp_Yield(VOID);
130D32Hlp_Yield proc near
131 mov dl, DevHlp_Yield
132 jmp far ptr CODE16:Thunk16_Yield
133Thunk32_Yield::
134 ret
135D32Hlp_Yield endp
136
137
138
139;PVOID D32HLPCALL D32Hlp_VMAlloc(ULONG flFlags, /* eax */
140; ULONG cbSize, /* edx */
141; ULONG ulPhysAddr);/* ecx */
142D32Hlp_VMAlloc proc near
143 push edi
144
145 mov edi, ecx
146 mov ecx, edx
147
148 mov dl, DevHlp_VMAlloc
149 jmp far ptr CODE16:Thunk16_VMAlloc
150Thunk32_VMAlloc::
151 jnc Finished
152 xor eax, eax
153
154Finished:
155 pop edi
156 ret
157D32Hlp_VMAlloc endp
158
159
160;D32RET D32HLPCALL D32Hlp_VMFree(PVOID pvAddress); /* eax */
161D32Hlp_VMFree proc near
162 mov dl, DevHlp_VMFree
163 jmp far ptr CODE16:Thunk16_VMFree
164Thunk32_VMFree::
165 jc Finished
166 xor eax, eax
167Finished:
168 ret
169D32Hlp_VMFree endp
170
171
172;D32RET D32HLPCALL D32Hlp_VMSetMem(PVOID pvAddress, /* eax */
173; ULONG cbSize, /* edx */
174; ULONG flFlags); /* ecx */
175D32Hlp_VMSetMem proc near
176 push ebx
177
178 mov ebx, eax
179 mov eax, ecx
180 mov ecx, edx
181
182 mov dl, DevHlp_VMSetMem
183 jmp far ptr CODE16:Thunk16_VMSetMem
184Thunk32_VMSetMem::
185
186 pop ebx
187 ret
188D32Hlp_VMSetMem endp
189
190
191;D32RET D32HLPCALL D32Hlp_VMLock(PVOID pvAddress, /* eax (ebp + 08h) */
192; ULONG ulLength, /* edx (ebp + 0Ch)*/
193; ULONG flFlags, /* ecx (ebp + 10h)*/
194; PVOID pvPagelist, /* ebp + 14h */
195; PLOCKHANDLE pLockHandle, /* ebp + 18h */
196; PULONG pulPageListCount); /* ebp + 1Ch */
197D32Hlp_VMLock proc near
198 push ebp
199 mov ebp, esp
200 push esi
201 push edi
202 push ebx
203
204 mov edi, [ebp + 14h]
205 mov esi, [ebp + 18h]
206 mov ebx, eax
207 mov eax, ecx
208 mov ecx, edx
209
210 mov dl, DevHlp_VMLock
211 jmp far ptr CODE16:Thunk16_VMLock
212Thunk32_VMLock::
213 jc Finished
214 mov ebx, [ebp + 1Ch]
215 or ebx, ebx
216 jz Success
217 mov [ebx], eax
218
219Success:
220 xor eax, eax
221
222Finished:
223 pop ebx
224 pop edi
225 pop esi
226 pop ebp
227 ret
228D32Hlp_VMLock endp
229
230
231;D32RET D32HLPCALL D32Hlp_VMLock2(PVOID pvAddress, /* eax (ebp + 08h) */
232; ULONG ulLength, /* edx (ebp + 0Ch)*/
233; ULONG flFlags, /* ecx (ebp + 10h)*/
234; PLOCKHANDLE pLockHandle); /* ebp + 14h */
235D32Hlp_VMLock2 proc near
236 push ebp
237 mov ebp, esp
238 push esi
239 push edi
240 push ebx
241
242 mov edi, 0ffffffffh
243 mov esi, [ebp + 14h]
244 mov ebx, eax
245 mov eax, ecx
246 mov ecx, edx
247
248 mov dl, DevHlp_VMLock
249 jmp far ptr CODE16:Thunk16_VMLock2
250Thunk32_VMLock2::
251 jc Finished
252 xor eax, eax
253
254Finished:
255 pop ebx
256 pop edi
257 pop esi
258 pop ebp
259 ret
260D32Hlp_VMLock2 endp
261
262
263;D32RET D32HLPCALL D32Hlp_VMUnLock(PLOCKHANDLE pLockHandle); /* eax */
264D32Hlp_VMUnLock proc near
265 push esi
266
267 mov esi, eax
268 mov dl, DevHlp_VMUnlock
269 jmp far ptr CODE16:Thunk16_VMUnLock
270Thunk32_VMUnLock::
271 jc Finished
272 xor eax, eax
273
274Finished:
275 pop esi
276 ret
277D32Hlp_VMUnLock endp
278
279CODE32 ends
280
281
282
283
284
285;CODE16 segment
286CODE16 segment
287 assume cs:CODE16, ds:FLAT
288
289Thunk16_VirtToLin:
290 call [_Device_Help]
291 jmp far ptr FLAT:Thunk32_VirtToLin
292
293Thunk16_VirtToLin2:
294 call [_Device_Help]
295 jmp far ptr FLAT:Thunk32_VirtToLin2
296
297Thunk16_VirtToLin3:
298 call [_Device_Help]
299 jmp far ptr FLAT:Thunk32_VirtToLin3
300
301Thunk16_GetDOSVar:
302 call [_Device_Help]
303 jmp far ptr FLAT:Thunk32_GetDOSVar
304
305Thunk16_Yield:
306 call [_Device_Help]
307 jmp far ptr FLAT:Thunk32_Yield
308
309Thunk16_VMAlloc:
310 call [_Device_Help]
311 jmp far ptr FLAT:Thunk32_VMAlloc
312
313Thunk16_VMFree:
314 call [_Device_Help]
315 jmp far ptr FLAT:Thunk32_VMFree
316
317Thunk16_VMLock:
318 call [_Device_Help]
319 jmp far ptr FLAT:Thunk32_VMLock
320
321Thunk16_VMLock2:
322 call [_Device_Help]
323 jmp far ptr FLAT:Thunk32_VMLock2
324
325Thunk16_VMUnLock:
326 call [_Device_Help]
327 jmp far ptr FLAT:Thunk32_VMUnLock
328
329Thunk16_VMSetMem:
330 call [_Device_Help]
331 jmp far ptr FLAT:Thunk32_VMSetMem
332
333CODE16 ends
334
335end
Note: See TracBrowser for help on using the repository browser.