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