]> git.proxmox.com Git - mirror_edk2.git/blob - InOsEmuPkg/Unix/Sec/Ia32/Gasket.S
Clarify the requirements for the Destination parameter of UnicodeStrToAsciiStr.
[mirror_edk2.git] / InOsEmuPkg / Unix / Sec / Ia32 / Gasket.S
1 #------------------------------------------------------------------------------
2 #
3 # Manage differenced between UNIX ABI and EFI/Windows ABI
4 #
5 # For IA-32 the only difference is Mac OS X requires a 16-byte aligned stack.
6 # For Linux this stack adjustment is a no-op, but we may as well make the
7 # the code common.
8 #
9 # Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
10 # This program and the accompanying materials
11 # are licensed and made available under the terms and conditions of the BSD License
12 # which accompanies this distribution. The full text of the license may be found at
13 # http://opensource.org/licenses/bsd-license.php
14 #
15 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #
18 #------------------------------------------------------------------------------
19
20
21
22 .text
23
24 //
25 // EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
26 //
27
28
29 ASM_GLOBAL ASM_PFX(GasketSecWriteStdErr)
30 ASM_PFX(GasketSecWriteStdErr):
31 pushl %ebp
32 movl %esp, %ebp
33 subl $24, %esp // sub extra 16 from the stack for alignment
34 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
35 movl 12(%ebp), %eax
36 movl %eax, 4(%esp)
37 movl 8(%ebp), %eax
38 movl %eax, (%esp)
39
40 call ASM_PFX(SecWriteStdErr)
41
42 leave
43 ret
44
45
46 ASM_GLOBAL ASM_PFX(GasketSecConfigStdIn)
47 ASM_PFX(GasketSecConfigStdIn):
48 pushl %ebp
49 movl %esp, %ebp
50 subl $24, %esp // sub extra 16 from the stack for alignment
51 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
52 movl 12(%ebp), %eax
53 movl %eax, 4(%esp)
54 movl 8(%ebp), %eax
55 movl %eax, (%esp)
56
57 call ASM_PFX(SecConfigStdIn)
58
59 leave
60 ret
61
62 ASM_GLOBAL ASM_PFX(GasketSecWriteStdOut)
63 ASM_PFX(GasketSecWriteStdOut):
64 pushl %ebp
65 movl %esp, %ebp
66 subl $24, %esp // sub extra 16 from the stack for alignment
67 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
68 movl 12(%ebp), %eax
69 movl %eax, 4(%esp)
70 movl 8(%ebp), %eax
71 movl %eax, (%esp)
72
73 call ASM_PFX(SecWriteStdOut)
74
75 leave
76 ret
77
78 ASM_GLOBAL ASM_PFX(GasketSecReadStdIn)
79 ASM_PFX(GasketSecReadStdIn):
80 pushl %ebp
81 movl %esp, %ebp
82 subl $24, %esp // sub extra 16 from the stack for alignment
83 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
84 movl 12(%ebp), %eax
85 movl %eax, 4(%esp)
86 movl 8(%ebp), %eax
87 movl %eax, (%esp)
88
89 call ASM_PFX(SecReadStdIn)
90
91 leave
92 ret
93
94 ASM_GLOBAL ASM_PFX(GasketSecPollStdIn)
95 ASM_PFX(GasketSecPollStdIn):
96 pushl %ebp
97 movl %esp, %ebp
98 subl $24, %esp // sub extra 16 from the stack for alignment
99 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
100 movl 12(%ebp), %eax
101 movl %eax, 4(%esp)
102 movl 8(%ebp), %eax
103 movl %eax, (%esp)
104
105 call ASM_PFX(SecPollStdIn)
106
107 leave
108 ret
109
110 ASM_GLOBAL ASM_PFX(GasketSecMalloc)
111 ASM_PFX(GasketSecMalloc):
112 pushl %ebp
113 movl %esp, %ebp
114 subl $24, %esp // sub extra 16 from the stack for alignment
115 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
116 movl 8(%ebp), %eax
117 movl %eax, (%esp)
118
119 call ASM_PFX(SecMalloc)
120
121 leave
122 ret
123
124 ASM_GLOBAL ASM_PFX(GasketSecValloc)
125 ASM_PFX(GasketSecValloc):
126 pushl %ebp
127 movl %esp, %ebp
128 subl $24, %esp // sub extra 16 from the stack for alignment
129 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
130 movl 8(%ebp), %eax
131 movl %eax, (%esp)
132
133 call ASM_PFX(SecValloc)
134
135 leave
136 ret
137
138 ASM_GLOBAL ASM_PFX(GasketSecFree)
139 ASM_PFX(GasketSecFree):
140 pushl %ebp
141 movl %esp, %ebp
142 subl $24, %esp // sub extra 16 from the stack for alignment
143 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
144 movl 8(%ebp), %eax
145 movl %eax, (%esp)
146
147 call ASM_PFX(SecFree)
148
149 leave
150 ret
151
152
153 ASM_GLOBAL ASM_PFX(GasketSecSetTimer)
154 ASM_PFX(GasketSecSetTimer):
155 pushl %ebp
156 movl %esp, %ebp
157 subl $40, %esp // sub extra 16 from the stack for alignment
158 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
159 movl 16(%ebp), %eax
160 movl %eax, 8(%esp)
161 movl 8(%ebp), %eax
162 movl 12(%ebp), %edx
163 movl %edx, 4(%esp)
164 movl %eax, (%esp)
165
166 call ASM_PFX(SecSetTimer)
167
168 leave
169 ret
170
171
172 ASM_GLOBAL ASM_PFX(GasketSecEnableInterrupt)
173 ASM_PFX(GasketSecEnableInterrupt):
174 pushl %ebp
175 movl %esp, %ebp
176 subl $24, %esp // sub extra 16 from the stack for alignment
177 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
178
179 call ASM_PFX(SecEnableInterrupt)
180
181 leave
182 ret
183
184
185 ASM_GLOBAL ASM_PFX(GasketSecDisableInterrupt)
186 ASM_PFX(GasketSecDisableInterrupt):
187 pushl %ebp
188 movl %esp, %ebp
189 subl $24, %esp // sub extra 16 from the stack for alignment
190 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
191
192 call ASM_PFX(SecDisableInterrupt)
193
194 leave
195 ret
196
197 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceFrequency)
198 ASM_PFX(GasketQueryPerformanceFrequency):
199 pushl %ebp
200 movl %esp, %ebp
201 subl $24, %esp // sub extra 16 from the stack for alignment
202 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
203
204 call ASM_PFX(QueryPerformanceFrequency)
205
206 leave
207 ret
208
209
210 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceCounter)
211 ASM_PFX(GasketQueryPerformanceCounter):
212 pushl %ebp
213 movl %esp, %ebp
214 subl $24, %esp // sub extra 16 from the stack for alignment
215 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
216
217 call ASM_PFX(QueryPerformanceCounter)
218
219 leave
220 ret
221
222
223 ASM_GLOBAL ASM_PFX(GasketSecSleep)
224 ASM_PFX(GasketSecSleep):
225 pushl %ebp
226 movl %esp, %ebp
227 subl $24, %esp // sub extra 16 from the stack for alignment
228 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
229 movl 8(%ebp), %eax
230 movl 12(%ebp), %ecx
231 movl %ecx, 4(%esp)
232 movl %eax, (%esp)
233
234 call ASM_PFX(SecSleep)
235
236 leave
237 ret
238
239
240 ASM_GLOBAL ASM_PFX(GasketSecCpuSleep)
241 ASM_PFX(GasketSecCpuSleep):
242 pushl %ebp
243 movl %esp, %ebp
244 subl $24, %esp // sub extra 16 from the stack for alignment
245 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
246
247 call ASM_PFX(SecCpuSleep)
248
249 leave
250 ret
251
252
253 ASM_GLOBAL ASM_PFX(GasketSecExit)
254 ASM_PFX(GasketSecExit):
255 pushl %ebp
256 movl %esp, %ebp
257 subl $24, %esp // sub extra 16 from the stack for alignment
258 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
259 movl 8(%ebp), %eax
260 movl %eax, (%esp)
261
262 call ASM_PFX(SecExit) // Less to do as we will never return to EFI ABI world
263 LDEAD_LOOP:
264 jmp LDEAD_LOOP // _exit should never return
265
266
267 ASM_GLOBAL ASM_PFX(GasketSecGetTime)
268 ASM_PFX(GasketSecGetTime):
269 pushl %ebp
270 movl %esp, %ebp
271 subl $24, %esp // sub extra 16 from the stack for alignment
272 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
273 movl 12(%ebp), %eax
274 movl %eax, 4(%esp)
275 movl 8(%ebp), %eax
276 movl %eax, (%esp)
277
278 call ASM_PFX(SecGetTime)
279
280 leave
281 ret
282
283 ASM_GLOBAL ASM_PFX(GasketSecSetTime)
284 ASM_PFX(GasketSecSetTime):
285 pushl %ebp
286 movl %esp, %ebp
287 subl $24, %esp // sub extra 16 from the stack for alignment
288 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
289 movl 12(%ebp), %eax
290 movl %eax, 4(%esp)
291 movl 8(%ebp), %eax
292 movl %eax, (%esp)
293
294 call ASM_PFX(SecSetTime)
295
296 leave
297 ret
298
299
300 ASM_GLOBAL ASM_PFX(GasketSecGetNextProtocol)
301 ASM_PFX(GasketSecGetNextProtocol):
302 pushl %ebp
303 movl %esp, %ebp
304 subl $40, %esp // sub extra 16 from the stack for alignment
305 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
306 movl 20(%ebp), %eax
307 movl %eax, 12(%esp)
308 movl 16(%ebp), %eax
309 movl %eax, 8(%esp)
310 movl 12(%ebp), %eax
311 movl %eax, 4(%esp)
312 movl 8(%ebp), %eax
313 movl %eax, (%esp)
314
315 call ASM_PFX(SecGetNextProtocol)
316
317 leave
318 ret
319
320 // PPIs produced by SEC
321
322 ASM_GLOBAL ASM_PFX(GasketSecPeCoffGetEntryPoint)
323 ASM_PFX(GasketSecPeCoffGetEntryPoint):
324 pushl %ebp
325 movl %esp, %ebp
326 subl $24, %esp // sub extra 16 from the stack for alignment
327 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
328 movl 12(%ebp), %eax
329 movl %eax, 4(%esp)
330 movl 8(%ebp), %eax
331 movl %eax, (%esp)
332
333 call ASM_PFX(SecPeCoffGetEntryPoint)
334
335 leave
336 ret
337
338 ASM_GLOBAL ASM_PFX(GasketSecPeCoffRelocateImageExtraAction)
339 ASM_PFX(GasketSecPeCoffRelocateImageExtraAction):
340 pushl %ebp
341 movl %esp, %ebp
342 subl $24, %esp // sub extra 16 from the stack for alignment
343 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
344 movl 8(%ebp), %eax
345 movl %eax, (%esp)
346
347 call ASM_PFX(SecPeCoffRelocateImageExtraAction)
348
349 leave
350 ret
351
352 ASM_GLOBAL ASM_PFX(GasketSecPeCoffUnloadImageExtraAction)
353 ASM_PFX(GasketSecPeCoffUnloadImageExtraAction):
354 pushl %ebp
355 movl %esp, %ebp
356 subl $24, %esp // sub extra 16 from the stack for alignment
357 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
358 movl 8(%ebp), %eax
359 movl %eax, (%esp)
360
361 call ASM_PFX(SecPeCoffUnloadImageExtraAction)
362
363 leave
364 ret
365
366
367 ASM_GLOBAL ASM_PFX(GasketSecEmuThunkAddress)
368 ASM_PFX(GasketSecEmuThunkAddress):
369 pushl %ebp
370 movl %esp, %ebp
371 subl $24, %esp // sub extra 16 from the stack for alignment
372 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
373
374 call ASM_PFX(SecEmuThunkAddress)
375
376 leave
377 ret
378
379 //
380 // Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
381 //
382
383 ASM_GLOBAL ASM_PFX(GasketX11Size)
384 ASM_PFX(GasketX11Size):
385 pushl %ebp
386 movl %esp, %ebp
387 subl $40, %esp // sub extra 16 from the stack for alignment
388 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
389 movl 20(%ebp), %eax
390 movl %eax, 12(%esp)
391 movl 16(%ebp), %eax
392 movl %eax, 8(%esp)
393 movl 12(%ebp), %eax
394 movl %eax, 4(%esp)
395 movl 8(%ebp), %eax
396 movl %eax, (%esp)
397
398 call ASM_PFX(X11Size)
399
400 leave
401 ret
402
403
404 ASM_GLOBAL ASM_PFX(GasketX11CheckKey)
405 ASM_PFX(GasketX11CheckKey):
406 pushl %ebp
407 movl %esp, %ebp
408 subl $24, %esp // sub extra 16 from the stack for alignment
409 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
410 movl 8(%ebp), %eax
411 movl %eax, (%esp)
412
413 call ASM_PFX(X11CheckKey)
414
415 leave
416 ret
417
418 ASM_GLOBAL ASM_PFX(GasketX11GetKey)
419 ASM_PFX(GasketX11GetKey):
420 pushl %ebp
421 movl %esp, %ebp
422 subl $24, %esp // sub extra 16 from the stack for alignment
423 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
424 movl 12(%ebp), %eax
425 movl %eax, 4(%esp)
426 movl 8(%ebp), %eax
427 movl %eax, (%esp)
428
429 call ASM_PFX(X11GetKey)
430
431 leave
432 ret
433
434
435 ASM_GLOBAL ASM_PFX(GasketX11KeySetState)
436 ASM_PFX(GasketX11KeySetState):
437 pushl %ebp
438 movl %esp, %ebp
439 subl $24, %esp // sub extra 16 from the stack for alignment
440 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
441 movl 12(%ebp), %eax
442 movl %eax, 4(%esp)
443 movl 8(%ebp), %eax
444 movl %eax, (%esp)
445
446 call ASM_PFX(X11KeySetState)
447
448 leave
449 ret
450
451
452 ASM_GLOBAL ASM_PFX(GasketX11RegisterKeyNotify)
453 ASM_PFX(GasketX11RegisterKeyNotify):
454 pushl %ebp
455 movl %esp, %ebp
456 subl $40, %esp // sub extra 16 from the stack for alignment
457 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
458 movl 20(%ebp), %eax
459 movl %eax, 12(%esp)
460 movl 16(%ebp), %eax
461 movl %eax, 8(%esp)
462 movl 12(%ebp), %eax
463 movl %eax, 4(%esp)
464 movl 8(%ebp), %eax
465 movl %eax, (%esp)
466
467 call ASM_PFX(X11RegisterKeyNotify)
468
469 leave
470 ret
471
472
473 ASM_GLOBAL ASM_PFX(GasketX11Blt)
474 ASM_PFX(GasketX11Blt):
475 pushl %ebp
476 movl %esp, %ebp
477 subl $40, %esp // sub extra 16 from the stack for alignment
478 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
479 movl 20(%ebp), %eax
480 movl %eax, 12(%esp)
481 movl 16(%ebp), %eax
482 movl %eax, 8(%esp)
483 movl 12(%ebp), %eax
484 movl %eax, 4(%esp)
485 movl 8(%ebp), %eax
486 movl %eax, (%esp)
487
488 call ASM_PFX(X11Blt)
489
490 leave
491 ret
492
493
494 ASM_GLOBAL ASM_PFX(GasketX11CheckPointer)
495 ASM_PFX(GasketX11CheckPointer):
496 pushl %ebp
497 movl %esp, %ebp
498 subl $24, %esp // sub extra 16 from the stack for alignment
499 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
500 movl 8(%ebp), %eax
501 movl %eax, (%esp)
502
503 call ASM_PFX(X11CheckPointer)
504
505 leave
506 ret
507
508
509 ASM_GLOBAL ASM_PFX(GasketX11GetPointerState)
510 ASM_PFX(GasketX11GetPointerState):
511 pushl %ebp
512 movl %esp, %ebp
513 subl $24, %esp // sub extra 16 from the stack for alignment
514 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
515 movl 12(%ebp), %eax
516 movl %eax, 4(%esp)
517 movl 8(%ebp), %eax
518 movl %eax, (%esp)
519
520 call ASM_PFX(X11GetPointerState)
521
522 leave
523 ret
524
525
526 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowOpen)
527 ASM_PFX(GasketX11GraphicsWindowOpen):
528 pushl %ebp
529 movl %esp, %ebp
530 subl $24, %esp // sub extra 16 from the stack for alignment
531 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
532 movl 8(%ebp), %eax
533 movl %eax, (%esp)
534
535 call ASM_PFX(X11GraphicsWindowOpen)
536
537 leave
538 ret
539
540
541 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowClose)
542 ASM_PFX(GasketX11GraphicsWindowClose):
543 pushl %ebp
544 movl %esp, %ebp
545 subl $24, %esp // sub extra 16 from the stack for alignment
546 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
547 movl 12(%ebp), %eax
548 movl %eax, 4(%esp)
549 movl 8(%ebp), %eax
550 movl %eax, (%esp)
551
552 call ASM_PFX(X11GraphicsWindowClose)
553
554 leave
555 ret
556
557
558 // Pthreads
559
560 ASM_GLOBAL ASM_PFX(GasketPthreadMutexLock)
561 ASM_PFX(GasketPthreadMutexLock):
562 pushl %ebp
563 movl %esp, %ebp
564 subl $24, %esp // sub extra 16 from the stack for alignment
565 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
566 movl 8(%ebp), %eax
567 movl %eax, (%esp)
568
569 call ASM_PFX(PthreadMutexLock)
570
571 leave
572 ret
573
574
575 ASM_GLOBAL ASM_PFX(GasketPthreadMutexUnLock)
576 ASM_PFX(GasketPthreadMutexUnLock):
577 pushl %ebp
578 movl %esp, %ebp
579 subl $24, %esp // sub extra 16 from the stack for alignment
580 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
581 movl 8(%ebp), %eax
582 movl %eax, (%esp)
583
584 call ASM_PFX(PthreadMutexUnLock)
585
586 leave
587 ret
588
589 ASM_GLOBAL ASM_PFX(GasketPthreadMutexTryLock)
590 ASM_PFX(GasketPthreadMutexTryLock):
591 pushl %ebp
592 movl %esp, %ebp
593 subl $24, %esp // sub extra 16 from the stack for alignment
594 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
595 movl 8(%ebp), %eax
596 movl %eax, (%esp)
597
598 call ASM_PFX(PthreadMutexTryLock)
599
600 leave
601 ret
602
603 ASM_GLOBAL ASM_PFX(GasketPthreadMutexInit)
604 ASM_PFX(GasketPthreadMutexInit):
605 pushl %ebp
606 movl %esp, %ebp
607 subl $24, %esp // sub extra 16 from the stack for alignment
608 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
609
610 call ASM_PFX(PthreadMutexInit)
611
612 leave
613 ret
614
615
616
617 ASM_GLOBAL ASM_PFX(GasketPthreadMutexDestroy)
618 ASM_PFX(GasketPthreadMutexDestroy):
619 pushl %ebp
620 movl %esp, %ebp
621 subl $24, %esp // sub extra 16 from the stack for alignment
622 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
623 movl 8(%ebp), %eax
624 movl %eax, (%esp)
625
626 call ASM_PFX(PthreadMutexDestroy)
627
628 leave
629 ret
630
631
632 ASM_GLOBAL ASM_PFX(GasketPthreadCreate)
633 ASM_PFX(GasketPthreadCreate):
634 pushl %ebp
635 movl %esp, %ebp
636 subl $40, %esp // sub extra 16 from the stack for alignment
637 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
638 movl 20(%ebp), %eax
639 movl %eax, 12(%esp)
640 movl 16(%ebp), %eax
641 movl %eax, 8(%esp)
642 movl 12(%ebp), %eax
643 movl %eax, 4(%esp)
644 movl 8(%ebp), %eax
645 movl %eax, (%esp)
646
647 call ASM_PFX(PthreadCreate)
648
649 leave
650 ret
651
652
653 ASM_GLOBAL ASM_PFX(GasketPthreadExit)
654 ASM_PFX(GasketPthreadExit):
655 pushl %ebp
656 movl %esp, %ebp
657 subl $24, %esp // sub extra 16 from the stack for alignment
658 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
659 movl 8(%ebp), %eax
660 movl %eax, (%esp)
661
662 call ASM_PFX(PthreadExit)
663
664 leave
665 ret
666
667
668
669 ASM_GLOBAL ASM_PFX(GasketPthreadSelf)
670 ASM_PFX(GasketPthreadSelf):
671 pushl %ebp
672 movl %esp, %ebp
673 subl $24, %esp // sub extra 16 from the stack for alignment
674 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
675
676 call ASM_PFX(PthreadSelf)
677
678 leave
679 ret
680
681
682 ASM_GLOBAL ASM_PFX(GasketPthreadOpen)
683 ASM_PFX(GasketPthreadOpen):
684 pushl %ebp
685 movl %esp, %ebp
686 subl $24, %esp // sub extra 16 from the stack for alignment
687 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
688 movl 8(%ebp), %eax
689 movl %eax, (%esp)
690
691 call ASM_PFX(PthreadOpen)
692
693 leave
694 ret
695
696
697 ASM_GLOBAL ASM_PFX(GasketPthreadClose)
698 ASM_PFX(GasketPthreadClose):
699 pushl %ebp
700 movl %esp, %ebp
701 subl $24, %esp // sub extra 16 from the stack for alignment
702 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
703 movl 8(%ebp), %eax
704 movl %eax, (%esp)
705
706 call ASM_PFX(PthreadClose)
707
708 leave
709 ret
710
711
712
713
714 //
715 // UNIX ABI to EFI ABI call
716 //
717 // UINTN
718 // ReverseGasketUint64 (
719 // void *Api,
720 // UINTN Arg1
721 // );
722 ASM_GLOBAL ASM_PFX(ReverseGasketUint64)
723 ASM_PFX(ReverseGasketUint64):
724 pushl %ebp
725 movl %esp, %ebp
726 subl $8, %esp
727 movl 16(%ebp), %eax
728 movl %eax, 4(%esp)
729 movl 12(%ebp), %eax
730 movl %eax, (%esp)
731 calll *8(%ebp)
732 addl $8, %esp
733 popl %ebp
734 ret
735
736
737
738 //
739 // UNIX ABI to EFI ABI call
740 //
741 // UINTN
742 // ReverseGasketUint64Uint64 (
743 // void *Api,
744 // UINTN Arg1
745 // UINTN Arg2
746 // );
747 ASM_GLOBAL ASM_PFX(ReverseGasketUint64Uint64)
748 ASM_PFX(ReverseGasketUint64Uint64):
749 pushl %ebp
750 movl %esp, %ebp
751 subl $24, %esp
752 movl 24(%ebp), %eax
753 movl %eax, 12(%esp)
754 movl 20(%ebp), %eax
755 movl %eax, 8(%esp)
756 movl 16(%ebp), %eax
757 movl %eax, 4(%esp)
758 movl 12(%ebp), %eax
759 movl %eax, (%esp)
760 calll *8(%ebp)
761 addl $24, %esp
762 popl %ebp
763 ret
764
765
766 ASM_GLOBAL ASM_PFX(GasketSecUnixPeiAutoScan)
767 ASM_PFX(GasketSecUnixPeiAutoScan):
768 pushl %ebp
769 movl %esp, %ebp
770 subl $40, %esp // sub extra 16 from the stack for alignment
771 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
772 movl 16(%ebp), %eax
773 movl %eax, 8(%esp)
774 movl 12(%ebp), %eax
775 movl %eax, 4(%esp)
776 movl 8(%ebp), %eax
777 movl %eax, (%esp)
778
779 call ASM_PFX(SecUnixPeiAutoScan)
780
781 leave
782 ret
783
784
785 ASM_GLOBAL ASM_PFX(GasketSecUnixFdAddress)
786 ASM_PFX(GasketSecUnixFdAddress):
787 pushl %ebp
788 movl %esp, %ebp
789 subl $40, %esp // sub extra 16 from the stack for alignment
790 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
791 movl 20(%ebp), %eax
792 movl %eax, 12(%esp)
793 movl 16(%ebp), %eax
794 movl %eax, 8(%esp)
795 movl 12(%ebp), %eax
796 movl %eax, 4(%esp)
797 movl 8(%ebp), %eax
798 movl %eax, (%esp)
799
800 call ASM_PFX(SecUnixFdAddress)
801
802 leave
803 ret
804
805
806 // EmuIoThunk SimpleFileSystem
807
808 ASM_GLOBAL ASM_PFX(GasketPosixOpenVolume)
809 ASM_PFX(GasketPosixOpenVolume):
810 pushl %ebp
811 movl %esp, %ebp
812 subl $40, %esp // sub extra 16 from the stack for alignment
813 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
814 movl 20(%ebp), %eax
815 movl %eax, 12(%esp)
816 movl 16(%ebp), %eax
817 movl %eax, 8(%esp)
818 movl 12(%ebp), %eax
819 movl %eax, 4(%esp)
820 movl 8(%ebp), %eax
821 movl %eax, (%esp)
822
823 call ASM_PFX(PosixOpenVolume)
824
825 leave
826 ret
827
828
829 ASM_GLOBAL ASM_PFX(GasketPosixFileOpen)
830 ASM_PFX(GasketPosixFileOpen):
831 pushl %ebp
832 movl %esp, %ebp
833 subl $56, %esp // sub extra 16 from the stack for alignment
834 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
835 movl 28(%ebp), %eax
836 movl 32(%ebp), %ecx
837 movl %ecx, 24(%esp)
838 movl %eax, 20(%esp)
839 movl 20(%ebp), %eax
840 movl 24(%ebp), %ecx
841 movl %ecx, 16(%esp)
842 movl %eax, 12(%esp)
843 movl 16(%ebp), %eax
844 movl %eax, 8(%esp)
845 movl 12(%ebp), %eax
846 movl %eax, 4(%esp)
847 movl 8(%ebp), %eax
848 movl %eax, (%esp)
849
850 call ASM_PFX(PosixFileOpen)
851
852 leave
853 ret
854
855
856 ASM_GLOBAL ASM_PFX(GasketPosixFileCLose)
857 ASM_PFX(GasketPosixFileCLose):
858 pushl %ebp
859 movl %esp, %ebp
860 subl $24, %esp // sub extra 16 from the stack for alignment
861 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
862 movl 8(%ebp), %eax
863 movl %eax, (%esp)
864
865 call ASM_PFX(PosixFileCLose)
866
867 leave
868 ret
869
870
871 ASM_GLOBAL ASM_PFX(GasketPosixFileDelete)
872 ASM_PFX(GasketPosixFileDelete):
873 pushl %ebp
874 movl %esp, %ebp
875 subl $24, %esp // sub extra 16 from the stack for alignment
876 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
877 movl 8(%ebp), %eax
878 movl %eax, (%esp)
879
880 call ASM_PFX(PosixFileDelete)
881
882 leave
883 ret
884
885
886 ASM_GLOBAL ASM_PFX(GasketPosixFileRead)
887 ASM_PFX(GasketPosixFileRead):
888 pushl %ebp
889 movl %esp, %ebp
890 subl $40, %esp // sub extra 16 from the stack for alignment
891 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
892 movl 16(%ebp), %eax
893 movl %eax, 8(%esp)
894 movl 12(%ebp), %eax
895 movl %eax, 4(%esp)
896 movl 8(%ebp), %eax
897 movl %eax, (%esp)
898
899 call ASM_PFX(PosixFileRead)
900
901 leave
902 ret
903
904
905 ASM_GLOBAL ASM_PFX(GasketPosixFileWrite)
906 ASM_PFX(GasketPosixFileWrite):
907 pushl %ebp
908 movl %esp, %ebp
909 subl $40, %esp // sub extra 16 from the stack for alignment
910 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
911 movl 16(%ebp), %eax
912 movl %eax, 8(%esp)
913 movl 12(%ebp), %eax
914 movl %eax, 4(%esp)
915 movl 8(%ebp), %eax
916 movl %eax, (%esp)
917
918 call ASM_PFX(PosixFileWrite)
919
920 leave
921 ret
922
923
924 ASM_GLOBAL ASM_PFX(GasketPosixFileSetPossition)
925 ASM_PFX(GasketPosixFileSetPossition):
926 pushl %ebp
927 movl %esp, %ebp
928 subl $40, %esp // sub extra 16 from the stack for alignment
929 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
930 movl 12(%ebp), %eax
931 movl 16(%ebp), %ecx
932 movl %ecx, 8(%esp)
933 movl %eax, 4(%esp)
934 movl 8(%ebp), %eax
935 movl %eax, (%esp)
936
937 call ASM_PFX(PosixFileSetPossition)
938
939 leave
940 ret
941
942
943 ASM_GLOBAL ASM_PFX(GasketPosixFileGetPossition)
944 ASM_PFX(GasketPosixFileGetPossition):
945 pushl %ebp
946 movl %esp, %ebp
947 subl $24, %esp // sub extra 16 from the stack for alignment
948 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
949 movl 12(%ebp), %eax
950 movl %eax, 4(%esp)
951 movl 8(%ebp), %eax
952 movl %eax, (%esp)
953
954 call ASM_PFX(PosixFileGetPossition)
955
956 leave
957 ret
958
959
960 ASM_GLOBAL ASM_PFX(GasketPosixFileGetInfo)
961 ASM_PFX(GasketPosixFileGetInfo):
962 pushl %ebp
963 movl %esp, %ebp
964 subl $40, %esp // sub extra 16 from the stack for alignment
965 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
966 movl 20(%ebp), %eax
967 movl %eax, 12(%esp)
968 movl 16(%ebp), %eax
969 movl %eax, 8(%esp)
970 movl 12(%ebp), %eax
971 movl %eax, 4(%esp)
972 movl 8(%ebp), %eax
973 movl %eax, (%esp)
974
975 call ASM_PFX(PosixFileGetInfo)
976
977 leave
978 ret
979
980
981 ASM_GLOBAL ASM_PFX(GasketPosixFileSetInfo)
982 ASM_PFX(GasketPosixFileSetInfo):
983 pushl %ebp
984 movl %esp, %ebp
985 subl $40, %esp // sub extra 16 from the stack for alignment
986 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
987 movl 20(%ebp), %eax
988 movl %eax, 12(%esp)
989 movl 16(%ebp), %eax
990 movl %eax, 8(%esp)
991 movl 12(%ebp), %eax
992 movl %eax, 4(%esp)
993 movl 8(%ebp), %eax
994 movl %eax, (%esp)
995
996 call ASM_PFX(PosixFileSetInfo)
997
998 leave
999 ret
1000
1001
1002 ASM_GLOBAL ASM_PFX(GasketPosixFileFlush)
1003 ASM_PFX(GasketPosixFileFlush):
1004 pushl %ebp
1005 movl %esp, %ebp
1006 subl $24, %esp // sub extra 16 from the stack for alignment
1007 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1008 movl 8(%ebp), %eax
1009 movl %eax, (%esp)
1010
1011 call ASM_PFX(PosixFileFlush)
1012
1013 leave
1014 ret
1015
1016
1017 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkOpen)
1018 ASM_PFX(GasketPosixFileSystmeThunkOpen):
1019 pushl %ebp
1020 movl %esp, %ebp
1021 subl $24, %esp // sub extra 16 from the stack for alignment
1022 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1023 movl 8(%ebp), %eax
1024 movl %eax, (%esp)
1025
1026 call ASM_PFX(PosixFileSystmeThunkOpen)
1027
1028 leave
1029 ret
1030
1031
1032 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkClose)
1033 ASM_PFX(GasketPosixFileSystmeThunkClose):
1034 pushl %ebp
1035 movl %esp, %ebp
1036 subl $24, %esp // sub extra 16 from the stack for alignment
1037 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1038 movl 8(%ebp), %eax
1039 movl %eax, (%esp)
1040
1041 call ASM_PFX(PosixFileSystmeThunkClose)
1042
1043 leave
1044 ret
1045
1046 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReset)
1047 ASM_PFX(GasketEmuBlockIoReset):
1048 pushl %ebp
1049 movl %esp, %ebp
1050 subl $24, %esp // sub extra 16 from the stack for alignment
1051 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1052 movl 12(%ebp), %eax
1053 movl %eax, 4(%esp)
1054 movl 8(%ebp), %eax
1055 movl %eax, (%esp)
1056
1057 call ASM_PFX(EmuBlockIoReset)
1058
1059 leave
1060 ret
1061
1062
1063 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReadBlocks)
1064 ASM_PFX(GasketEmuBlockIoReadBlocks):
1065 pushl %ebp
1066 movl %esp, %ebp
1067 subl $56, %esp // sub extra 16 from the stack for alignment
1068 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1069 movl 32(%ebp), %eax
1070 movl %eax, 24(%esp)
1071 movl 28(%ebp), %eax
1072 movl %eax, 20(%esp)
1073 movl 24(%ebp), %eax
1074 movl %eax, 16(%esp)
1075 movl 16(%ebp), %eax
1076 movl 20(%ebp), %edx
1077 movl %edx, 12(%esp)
1078 movl %eax, 8(%esp)
1079 movl 12(%ebp), %eax
1080 movl %eax, 4(%esp)
1081 movl 8(%ebp), %eax
1082 movl %eax, (%esp)
1083
1084 call ASM_PFX(EmuBlockIoReadBlocks)
1085
1086 leave
1087 ret
1088
1089
1090 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoWriteBlocks)
1091 ASM_PFX(GasketEmuBlockIoWriteBlocks):
1092 pushl %ebp
1093 movl %esp, %ebp
1094 subl $56, %esp // sub extra 16 from the stack for alignment
1095 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1096 movl 32(%ebp), %eax
1097 movl %eax, 24(%esp)
1098 movl 28(%ebp), %eax
1099 movl %eax, 20(%esp)
1100 movl 24(%ebp), %eax
1101 movl %eax, 16(%esp)
1102 movl 16(%ebp), %eax
1103 movl 20(%ebp), %edx
1104 movl %edx, 12(%esp)
1105 movl %eax, 8(%esp)
1106 movl 12(%ebp), %eax
1107 movl %eax, 4(%esp)
1108 movl 8(%ebp), %eax
1109 movl %eax, (%esp)
1110
1111 call ASM_PFX(EmuBlockIoWriteBlocks)
1112
1113 leave
1114 ret
1115
1116
1117 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoFlushBlocks)
1118 ASM_PFX(GasketEmuBlockIoFlushBlocks): pushl %ebp
1119 movl %esp, %ebp
1120 subl $24, %esp // sub extra 16 from the stack for alignment
1121 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1122 movl 12(%ebp), %eax
1123 movl %eax, 4(%esp)
1124 movl 8(%ebp), %eax
1125 movl %eax, (%esp)
1126
1127
1128 call ASM_PFX(EmuBlockIoFlushBlocks)
1129
1130 leave
1131 ret
1132
1133
1134 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoCreateMapping)
1135 ASM_PFX(GasketEmuBlockIoCreateMapping):
1136 pushl %ebp
1137 movl %esp, %ebp
1138 subl $24, %esp // sub extra 16 from the stack for alignment
1139 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1140 movl 12(%ebp), %eax
1141 movl %eax, 4(%esp)
1142 movl 8(%ebp), %eax
1143 movl %eax, (%esp)
1144
1145 call ASM_PFX(EmuBlockIoCreateMapping)
1146
1147 leave
1148 ret
1149
1150
1151 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkOpen)
1152 ASM_PFX(GasketBlockIoThunkOpen):
1153 pushl %ebp
1154 movl %esp, %ebp
1155 subl $24, %esp // sub extra 16 from the stack for alignment
1156 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1157 movl 8(%ebp), %eax
1158 movl %eax, (%esp)
1159
1160 call ASM_PFX(EmuBlockIoThunkOpen)
1161
1162 leave
1163 ret
1164
1165
1166 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkClose)
1167 ASM_PFX(GasketBlockIoThunkClose):
1168 pushl %ebp
1169 movl %esp, %ebp
1170 subl $24, %esp // sub extra 16 from the stack for alignment
1171 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1172 movl 8(%ebp), %eax
1173 movl %eax, (%esp)
1174
1175 call ASM_PFX(EmuBlockIoThunkClose)
1176
1177 leave
1178 ret
1179
1180
1181
1182 ASM_GLOBAL ASM_PFX(GasketSnpCreateMapping)
1183 ASM_PFX(GasketSnpCreateMapping):
1184 pushl %ebp
1185 movl %esp, %ebp
1186 subl $24, %esp // sub extra 16 from the stack for alignment
1187 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1188 movl 12(%ebp), %eax
1189 movl %eax, 4(%esp)
1190 movl 8(%ebp), %eax
1191 movl %eax, (%esp)
1192
1193 call ASM_PFX(EmuSnpCreateMapping)
1194
1195 leave
1196 ret
1197
1198
1199 ASM_GLOBAL ASM_PFX(GasketSnpStart)
1200 ASM_PFX(GasketSnpStart):
1201 pushl %ebp
1202 movl %esp, %ebp
1203 subl $24, %esp // sub extra 16 from the stack for alignment
1204 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1205 movl 8(%ebp), %eax
1206 movl %eax, (%esp)
1207
1208 call ASM_PFX(EmuSnpStart)
1209
1210 leave
1211 ret
1212
1213
1214 ASM_GLOBAL ASM_PFX(GasketSnpStop)
1215 ASM_PFX(GasketSnpStop):
1216 pushl %ebp
1217 movl %esp, %ebp
1218 subl $24, %esp // sub extra 16 from the stack for alignment
1219 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1220 movl 8(%ebp), %eax
1221 movl %eax, (%esp)
1222
1223 call ASM_PFX(EmuSnpStop)
1224
1225 leave
1226 ret
1227
1228
1229 ASM_GLOBAL ASM_PFX(GasketSnpInitialize)
1230 ASM_PFX(GasketSnpInitialize):
1231 pushl %ebp
1232 movl %esp, %ebp
1233 subl $40, %esp // sub extra 16 from the stack for alignment
1234 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1235 movl 16(%ebp), %eax
1236 movl %eax, 8(%esp)
1237 movl 12(%ebp), %eax
1238 movl %eax, 4(%esp)
1239 movl 8(%ebp), %eax
1240 movl %eax, (%esp)
1241
1242 call ASM_PFX(EmuSnpInitialize)
1243
1244 leave
1245 ret
1246
1247
1248 ASM_GLOBAL ASM_PFX(GasketSnpReset)
1249 ASM_PFX(GasketSnpReset):
1250 pushl %ebp
1251 movl %esp, %ebp
1252 subl $24, %esp // sub extra 16 from the stack for alignment
1253 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1254 movl 12(%ebp), %eax
1255 movl %eax, 4(%esp)
1256 movl 8(%ebp), %eax
1257 movl %eax, (%esp)
1258
1259 call ASM_PFX(EmuSnpReset)
1260
1261 leave
1262 ret
1263
1264
1265 ASM_GLOBAL ASM_PFX(GasketSnpShutdown)
1266 ASM_PFX(GasketSnpShutdown):
1267 pushl %ebp
1268 movl %esp, %ebp
1269 subl $24, %esp // sub extra 16 from the stack for alignment
1270 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1271 movl 8(%ebp), %eax
1272 movl %eax, (%esp)
1273
1274 call ASM_PFX(EmuSnpShutdown)
1275
1276 leave
1277 ret
1278
1279
1280 ASM_GLOBAL ASM_PFX(GasketSnpReceiveFilters)
1281 ASM_PFX(GasketSnpReceiveFilters):
1282 pushl %ebp
1283 movl %esp, %ebp
1284 subl $40, %esp // sub extra 16 from the stack for alignment
1285 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1286 movl 28(%ebp), %eax
1287 movl %eax, 20(%esp)
1288 movl 24(%ebp), %eax
1289 movl %eax, 16(%esp)
1290 movl 20(%ebp), %eax
1291 movl %eax, 12(%esp)
1292 movl 16(%ebp), %eax
1293 movl %eax, 8(%esp)
1294 movl 12(%ebp), %eax
1295 movl %eax, 4(%esp)
1296 movl 8(%ebp), %eax
1297 movl %eax, (%esp)
1298
1299 call ASM_PFX(EmuSnpReceiveFilters)
1300
1301 leave
1302 ret
1303
1304
1305 ASM_GLOBAL ASM_PFX(GasketSnpStationAddress)
1306 ASM_PFX(GasketSnpStationAddress):
1307 pushl %ebp
1308 movl %esp, %ebp
1309 subl $40, %esp // sub extra 16 from the stack for alignment
1310 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1311 movl 16(%ebp), %eax
1312 movl %eax, 8(%esp)
1313 movl 12(%ebp), %eax
1314 movl %eax, 4(%esp)
1315 movl 8(%ebp), %eax
1316 movl %eax, (%esp)
1317
1318 leave
1319 ret
1320
1321
1322
1323 ASM_GLOBAL ASM_PFX(GasketSnpStatistics)
1324 ASM_PFX(GasketSnpStatistics):
1325 pushl %ebp
1326 movl %esp, %ebp
1327 subl $40, %esp // sub extra 16 from the stack for alignment
1328 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1329 movl 20(%ebp), %eax
1330 movl %eax, 12(%esp)
1331 movl 16(%ebp), %eax
1332 movl %eax, 8(%esp)
1333 movl 12(%ebp), %eax
1334 movl %eax, 4(%esp)
1335 movl 8(%ebp), %eax
1336 movl %eax, (%esp)
1337
1338 call ASM_PFX(EmuSnpStatistics)
1339
1340 leave
1341 ret
1342
1343
1344 ASM_GLOBAL ASM_PFX(GasketSnpMCastIpToMac)
1345 ASM_PFX(GasketSnpMCastIpToMac):
1346 pushl %ebp
1347 movl %esp, %ebp
1348 subl $40, %esp // sub extra 16 from the stack for alignment
1349 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1350 movl 20(%ebp), %eax
1351 movl %eax, 12(%esp)
1352 movl 16(%ebp), %eax
1353 movl %eax, 8(%esp)
1354 movl 12(%ebp), %eax
1355 movl %eax, 4(%esp)
1356 movl 8(%ebp), %eax
1357 movl %eax, (%esp)
1358
1359 call ASM_PFX(EmuSnpMCastIpToMac)
1360
1361 leave
1362 ret
1363
1364
1365 ASM_GLOBAL ASM_PFX(GasketSnpNvData)
1366 ASM_PFX(GasketSnpNvData):
1367 pushl %ebp
1368 movl %esp, %ebp
1369 subl $40, %esp // sub extra 16 from the stack for alignment
1370 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1371 movl 24(%ebp), %eax
1372 movl %eax, 16(%esp)
1373 movl 20(%ebp), %eax
1374 movl %eax, 12(%esp)
1375 movl 16(%ebp), %eax
1376 movl %eax, 8(%esp)
1377 movl 12(%ebp), %eax
1378 movl %eax, 4(%esp)
1379 movl 8(%ebp), %eax
1380 movl %eax, (%esp)
1381
1382 call ASM_PFX(EmuSnpNvData)
1383
1384 leave
1385 ret
1386
1387
1388 ASM_GLOBAL ASM_PFX(GasketSnpGetStatus)
1389 ASM_PFX(GasketSnpGetStatus):
1390 pushl %ebp
1391 movl %esp, %ebp
1392 subl $40, %esp // sub extra 16 from the stack for alignment
1393 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1394 movl 16(%ebp), %eax
1395 movl %eax, 8(%esp)
1396 movl 12(%ebp), %eax
1397 movl %eax, 4(%esp)
1398 movl 8(%ebp), %eax
1399 movl %eax, (%esp)
1400
1401 call ASM_PFX(EmuSnpGetStatus)
1402
1403 leave
1404 ret
1405
1406
1407
1408 ASM_GLOBAL ASM_PFX(GasketSnpTransmit)
1409 ASM_PFX(GasketSnpTransmit):
1410 pushl %ebp
1411 movl %esp, %ebp
1412 subl $56, %esp // sub extra 16 from the stack for alignment
1413 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1414 movl 32(%ebp), %eax
1415 movl %eax, 24(%esp)
1416 movl 28(%ebp), %eax
1417 movl %eax, 20(%esp)
1418 movl 24(%ebp), %eax
1419 movl %eax, 16(%esp)
1420 movl 20(%ebp), %eax
1421 movl %eax, 12(%esp)
1422 movl 16(%ebp), %eax
1423 movl %eax, 8(%esp)
1424 movl 12(%ebp), %eax
1425 movl %eax, 4(%esp)
1426 movl 8(%ebp), %eax
1427 movl %eax, (%esp)
1428
1429 call ASM_PFX(EmuSnpTransmit)
1430
1431 leave
1432 ret
1433
1434
1435
1436 ASM_GLOBAL ASM_PFX(GasketSnpReceive)
1437 ASM_PFX(GasketSnpReceive):
1438 pushl %ebp
1439 movl %esp, %ebp
1440 subl $56, %esp // sub extra 16 from the stack for alignment
1441 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1442 movl 32(%ebp), %eax
1443 movl %eax, 24(%esp)
1444 movl 28(%ebp), %eax
1445 movl %eax, 20(%esp)
1446 movl 24(%ebp), %eax
1447 movl %eax, 16(%esp)
1448 movl 20(%ebp), %eax
1449 movl %eax, 12(%esp)
1450 movl 16(%ebp), %eax
1451 movl %eax, 8(%esp)
1452 movl 12(%ebp), %eax
1453 movl %eax, 4(%esp)
1454 movl 8(%ebp), %eax
1455 movl %eax, (%esp)
1456
1457 call ASM_PFX(EmuSnpReceive)
1458
1459 leave
1460 ret
1461
1462
1463 ASM_GLOBAL ASM_PFX(GasketSnpThunkOpen)
1464 ASM_PFX(GasketSnpThunkOpen):
1465 pushl %ebp
1466 movl %esp, %ebp
1467 subl $24, %esp // sub extra 16 from the stack for alignment
1468 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1469 movl 8(%ebp), %eax
1470 movl %eax, (%esp)
1471
1472 call ASM_PFX(EmuSnpThunkOpen)
1473
1474 leave
1475 ret
1476
1477
1478 ASM_GLOBAL ASM_PFX(GasketSnpThunkClose)
1479 ASM_PFX(GasketSnpThunkClose):
1480 pushl %ebp
1481 movl %esp, %ebp
1482 subl $24, %esp // sub extra 16 from the stack for alignment
1483 and $-16, %esp // stack needs to end in 0xFFFFFFF0 before call
1484 movl 8(%ebp), %eax
1485 movl %eax, (%esp)
1486
1487 call ASM_PFX(EmuSnpThunkClose)
1488
1489 leave
1490 ret
1491
1492