162306a36Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
262306a36Sopenharmony_ci/*******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Module Name: dbfileio - Debugger file I/O commands. These can't usually
562306a36Sopenharmony_ci *              be used when running the debugger in Ring 0 (Kernel mode)
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci ******************************************************************************/
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <acpi/acpi.h>
1062306a36Sopenharmony_ci#include "accommon.h"
1162306a36Sopenharmony_ci#include "acdebug.h"
1262306a36Sopenharmony_ci#include "actables.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define _COMPONENT          ACPI_CA_DEBUGGER
1562306a36Sopenharmony_ciACPI_MODULE_NAME("dbfileio")
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#ifdef ACPI_APPLICATION
1862306a36Sopenharmony_ci#include "acapps.h"
1962306a36Sopenharmony_ci#ifdef ACPI_DEBUGGER
2062306a36Sopenharmony_ci/*******************************************************************************
2162306a36Sopenharmony_ci *
2262306a36Sopenharmony_ci * FUNCTION:    acpi_db_close_debug_file
2362306a36Sopenharmony_ci *
2462306a36Sopenharmony_ci * PARAMETERS:  None
2562306a36Sopenharmony_ci *
2662306a36Sopenharmony_ci * RETURN:      None
2762306a36Sopenharmony_ci *
2862306a36Sopenharmony_ci * DESCRIPTION: If open, close the current debug output file
2962306a36Sopenharmony_ci *
3062306a36Sopenharmony_ci ******************************************************************************/
3162306a36Sopenharmony_civoid acpi_db_close_debug_file(void)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	if (acpi_gbl_debug_file) {
3562306a36Sopenharmony_ci		fclose(acpi_gbl_debug_file);
3662306a36Sopenharmony_ci		acpi_gbl_debug_file = NULL;
3762306a36Sopenharmony_ci		acpi_gbl_db_output_to_file = FALSE;
3862306a36Sopenharmony_ci		acpi_os_printf("Debug output file %s closed\n",
3962306a36Sopenharmony_ci			       acpi_gbl_db_debug_filename);
4062306a36Sopenharmony_ci	}
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci/*******************************************************************************
4462306a36Sopenharmony_ci *
4562306a36Sopenharmony_ci * FUNCTION:    acpi_db_open_debug_file
4662306a36Sopenharmony_ci *
4762306a36Sopenharmony_ci * PARAMETERS:  name                - Filename to open
4862306a36Sopenharmony_ci *
4962306a36Sopenharmony_ci * RETURN:      None
5062306a36Sopenharmony_ci *
5162306a36Sopenharmony_ci * DESCRIPTION: Open a file where debug output will be directed.
5262306a36Sopenharmony_ci *
5362306a36Sopenharmony_ci ******************************************************************************/
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_civoid acpi_db_open_debug_file(char *name)
5662306a36Sopenharmony_ci{
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci	acpi_db_close_debug_file();
5962306a36Sopenharmony_ci	acpi_gbl_debug_file = fopen(name, "w+");
6062306a36Sopenharmony_ci	if (!acpi_gbl_debug_file) {
6162306a36Sopenharmony_ci		acpi_os_printf("Could not open debug file %s\n", name);
6262306a36Sopenharmony_ci		return;
6362306a36Sopenharmony_ci	}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	acpi_os_printf("Debug output file %s opened\n", name);
6662306a36Sopenharmony_ci	acpi_ut_safe_strncpy(acpi_gbl_db_debug_filename, name,
6762306a36Sopenharmony_ci			     sizeof(acpi_gbl_db_debug_filename));
6862306a36Sopenharmony_ci	acpi_gbl_db_output_to_file = TRUE;
6962306a36Sopenharmony_ci}
7062306a36Sopenharmony_ci#endif
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci/*******************************************************************************
7362306a36Sopenharmony_ci *
7462306a36Sopenharmony_ci * FUNCTION:    acpi_db_load_tables
7562306a36Sopenharmony_ci *
7662306a36Sopenharmony_ci * PARAMETERS:  list_head       - List of ACPI tables to load
7762306a36Sopenharmony_ci *
7862306a36Sopenharmony_ci * RETURN:      Status
7962306a36Sopenharmony_ci *
8062306a36Sopenharmony_ci * DESCRIPTION: Load ACPI tables from a previously constructed table list.
8162306a36Sopenharmony_ci *
8262306a36Sopenharmony_ci ******************************************************************************/
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ciacpi_status acpi_db_load_tables(struct acpi_new_table_desc *list_head)
8562306a36Sopenharmony_ci{
8662306a36Sopenharmony_ci	acpi_status status;
8762306a36Sopenharmony_ci	struct acpi_new_table_desc *table_list_head;
8862306a36Sopenharmony_ci	struct acpi_table_header *table;
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	/* Load all ACPI tables in the list */
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	table_list_head = list_head;
9362306a36Sopenharmony_ci	while (table_list_head) {
9462306a36Sopenharmony_ci		table = table_list_head->table;
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci		status = acpi_load_table(table, NULL);
9762306a36Sopenharmony_ci		if (ACPI_FAILURE(status)) {
9862306a36Sopenharmony_ci			if (status == AE_ALREADY_EXISTS) {
9962306a36Sopenharmony_ci				acpi_os_printf
10062306a36Sopenharmony_ci				    ("Table %4.4s is already installed\n",
10162306a36Sopenharmony_ci				     table->signature);
10262306a36Sopenharmony_ci			} else {
10362306a36Sopenharmony_ci				acpi_os_printf("Could not install table, %s\n",
10462306a36Sopenharmony_ci					       acpi_format_exception(status));
10562306a36Sopenharmony_ci			}
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci			return (status);
10862306a36Sopenharmony_ci		}
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci		acpi_os_printf
11162306a36Sopenharmony_ci		    ("Acpi table [%4.4s] successfully installed and loaded\n",
11262306a36Sopenharmony_ci		     table->signature);
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci		table_list_head = table_list_head->next;
11562306a36Sopenharmony_ci	}
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	return (AE_OK);
11862306a36Sopenharmony_ci}
11962306a36Sopenharmony_ci#endif
120