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