]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/i386/bios/smapi_bios.S
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.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 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