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