]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - sys/i386/bios/smapi_bios.S
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / sys / i386 / bios / smapi_bios.S
1 #include <machine/asm.h>
2 __FBSDID("$FreeBSD$");
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