Deleted Added
full compact
smapi_bios.S (115679) smapi_bios.S (116275)
1#include <machine/asm.h>
1#include <machine/asm.h>
2__FBSDID("$FreeBSD: head/sys/i386/bios/smapi_bios.S 115679 2003-06-02 06:02:49Z obrien $");
2__FBSDID("$FreeBSD: head/sys/i386/bios/smapi_bios.S 116275 2003-06-13 00:36:03Z mdodd $");
3
4#include <machine/asmacros.h>
5
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
12smapi32_entry: /* far pointer to SMAPI entry */
13 .globl smapi32_offset
14smapi32_offset: .long 0x00000000 /* set by caller */
15smapi32_segment: .word 0x0000 /* %cs stored here */
16
6 .text
7/*
8 * smapi32(input_param, output_param)
9 * struct smapi_bios_parameter *input_parm;
10 * struct smapi_bios_parameter *output_parm;
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
11 */
12ENTRY(smapi32)
13 pushl %ebp /* Save frame */
14 movl %esp,%ebp
15
16 pushl %ds
17 pushl 0x0c(%ebp) /* Output Param */
18 pushl %ds
19 pushl 0x08(%ebp) /* Input Param */
20
21 movl $0,%eax /* Clear EAX (return 0) */
22 movw %cs,smapi32_segment /* Save CS */
23 lcall *(smapi32_offset)
24
25 leave
26 ret
28 */
29ENTRY(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
27
28/*
29 * smapi32(offset, segment, input_param, output_param)
30 * u_int offset;
31 * u_short segment;
32 * struct smapi_bios_parameter *input_parm;
33 * struct smapi_bios_parameter *output_parm;
34 */
35ENTRY(smapi32_new)
36 pushl %ebp /* Save frame */
37 movl %esp,%ebp
38
39 movl 0x08(%ebp),%eax
40 movl %eax,smapi32_offset
41 movw 0x0c(%ebp),%ax
42 movw %ax,smapi32_segment
43
44 pushl %ds
45 pushl 0x20(%ebp) /* Output Param */
46 pushl %ds
47 pushl 0x10(%ebp) /* Input Param */
48
49 movl $0,%eax
50 movw %cs,smapi32_segment
51 lcall *(smapi32_offset)
52
53 leave
54 ret