brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · 58b02e4 Raw
139 lines · c
1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.02/******************************************************************************3 *4 * Module Name: tbprint - Table output utilities5 *6 * Copyright (C) 2000 - 2023, Intel Corp.7 *8 *****************************************************************************/9 10#include <acpi/acpi.h>11#include "accommon.h"12#include "actables.h"13#include "acutils.h"14 15#define _COMPONENT          ACPI_TABLES16ACPI_MODULE_NAME("tbprint")17 18/* Local prototypes */19static void acpi_tb_fix_string(char *string, acpi_size length);20 21static void22acpi_tb_cleanup_table_header(struct acpi_table_header *out_header,23			     struct acpi_table_header *header);24 25/*******************************************************************************26 *27 * FUNCTION:    acpi_tb_fix_string28 *29 * PARAMETERS:  string              - String to be repaired30 *              length              - Maximum length31 *32 * RETURN:      None33 *34 * DESCRIPTION: Replace every non-printable or non-ascii byte in the string35 *              with a question mark '?'.36 *37 ******************************************************************************/38 39static void acpi_tb_fix_string(char *string, acpi_size length)40{41 42	while (length && *string) {43		if (!isprint((int)(u8)*string)) {44			*string = '?';45		}46 47		string++;48		length--;49	}50}51 52/*******************************************************************************53 *54 * FUNCTION:    acpi_tb_cleanup_table_header55 *56 * PARAMETERS:  out_header          - Where the cleaned header is returned57 *              header              - Input ACPI table header58 *59 * RETURN:      Returns the cleaned header in out_header60 *61 * DESCRIPTION: Copy the table header and ensure that all "string" fields in62 *              the header consist of printable characters.63 *64 ******************************************************************************/65 66static void67acpi_tb_cleanup_table_header(struct acpi_table_header *out_header,68			     struct acpi_table_header *header)69{70 71	memcpy(out_header, header, sizeof(struct acpi_table_header));72 73	acpi_tb_fix_string(out_header->signature, ACPI_NAMESEG_SIZE);74	acpi_tb_fix_string(out_header->oem_id, ACPI_OEM_ID_SIZE);75	acpi_tb_fix_string(out_header->oem_table_id, ACPI_OEM_TABLE_ID_SIZE);76	acpi_tb_fix_string(out_header->asl_compiler_id, ACPI_NAMESEG_SIZE);77}78 79/*******************************************************************************80 *81 * FUNCTION:    acpi_tb_print_table_header82 *83 * PARAMETERS:  address             - Table physical address84 *              header              - Table header85 *86 * RETURN:      None87 *88 * DESCRIPTION: Print an ACPI table header. Special cases for FACS and RSDP.89 *90 ******************************************************************************/91 92void93acpi_tb_print_table_header(acpi_physical_address address,94			   struct acpi_table_header *header)95{96	struct acpi_table_header local_header;97 98	if (ACPI_COMPARE_NAMESEG(header->signature, ACPI_SIG_FACS)) {99 100		/* FACS only has signature and length fields */101 102		ACPI_INFO(("%-4.4s 0x%8.8X%8.8X %06X",103			   header->signature, ACPI_FORMAT_UINT64(address),104			   header->length));105	} else if (ACPI_VALIDATE_RSDP_SIG(ACPI_CAST_PTR(struct acpi_table_rsdp,106							header)->signature)) {107 108		/* RSDP has no common fields */109 110		memcpy(local_header.oem_id,111		       ACPI_CAST_PTR(struct acpi_table_rsdp, header)->oem_id,112		       ACPI_OEM_ID_SIZE);113		acpi_tb_fix_string(local_header.oem_id, ACPI_OEM_ID_SIZE);114 115		ACPI_INFO(("RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)",116			   ACPI_FORMAT_UINT64(address),117			   (ACPI_CAST_PTR(struct acpi_table_rsdp, header)->118			    revision >119			    0) ? ACPI_CAST_PTR(struct acpi_table_rsdp,120					       header)->length : 20,121			   ACPI_CAST_PTR(struct acpi_table_rsdp,122					 header)->revision,123			   local_header.oem_id));124	} else {125		/* Standard ACPI table with full common header */126 127		acpi_tb_cleanup_table_header(&local_header, header);128 129		ACPI_INFO(("%-4.4s 0x%8.8X%8.8X"130			   " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",131			   local_header.signature, ACPI_FORMAT_UINT64(address),132			   local_header.length, local_header.revision,133			   local_header.oem_id, local_header.oem_table_id,134			   local_header.oem_revision,135			   local_header.asl_compiler_id,136			   local_header.asl_compiler_revision));137	}138}139