smapi_bios.S revision 116275
1#include <machine/asm.h>
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
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
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
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
44