Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
include
asm
apm.h
Go to the documentation of this file.
1
/*
2
* Machine specific APM BIOS functions for generic.
3
* Split out from apm.c by Osamu Tomita <
[email protected]
>
4
*/
5
6
#ifndef _ASM_X86_MACH_DEFAULT_APM_H
7
#define _ASM_X86_MACH_DEFAULT_APM_H
8
9
#ifdef APM_ZERO_SEGS
10
# define APM_DO_ZERO_SEGS \
11
"pushl %%ds\n\t" \
12
"pushl %%es\n\t" \
13
"xorl %%edx, %%edx\n\t" \
14
"mov %%dx, %%ds\n\t" \
15
"mov %%dx, %%es\n\t" \
16
"mov %%dx, %%fs\n\t" \
17
"mov %%dx, %%gs\n\t"
18
# define APM_DO_POP_SEGS \
19
"popl %%es\n\t" \
20
"popl %%ds\n\t"
21
#else
22
# define APM_DO_ZERO_SEGS
23
# define APM_DO_POP_SEGS
24
#endif
25
26
static
inline
void
apm_bios_call_asm(
u32
func
,
u32
ebx_in,
u32
ecx_in,
27
u32
*eax,
u32
*
ebx
,
u32
*
ecx
,
28
u32
*edx,
u32
*esi)
29
{
30
/*
31
* N.B. We do NOT need a cld after the BIOS call
32
* because we always save and restore the flags.
33
*/
34
__asm__
__volatile__(
APM_DO_ZERO_SEGS
35
"pushl %%edi\n\t"
36
"pushl %%ebp\n\t"
37
"lcall *%%cs:apm_bios_entry\n\t"
38
"setc %%al\n\t"
39
"popl %%ebp\n\t"
40
"popl %%edi\n\t"
41
APM_DO_POP_SEGS
42
:
"=a"
(*eax),
"=b"
(*ebx),
"=c"
(*ecx),
"=d"
(*edx),
43
"=S"
(*esi)
44
:
"a"
(func),
"b"
(ebx_in),
"c"
(ecx_in)
45
:
"memory"
,
"cc"
);
46
}
47
48
static
inline
u8
apm_bios_call_simple_asm(
u32
func
,
u32
ebx_in,
49
u32
ecx_in,
u32
*eax)
50
{
51
int
cx, dx, si;
52
u8
error
;
53
54
/*
55
* N.B. We do NOT need a cld after the BIOS call
56
* because we always save and restore the flags.
57
*/
58
__asm__
__volatile__(
APM_DO_ZERO_SEGS
59
"pushl %%edi\n\t"
60
"pushl %%ebp\n\t"
61
"lcall *%%cs:apm_bios_entry\n\t"
62
"setc %%bl\n\t"
63
"popl %%ebp\n\t"
64
"popl %%edi\n\t"
65
APM_DO_POP_SEGS
66
:
"=a"
(*eax),
"=b"
(error),
"=c"
(cx),
"=d"
(dx),
67
"=S"
(si)
68
:
"a"
(func),
"b"
(ebx_in),
"c"
(ecx_in)
69
:
"memory"
,
"cc"
);
70
return
error
;
71
}
72
73
#endif
/* _ASM_X86_MACH_DEFAULT_APM_H */
Generated on Thu Jan 10 2013 13:19:58 for Linux Kernel by
1.8.2