1#include <machine/asm.h> 2__FBSDID("$FreeBSD$"); 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