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
9smapi32_entry:					/* far pointer to SMAPI entry */
10	.globl	smapi32_offset
11smapi32_offset:		.long	0x00000000	/* set by caller */
12smapi32_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 */
26ENTRY(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
41