1cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 2cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 3cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Module Name: utxferror - Various error/warning output functions 4cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 5cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 6cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 7cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 877848130e53b06c22fe37a7b6acbb82bb3e9bfbaBob Moore * Copyright (C) 2000 - 2012, Intel Corp. 9cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * All rights reserved. 10cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 11cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Redistribution and use in source and binary forms, with or without 12cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * modification, are permitted provided that the following conditions 13cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * are met: 14cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 1. Redistributions of source code must retain the above copyright 15cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * notice, this list of conditions, and the following disclaimer, 16cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * without modification. 17cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * substantially similar to the "NO WARRANTY" disclaimer below 19cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * ("Disclaimer") and any redistribution must be conditioned upon 20cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * including a substantially similar Disclaimer requirement for further 21cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * binary redistribution. 22cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 3. Neither the names of the above-listed copyright holders nor the names 23cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * of any contributors may be used to endorse or promote products derived 24cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * from this software without specific prior written permission. 25cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 26cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Alternatively, this software may be distributed under the terms of the 27cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * GNU General Public License ("GPL") version 2 as published by the Free 28cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Software Foundation. 29cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 30cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * NO WARRANTY 31cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * POSSIBILITY OF SUCH DAMAGES. 42cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 43cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 44214f2c90b970e098e75cf719c0c5b0f1fe69b716Paul Gortmaker#include <linux/export.h> 45cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#include <acpi/acpi.h> 46cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#include "accommon.h" 47cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#include "acnamesp.h" 48cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 49cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define _COMPONENT ACPI_UTILITIES 50cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob MooreACPI_MODULE_NAME("utxferror") 51cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 52cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 53cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * This module is used for the in-kernel ACPICA as well as the ACPICA 54cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * tools/applications. 55cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 56cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * For the i_aSL compiler case, the output is redirected to stderr so that 57cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * any of the various ACPI errors and warnings do not appear in the output 58cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * files, for either the compiler or disassembler portions of the tool. 59cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 60cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#ifdef ACPI_ASL_COMPILER 61cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#include <stdio.h> 62cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreextern FILE *acpi_gbl_output_file; 63cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 64cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_REDIRECT_BEGIN \ 65cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore FILE *output_file = acpi_gbl_output_file; \ 66cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_redirect_output (stderr); 67cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 68cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_REDIRECT_END \ 69cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_redirect_output (output_file); 70cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 71cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#else 72cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 73cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * non-i_aSL case - no redirection, nothing to do 74cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 75cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_REDIRECT_BEGIN 76cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_REDIRECT_END 77cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#endif 78cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 79cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Common message prefixes 80cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 81cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_ERROR "ACPI Error: " 82cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_EXCEPTION "ACPI Exception: " 83cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_WARNING "ACPI Warning: " 84cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_INFO "ACPI: " 85cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 86cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Common message suffix 87cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 88cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#define ACPI_MSG_SUFFIX \ 89cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, module_name, line_number) 90cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 91cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 92cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_error 93cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 94cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 95cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 96cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 97cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 98cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 99cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 100cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print "ACPI Error" message with module/line/version info 101cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 102cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 103cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 104cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_error(const char *module_name, u32 line_number, const char *format, ...) 105cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 106cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 107cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 108cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 109cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_ERROR); 110cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 111cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 112cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 113cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 114cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 115cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 116cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 117cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 118cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 119cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob MooreACPI_EXPORT_SYMBOL(acpi_error) 120cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 121cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 122cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 123cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_exception 124cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 125cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 126cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 127cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Status - Status to be formatted 128cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 129cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 130cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 131cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 132cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print "ACPI Exception" message with module/line/version info 133cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * and decoded acpi_status. 134cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 135cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 136cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 137cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_exception(const char *module_name, 138cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 line_number, acpi_status status, const char *format, ...) 139cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 140cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 141cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 142cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 143cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_EXCEPTION "%s, ", 144cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_format_exception(status)); 145cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 146cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 147cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 148cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 149cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 150cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 151cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 152cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 153cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 154cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob MooreACPI_EXPORT_SYMBOL(acpi_exception) 155cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 156cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 157cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 158cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_warning 159cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 160cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 161cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 162cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 163cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 164cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 165cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 166cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print "ACPI Warning" message with module/line/version info 167cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 168cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 169cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 170cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_warning(const char *module_name, u32 line_number, const char *format, ...) 171cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 172cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 173cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 174cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 175cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_WARNING); 176cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 177cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 178cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 179cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 180cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 181cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 182cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 183cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 184cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 185cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob MooreACPI_EXPORT_SYMBOL(acpi_warning) 186cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 187cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 188cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 189cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_info 190cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 191cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 192cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 193cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 194cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 195cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 196cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 197cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print generic "ACPI:" information message. There is no 198cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * module/line/version info in order to keep the message simple. 199cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 200cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * TBD: module_name and line_number args are not needed, should be removed. 201cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 202cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 203cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 204cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_info(const char *module_name, u32 line_number, const char *format, ...) 205cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 206cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 207cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 208cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 209cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_INFO); 210cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 211cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 212cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 213cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf("\n"); 214cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 215cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 216cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 217cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 218cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 219cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob MooreACPI_EXPORT_SYMBOL(acpi_info) 220cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 221cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/* 222cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * The remainder of this module contains internal error functions that may 223cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * be configured out. 224cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 22575434a2ae37b78887b7a1d70d0a23bbd5e09fb01Bob Moore#if !defined (ACPI_NO_ERROR_MESSAGES) && !defined (ACPI_BIN_APP) 226cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 227cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 228cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_ut_predefined_warning 229cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 230cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 231cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 232cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Pathname - Full pathname to the node 233cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * node_flags - From Namespace node for the method/object 234cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 235cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 236cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 237cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 238cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Warnings for the predefined validation module. Messages are 239cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * only emitted the first time a problem with a particular 240cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * method/object is detected. This prevents a flood of error 241cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * messages for methods that are repeatedly evaluated. 242cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 243cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 244cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 245cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_ut_predefined_warning(const char *module_name, 246cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 line_number, 247cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore char *pathname, 248cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u8 node_flags, const char *format, ...) 249cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 250cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 251cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 252cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore /* 253cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Warning messages for this method/object will be disabled after the 254cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * first time a validation fails or an object is successfully repaired. 255cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 256cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (node_flags & ANOBJ_EVALUATED) { 257cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore return; 258cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 259cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 260cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_WARNING "For %s: ", pathname); 261cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 262cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 263cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 264cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 265cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 266cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 267cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 268cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 269cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 270cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_ut_predefined_info 271cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 272cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 273cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 274cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Pathname - Full pathname to the node 275cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * node_flags - From Namespace node for the method/object 276cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Format - Printf format string + additional args 277cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 278cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 279cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 280cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Info messages for the predefined validation module. Messages 281cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * are only emitted the first time a problem with a particular 282cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * method/object is detected. This prevents a flood of 283cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * messages for methods that are repeatedly evaluated. 284cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 285cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 286cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 287cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid ACPI_INTERNAL_VAR_XFACE 288cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_ut_predefined_info(const char *module_name, 289cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 line_number, 290cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore char *pathname, u8 node_flags, const char *format, ...) 291cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 292cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_list arg_list; 293cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 294cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore /* 295cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Warning messages for this method/object will be disabled after the 296cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * first time a validation fails or an object is successfully repaired. 297cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore */ 298cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (node_flags & ANOBJ_EVALUATED) { 299cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore return; 300cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 301cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 302cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_INFO "For %s: ", pathname); 303cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 304cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_start(arg_list, format); 305cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_vprintf(format, arg_list); 306cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 307cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore va_end(arg_list); 308cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 309cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 310cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 311cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 312cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_ut_namespace_error 313cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 314cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 315cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 316cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * internal_name - Name or path of the namespace node 317cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * lookup_status - Exception code from NS lookup 318cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 319cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 320cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 321cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print error message with the full pathname for the NS node. 322cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 323cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 324cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 325cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid 326cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_ut_namespace_error(const char *module_name, 327cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 line_number, 328cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore const char *internal_name, acpi_status lookup_status) 329cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 330cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_status status; 331cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 bad_name; 332cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore char *name = NULL; 333cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 334cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 335cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_ERROR); 336cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 337cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (lookup_status == AE_BAD_CHARACTER) { 338cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 339cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore /* There is a non-ascii character in the name */ 340cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 341cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MOVE_32_TO_32(&bad_name, 342cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_CAST_PTR(u32, internal_name)); 343cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf("[0x%4.4X] (NON-ASCII)", bad_name); 344cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } else { 345cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore /* Convert path to external format */ 346cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 347cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore status = acpi_ns_externalize_name(ACPI_UINT32_MAX, 348cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore internal_name, NULL, &name); 349cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 350cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore /* Print target name */ 351cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 352cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (ACPI_SUCCESS(status)) { 353cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf("[%s]", name); 354cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } else { 355cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf("[COULD NOT EXTERNALIZE NAME]"); 356cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 357cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 358cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (name) { 359cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_FREE(name); 360cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 361cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 362cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 363cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(" Namespace lookup failure, %s", 364cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_format_exception(lookup_status)); 365cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 366cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 367cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 368cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 369cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 370cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore/******************************************************************************* 371cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 372cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * FUNCTION: acpi_ut_method_error 373cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 374cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * PARAMETERS: module_name - Caller's module name (for error output) 375cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * line_number - Caller's line number (for error output) 376cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Message - Error message to use on failure 377cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * prefix_node - Prefix relative to the path 378cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * Path - Path to the node (optional) 379cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * method_status - Execution status 380cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 381cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * RETURN: None 382cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 383cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * DESCRIPTION: Print error message with the full pathname for the method. 384cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore * 385cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ******************************************************************************/ 386cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 387cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moorevoid 388cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Mooreacpi_ut_method_error(const char *module_name, 389cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore u32 line_number, 390cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore const char *message, 391cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore struct acpi_namespace_node *prefix_node, 392cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore const char *path, acpi_status method_status) 393cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore{ 394cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_status status; 395cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore struct acpi_namespace_node *node = prefix_node; 396cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 397cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_BEGIN; 398cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(ACPI_MSG_ERROR); 399cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 400cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (path) { 401cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore status = 402cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH, 403cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore &node); 404cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore if (ACPI_FAILURE(status)) { 405cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf("[Could not get node by pathname]"); 406cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 407cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore } 408cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 409cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_ns_print_node_pathname(node, message); 410cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore acpi_os_printf(", %s", acpi_format_exception(method_status)); 411cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 412cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_SUFFIX; 413cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore ACPI_MSG_REDIRECT_END; 414cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore} 415cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore 416cc84e262b71bab53c3b2be2e71209c85b88b4b4dBob Moore#endif /* ACPI_NO_ERROR_MESSAGES */ 417