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
drivers
acpi
apei
apei-internal.h
Go to the documentation of this file.
1
/*
2
* apei-internal.h - ACPI Platform Error Interface internal
3
* definations.
4
*/
5
6
#ifndef APEI_INTERNAL_H
7
#define APEI_INTERNAL_H
8
9
#include <
linux/cper.h
>
10
#include <
linux/acpi.h
>
11
#include <
linux/acpi_io.h
>
12
13
struct
apei_exec_context
;
14
15
typedef
int
(*
apei_exec_ins_func_t
)(
struct
apei_exec_context
*
ctx
,
16
struct
acpi_whea_header
*
entry
);
17
18
#define APEI_EXEC_INS_ACCESS_REGISTER 0x0001
19
20
struct
apei_exec_ins_type
{
21
u32
flags
;
22
apei_exec_ins_func_t
run
;
23
};
24
25
struct
apei_exec_context
{
26
u32
ip
;
27
u64
value
;
28
u64
var1
;
29
u64
var2
;
30
u64
src_base
;
31
u64
dst_base
;
32
struct
apei_exec_ins_type
*
ins_table
;
33
u32
instructions
;
34
struct
acpi_whea_header
*
action_table
;
35
u32
entries
;
36
};
37
38
void
apei_exec_ctx_init
(
struct
apei_exec_context
*ctx,
39
struct
apei_exec_ins_type
*ins_table,
40
u32
instructions,
41
struct
acpi_whea_header
*action_table,
42
u32
entries
);
43
44
static
inline
void
apei_exec_ctx_set_input(
struct
apei_exec_context
*ctx,
45
u64
input
)
46
{
47
ctx->
value
=
input
;
48
}
49
50
static
inline
u64
apei_exec_ctx_get_output(
struct
apei_exec_context
*ctx)
51
{
52
return
ctx->
value
;
53
}
54
55
int
__apei_exec_run
(
struct
apei_exec_context
*ctx,
u8
action
,
bool
optional);
56
57
static
inline
int
apei_exec_run(
struct
apei_exec_context
*ctx,
u8
action
)
58
{
59
return
__apei_exec_run
(ctx, action, 0);
60
}
61
62
/* It is optional whether the firmware provides the action */
63
static
inline
int
apei_exec_run_optional(
struct
apei_exec_context
*ctx,
u8
action
)
64
{
65
return
__apei_exec_run
(ctx, action, 1);
66
}
67
68
/* Common instruction implementation */
69
70
/* IP has been set in instruction function */
71
#define APEI_EXEC_SET_IP 1
72
73
int
apei_map_generic_address
(
struct
acpi_generic_address
*
reg
);
74
75
static
inline
void
apei_unmap_generic_address(
struct
acpi_generic_address
*
reg
)
76
{
77
acpi_os_unmap_generic_address
(reg);
78
}
79
80
int
apei_read
(
u64
*
val
,
struct
acpi_generic_address
*
reg
);
81
int
apei_write
(
u64
val
,
struct
acpi_generic_address
*
reg
);
82
83
int
__apei_exec_read_register
(
struct
acpi_whea_header
*
entry
,
u64
*
val
);
84
int
__apei_exec_write_register
(
struct
acpi_whea_header
*
entry
,
u64
val
);
85
int
apei_exec_read_register
(
struct
apei_exec_context
*ctx,
86
struct
acpi_whea_header
*
entry
);
87
int
apei_exec_read_register_value
(
struct
apei_exec_context
*ctx,
88
struct
acpi_whea_header
*
entry
);
89
int
apei_exec_write_register
(
struct
apei_exec_context
*ctx,
90
struct
acpi_whea_header
*
entry
);
91
int
apei_exec_write_register_value
(
struct
apei_exec_context
*ctx,
92
struct
acpi_whea_header
*
entry
);
93
int
apei_exec_noop
(
struct
apei_exec_context
*ctx,
94
struct
acpi_whea_header
*
entry
);
95
int
apei_exec_pre_map_gars
(
struct
apei_exec_context
*ctx);
96
int
apei_exec_post_unmap_gars
(
struct
apei_exec_context
*ctx);
97
98
struct
apei_resources
{
99
struct
list_head
iomem
;
100
struct
list_head
ioport
;
101
};
102
103
static
inline
void
apei_resources_init(
struct
apei_resources
*
resources
)
104
{
105
INIT_LIST_HEAD(&resources->
iomem
);
106
INIT_LIST_HEAD(&resources->
ioport
);
107
}
108
109
void
apei_resources_fini
(
struct
apei_resources
*
resources
);
110
int
apei_resources_add
(
struct
apei_resources
*
resources
,
111
unsigned
long
start
,
unsigned
long
size
,
112
bool
iomem);
113
int
apei_resources_sub
(
struct
apei_resources
*resources1,
114
struct
apei_resources
*resources2);
115
int
apei_resources_request
(
struct
apei_resources
*
resources
,
116
const
char
*
desc
);
117
void
apei_resources_release
(
struct
apei_resources
*
resources
);
118
int
apei_exec_collect_resources
(
struct
apei_exec_context
*ctx,
119
struct
apei_resources
*
resources
);
120
121
struct
dentry
;
122
struct
dentry
*
apei_get_debugfs_dir
(
void
);
123
124
#define apei_estatus_for_each_section(estatus, section) \
125
for (section = (struct acpi_hest_generic_data *)(estatus + 1); \
126
(void *)section - (void *)estatus < estatus->data_length; \
127
section = (void *)(section+1) + section->error_data_length)
128
129
static
inline
u32
apei_estatus_len(
struct
acpi_hest_generic_status
*estatus)
130
{
131
if
(estatus->
raw_data_length
)
132
return
estatus->
raw_data_offset
+ \
133
estatus->raw_data_length;
134
else
135
return
sizeof
(*estatus) + estatus->
data_length
;
136
}
137
138
void
apei_estatus_print
(
const
char
*pfx,
139
const
struct
acpi_hest_generic_status
*estatus);
140
int
apei_estatus_check_header
(
const
struct
acpi_hest_generic_status
*estatus);
141
int
apei_estatus_check
(
const
struct
acpi_hest_generic_status
*estatus);
142
143
int
apei_osc_setup
(
void
);
144
#endif
Generated on Thu Jan 10 2013 13:23:38 for Linux Kernel by
1.8.2