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