1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * fw_tables.h - Parsing support for ACPI and ACPI-like tables provided by |
4 | * platform or device firmware |
5 | * |
6 | * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> |
7 | * Copyright (C) 2023 Intel Corp. |
8 | */ |
9 | #ifndef _FW_TABLE_H_ |
10 | #define _FW_TABLE_H_ |
11 | |
12 | union acpi_subtable_headers; |
13 | |
14 | typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, |
15 | const unsigned long end); |
16 | |
17 | typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *, |
18 | void *arg, const unsigned long end); |
19 | |
20 | struct acpi_subtable_proc { |
21 | int id; |
22 | acpi_tbl_entry_handler handler; |
23 | acpi_tbl_entry_handler_arg handler_arg; |
24 | void *arg; |
25 | int count; |
26 | }; |
27 | |
28 | union { |
29 | struct acpi_table_header ; |
30 | struct acpi_table_cdat ; |
31 | }; |
32 | |
33 | union { |
34 | struct acpi_subtable_header ; |
35 | struct acpi_hmat_structure ; |
36 | struct acpi_prmt_module_header ; |
37 | struct acpi_cedt_header ; |
38 | struct acpi_cdat_header ; |
39 | }; |
40 | |
41 | int acpi_parse_entries_array(char *id, unsigned long table_size, |
42 | union fw_table_header *, |
43 | unsigned long max_length, |
44 | struct acpi_subtable_proc *proc, |
45 | int proc_num, unsigned int max_entries); |
46 | |
47 | int cdat_table_parse(enum acpi_cdat_type type, |
48 | acpi_tbl_entry_handler_arg handler_arg, void *arg, |
49 | struct acpi_table_cdat *, |
50 | unsigned long length); |
51 | |
52 | /* CXL is the only non-ACPI consumer of the FIRMWARE_TABLE library */ |
53 | #if IS_ENABLED(CONFIG_ACPI) && !IS_ENABLED(CONFIG_CXL_BUS) |
54 | #define EXPORT_SYMBOL_FWTBL_LIB(x) EXPORT_SYMBOL_ACPI_LIB(x) |
55 | #define __init_or_fwtbl_lib __init_or_acpilib |
56 | #else |
57 | #define EXPORT_SYMBOL_FWTBL_LIB(x) EXPORT_SYMBOL_NS_GPL(x, CXL) |
58 | #define __init_or_fwtbl_lib |
59 | #endif |
60 | |
61 | #endif |
62 | |