1 #include <machine/asm.h>
2 __FBSDID("$FreeBSD: releng/5.2/sys/i386/bios/smapi_bios.S 116275 2003-06-13 00:36:03Z mdodd $");
3
4 #include <machine/asmacros.h>
5
6 /*
7 * This is cribbed from the Linux thinkpad-4.1 driver by
8 * Thomas Hood.
9 */
10
11 .align
12 smapi32_entry: /* far pointer to SMAPI entry */
13 .globl smapi32_offset
14 smapi32_offset: .long 0x00000000 /* set by caller */
15 smapi32_segment: .word 0x0000 /* %cs stored here */
16
17 .text
18 /*
19 * smapi32(input_param, output_param)
20 * struct smapi_bios_parameter *input_parm;
21 * struct smapi_bios_parameter *output_parm;
22 *
23 * stack frame:
24 * 0x00 : saved ebp
25 * 0x04 : return EIP
26 * 0x08 : input_parm
27 * 0x0c : output_parm
28 */
29 ENTRY(smapi32)
30 pushl %ebp /* Save frame */
31 movl %esp,%ebp
32
33 pushl %ds
34 pushl 0x0c(%ebp) /* Output Param */
35 pushl %ds
36 pushl 0x08(%ebp) /* Input Param */
37
38 movl $0,%eax /* Clear EAX (return 0) */
39 movw %cs,smapi32_segment /* Save CS */
40 lcall *(smapi32_offset)
41
42 leave
43 ret
Cache object: e9feb1f4ef854a3b956a68003cd62962
|