xref: /linux-6.15/include/linux/fw_table.h (revision cdd30ebb)
1a103f466SDave Jiang /* SPDX-License-Identifier: GPL-2.0-or-later */
2a103f466SDave Jiang /*
3a103f466SDave Jiang  *  fw_tables.h - Parsing support for ACPI and ACPI-like tables provided by
4a103f466SDave Jiang  *                platform or device firmware
5a103f466SDave Jiang  *
6a103f466SDave Jiang  *  Copyright (C) 2001 Paul Diefenbaugh <[email protected]>
7a103f466SDave Jiang  *  Copyright (C) 2023 Intel Corp.
8a103f466SDave Jiang  */
9a103f466SDave Jiang #ifndef _FW_TABLE_H_
10a103f466SDave Jiang #define _FW_TABLE_H_
11a103f466SDave Jiang 
12a103f466SDave Jiang union acpi_subtable_headers;
13a103f466SDave Jiang 
14a103f466SDave Jiang typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *header,
15a103f466SDave Jiang 				      const unsigned long end);
16a103f466SDave Jiang 
17a103f466SDave Jiang typedef int (*acpi_tbl_entry_handler_arg)(union acpi_subtable_headers *header,
18a103f466SDave Jiang 					  void *arg, const unsigned long end);
19a103f466SDave Jiang 
20a103f466SDave Jiang struct acpi_subtable_proc {
21a103f466SDave Jiang 	int id;
22a103f466SDave Jiang 	acpi_tbl_entry_handler handler;
23a103f466SDave Jiang 	acpi_tbl_entry_handler_arg handler_arg;
24a103f466SDave Jiang 	void *arg;
25a103f466SDave Jiang 	int count;
26a103f466SDave Jiang };
27a103f466SDave Jiang 
2860e43fe5SDave Jiang union fw_table_header {
2960e43fe5SDave Jiang 	struct acpi_table_header acpi;
3060e43fe5SDave Jiang 	struct acpi_table_cdat cdat;
3160e43fe5SDave Jiang };
3260e43fe5SDave Jiang 
33a103f466SDave Jiang union acpi_subtable_headers {
34a103f466SDave Jiang 	struct acpi_subtable_header common;
35a103f466SDave Jiang 	struct acpi_hmat_structure hmat;
36a103f466SDave Jiang 	struct acpi_prmt_module_header prmt;
37a103f466SDave Jiang 	struct acpi_cedt_header cedt;
3860e43fe5SDave Jiang 	struct acpi_cdat_header cdat;
39a103f466SDave Jiang };
40a103f466SDave Jiang 
41a103f466SDave Jiang int acpi_parse_entries_array(char *id, unsigned long table_size,
4260e43fe5SDave Jiang 			     union fw_table_header *table_header,
43c6c3187dSRobert Richter 			     unsigned long max_length,
44a103f466SDave Jiang 			     struct acpi_subtable_proc *proc,
45a103f466SDave Jiang 			     int proc_num, unsigned int max_entries);
46a103f466SDave Jiang 
4760e43fe5SDave Jiang int cdat_table_parse(enum acpi_cdat_type type,
4860e43fe5SDave Jiang 		     acpi_tbl_entry_handler_arg handler_arg, void *arg,
49c6c3187dSRobert Richter 		     struct acpi_table_cdat *table_header,
50c6c3187dSRobert Richter 		     unsigned long length);
5160e43fe5SDave Jiang 
5260e43fe5SDave Jiang /* CXL is the only non-ACPI consumer of the FIRMWARE_TABLE library */
5360e43fe5SDave Jiang #if IS_ENABLED(CONFIG_ACPI) && !IS_ENABLED(CONFIG_CXL_BUS)
5460e43fe5SDave Jiang #define EXPORT_SYMBOL_FWTBL_LIB(x) EXPORT_SYMBOL_ACPI_LIB(x)
5560e43fe5SDave Jiang #define __init_or_fwtbl_lib __init_or_acpilib
5660e43fe5SDave Jiang #else
57*cdd30ebbSPeter Zijlstra #define EXPORT_SYMBOL_FWTBL_LIB(x) EXPORT_SYMBOL_NS_GPL(x, "CXL")
5860e43fe5SDave Jiang #define __init_or_fwtbl_lib
5960e43fe5SDave Jiang #endif
6060e43fe5SDave Jiang 
61a103f466SDave Jiang #endif
62