2 * apei-internal.h - ACPI Platform Error Interface internal
6 #ifndef APEI_INTERNAL_H
7 #define APEI_INTERNAL_H
9 struct apei_exec_context;
11 typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *ctx,
12 struct acpi_whea_header *entry);
14 #define APEI_EXEC_INS_ACCESS_REGISTER 0x0001
16 struct apei_exec_ins_type {
18 apei_exec_ins_func_t run;
21 struct apei_exec_context {
28 struct apei_exec_ins_type *ins_table;
30 struct acpi_whea_header *action_table;
34 void apei_exec_ctx_init(struct apei_exec_context *ctx,
35 struct apei_exec_ins_type *ins_table,
37 struct acpi_whea_header *action_table,
40 static inline void apei_exec_ctx_set_input(struct apei_exec_context *ctx,
46 static inline u64 apei_exec_ctx_get_output(struct apei_exec_context *ctx)
51 int apei_exec_run(struct apei_exec_context *ctx, u8 action);
53 /* Common instruction implementation */
55 /* IP has been set in instruction function */
56 #define APEI_EXEC_SET_IP 1
58 int __apei_exec_read_register(struct acpi_whea_header *entry, u64 *val);
59 int __apei_exec_write_register(struct acpi_whea_header *entry, u64 val);
60 int apei_exec_read_register(struct apei_exec_context *ctx,
61 struct acpi_whea_header *entry);
62 int apei_exec_read_register_value(struct apei_exec_context *ctx,
63 struct acpi_whea_header *entry);
64 int apei_exec_write_register(struct apei_exec_context *ctx,
65 struct acpi_whea_header *entry);
66 int apei_exec_write_register_value(struct apei_exec_context *ctx,
67 struct acpi_whea_header *entry);
68 int apei_exec_noop(struct apei_exec_context *ctx,
69 struct acpi_whea_header *entry);
70 int apei_exec_pre_map_gars(struct apei_exec_context *ctx);
71 int apei_exec_post_unmap_gars(struct apei_exec_context *ctx);
73 struct apei_resources {
74 struct list_head iomem;
75 struct list_head ioport;
78 static inline void apei_resources_init(struct apei_resources *resources)
80 INIT_LIST_HEAD(&resources->iomem);
81 INIT_LIST_HEAD(&resources->ioport);
84 void apei_resources_fini(struct apei_resources *resources);
85 int apei_resources_sub(struct apei_resources *resources1,
86 struct apei_resources *resources2);
87 int apei_resources_request(struct apei_resources *resources,
89 void apei_resources_release(struct apei_resources *resources);
90 int apei_exec_collect_resources(struct apei_exec_context *ctx,
91 struct apei_resources *resources);
94 struct dentry *apei_get_debugfs_dir(void);