Annotation of sys/arch/i386/i386/apmcall.S, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: apmcall.S,v 1.5 2003/06/03 20:10:31 mickey Exp $ */
2:
3: /*
4: * Copyright (c) 2000,2001 Michael Shalayeff
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19: * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
20: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22: * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
25: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26: * THE POSSIBILITY OF SUCH DAMAGE.
27: */
28:
29: #include <machine/asm.h>
30:
31: #ifndef APM_DISABLE_INTERRUPTS
32: #define APM_DISABLE_INTERRUPTS 1
33: #endif /* APM_DISABLE_INTERRUPTS */
34:
35: .data
36: .globl _C_LABEL(apm_ep)
37: .globl _C_LABEL(apm_cli)
38: _C_LABEL(apm_cli):
39: .long APM_DISABLE_INTERRUPTS
40: /*
41: * int apmcall(u_int f, int dev, struct apmregs *r)
42: *
43: */
44: .text
45: ENTRY(apmcall)
46: pushl %ebp
47: movl %esp, %ebp
48: pushl %ebx
49: pushl %esi
50: pushl %edi
51:
52: movl 16(%ebp), %ebx
53: movl 8(%ebx), %ecx
54: movl 12(%ebx), %edx
55: movl 12(%ebp), %ebx
56:
57: pushfl
58:
59: cmp $0, _C_LABEL(apm_cli)
60: je 1f
61: cli
62: 1:
63: #if defined(DEBUG) || defined(DIAGNOSTIC)
64: pushl %ds
65: pushl %es
66: pushl %fs
67: pushl %gs
68: xorl %eax, %eax
69: movl %eax, %ds
70: movl %eax, %es
71: movl %eax, %fs
72: movl %eax, %gs
73: #endif
74: movl 8(%ebp), %eax
75:
76: clc
77: lcall %cs:*(_C_LABEL(apm_ep))
78: pushl %eax
79: setc %al
80: movzbl %al, %esi
81: popl %eax
82:
83: #if defined(DEBUG) || defined(DIAGNOSTIC)
84: popl %gs
85: popl %fs
86: popl %es
87: popl %ds
88: #endif
89: popfl
90:
91: movl 16(%ebp), %edi
92: movl %eax, 0(%edi)
93: movl %ebx, 4(%edi)
94: movl %ecx, 8(%edi)
95: movl %edx, 12(%edi)
96:
97: testl $0xff00, %eax
98: jnz 1f
99: xorl %esi, %esi
100: 1:
101: movl %esi, %eax
102:
103: popl %edi
104: popl %esi
105: popl %ebx
106: popl %ebp
107: ret
108:
109: .end
CVSweb