smapi_bios.S (0f0f21c39417a7d35347828a013d9d7e7da5bbbd) | smapi_bios.S (cba6ce369dad6f266084f87c0c924ab266fb2bf3) |
---|---|
1#include <machine/asm.h> 2__FBSDID("$FreeBSD$"); 3 4#include <machine/asmacros.h> 5 | 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 |
|
6 .text 7/* 8 * smapi32(input_param, output_param) 9 * struct smapi_bios_parameter *input_parm; 10 * struct smapi_bios_parameter *output_parm; | 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 |
|
11 */ 12ENTRY(smapi32) 13 pushl %ebp /* Save frame */ 14 movl %esp,%ebp 15 16 pushl %ds 17 pushl 0x0c(%ebp) /* Output Param */ 18 pushl %ds 19 pushl 0x08(%ebp) /* Input Param */ 20 21 movl $0,%eax /* Clear EAX (return 0) */ 22 movw %cs,smapi32_segment /* Save CS */ 23 lcall *(smapi32_offset) 24 25 leave 26 ret | 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 |
27 28/* 29 * smapi32(offset, segment, input_param, output_param) 30 * u_int offset; 31 * u_short segment; 32 * struct smapi_bios_parameter *input_parm; 33 * struct smapi_bios_parameter *output_parm; 34 */ 35ENTRY(smapi32_new) 36 pushl %ebp /* Save frame */ 37 movl %esp,%ebp 38 39 movl 0x08(%ebp),%eax 40 movl %eax,smapi32_offset 41 movw 0x0c(%ebp),%ax 42 movw %ax,smapi32_segment 43 44 pushl %ds 45 pushl 0x20(%ebp) /* Output Param */ 46 pushl %ds 47 pushl 0x10(%ebp) /* Input Param */ 48 49 movl $0,%eax 50 movw %cs,smapi32_segment 51 lcall *(smapi32_offset) 52 53 leave 54 ret | |