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