Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*******************************************************************************
  2.  *
  3.  * Module Name: utxferror - Various error/warning output functions
  4.  *
  5.  ******************************************************************************/
  6.  
  7. /******************************************************************************
  8.  *
  9.  * 1. Copyright Notice
  10.  *
  11.  * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
  12.  * All rights reserved.
  13.  *
  14.  * 2. License
  15.  *
  16.  * 2.1. This is your license from Intel Corp. under its intellectual property
  17.  * rights.  You may have additional license terms from the party that provided
  18.  * you this software, covering your right to use that party's intellectual
  19.  * property rights.
  20.  *
  21.  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
  22.  * copy of the source code appearing in this file ("Covered Code") an
  23.  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
  24.  * base code distributed originally by Intel ("Original Intel Code") to copy,
  25.  * make derivatives, distribute, use and display any portion of the Covered
  26.  * Code in any form, with the right to sublicense such rights; and
  27.  *
  28.  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
  29.  * license (with the right to sublicense), under only those claims of Intel
  30.  * patents that are infringed by the Original Intel Code, to make, use, sell,
  31.  * offer to sell, and import the Covered Code and derivative works thereof
  32.  * solely to the minimum extent necessary to exercise the above copyright
  33.  * license, and in no event shall the patent license extend to any additions
  34.  * to or modifications of the Original Intel Code.  No other license or right
  35.  * is granted directly or by implication, estoppel or otherwise;
  36.  *
  37.  * The above copyright and patent license is granted only if the following
  38.  * conditions are met:
  39.  *
  40.  * 3. Conditions
  41.  *
  42.  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
  43.  * Redistribution of source code of any substantial portion of the Covered
  44.  * Code or modification with rights to further distribute source must include
  45.  * the above Copyright Notice, the above License, this list of Conditions,
  46.  * and the following Disclaimer and Export Compliance provision.  In addition,
  47.  * Licensee must cause all Covered Code to which Licensee contributes to
  48.  * contain a file documenting the changes Licensee made to create that Covered
  49.  * Code and the date of any change.  Licensee must include in that file the
  50.  * documentation of any changes made by any predecessor Licensee.  Licensee
  51.  * must include a prominent statement that the modification is derived,
  52.  * directly or indirectly, from Original Intel Code.
  53.  *
  54.  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
  55.  * Redistribution of source code of any substantial portion of the Covered
  56.  * Code or modification without rights to further distribute source must
  57.  * include the following Disclaimer and Export Compliance provision in the
  58.  * documentation and/or other materials provided with distribution.  In
  59.  * addition, Licensee may not authorize further sublicense of source of any
  60.  * portion of the Covered Code, and must include terms to the effect that the
  61.  * license from Licensee to its licensee is limited to the intellectual
  62.  * property embodied in the software Licensee provides to its licensee, and
  63.  * not to intellectual property embodied in modifications its licensee may
  64.  * make.
  65.  *
  66.  * 3.3. Redistribution of Executable. Redistribution in executable form of any
  67.  * substantial portion of the Covered Code or modification must reproduce the
  68.  * above Copyright Notice, and the following Disclaimer and Export Compliance
  69.  * provision in the documentation and/or other materials provided with the
  70.  * distribution.
  71.  *
  72.  * 3.4. Intel retains all right, title, and interest in and to the Original
  73.  * Intel Code.
  74.  *
  75.  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
  76.  * Intel shall be used in advertising or otherwise to promote the sale, use or
  77.  * other dealings in products derived from or relating to the Covered Code
  78.  * without prior written authorization from Intel.
  79.  *
  80.  * 4. Disclaimer and Export Compliance
  81.  *
  82.  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
  83.  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
  84.  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
  85.  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
  86.  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
  87.  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
  88.  * PARTICULAR PURPOSE.
  89.  *
  90.  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
  91.  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
  92.  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
  93.  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
  94.  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
  95.  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
  96.  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
  97.  * LIMITED REMEDY.
  98.  *
  99.  * 4.3. Licensee shall not export, either directly or indirectly, any of this
  100.  * software or system incorporating such software without first obtaining any
  101.  * required license or other approval from the U. S. Department of Commerce or
  102.  * any other agency or department of the United States Government.  In the
  103.  * event Licensee exports any such software from the United States or
  104.  * re-exports any such software from a foreign destination, Licensee shall
  105.  * ensure that the distribution and export/re-export of the software is in
  106.  * compliance with all laws, regulations, orders, or other restrictions of the
  107.  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
  108.  * any of its subsidiaries will export/re-export any technical data, process,
  109.  * software, or service, directly or indirectly, to any country for which the
  110.  * United States government or any agency thereof requires an export license,
  111.  * other governmental approval, or letter of assurance, without first obtaining
  112.  * such license, approval or letter.
  113.  *
  114.  *****************************************************************************/
  115.  
  116. #define __UTXFERROR_C__
  117.  
  118. #include "acpi.h"
  119. #include "accommon.h"
  120. #include "acnamesp.h"
  121.  
  122.  
  123. #define _COMPONENT          ACPI_UTILITIES
  124.         ACPI_MODULE_NAME    ("utxferror")
  125.  
  126. /*
  127.  * This module is used for the in-kernel ACPICA as well as the ACPICA
  128.  * tools/applications.
  129.  *
  130.  * For the iASL compiler case, the output is redirected to stderr so that
  131.  * any of the various ACPI errors and warnings do not appear in the output
  132.  * files, for either the compiler or disassembler portions of the tool.
  133.  */
  134. #ifdef ACPI_ASL_COMPILER
  135. #include <stdio.h>
  136.  
  137. extern FILE                 *AcpiGbl_OutputFile;
  138.  
  139. #define ACPI_MSG_REDIRECT_BEGIN \
  140.     FILE                    *OutputFile = AcpiGbl_OutputFile; \
  141.     AcpiOsRedirectOutput (stderr);
  142.  
  143. #define ACPI_MSG_REDIRECT_END \
  144.     AcpiOsRedirectOutput (OutputFile);
  145.  
  146. #else
  147. /*
  148.  * non-iASL case - no redirection, nothing to do
  149.  */
  150. #define ACPI_MSG_REDIRECT_BEGIN
  151. #define ACPI_MSG_REDIRECT_END
  152. #endif
  153.  
  154. /*
  155.  * Common message prefixes
  156.  */
  157. #define ACPI_MSG_ERROR          "ACPI Error: "
  158. #define ACPI_MSG_EXCEPTION      "ACPI Exception: "
  159. #define ACPI_MSG_WARNING        "ACPI Warning: "
  160. #define ACPI_MSG_INFO           "ACPI: "
  161.  
  162. /*
  163.  * Common message suffix
  164.  */
  165. #define ACPI_MSG_SUFFIX \
  166.     AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
  167.  
  168.  
  169. /*******************************************************************************
  170.  *
  171.  * FUNCTION:    AcpiError
  172.  *
  173.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  174.  *              LineNumber          - Caller's line number (for error output)
  175.  *              Format              - Printf format string + additional args
  176.  *
  177.  * RETURN:      None
  178.  *
  179.  * DESCRIPTION: Print "ACPI Error" message with module/line/version info
  180.  *
  181.  ******************************************************************************/
  182.  
  183. void ACPI_INTERNAL_VAR_XFACE
  184. AcpiError (
  185.     const char              *ModuleName,
  186.     UINT32                  LineNumber,
  187.     const char              *Format,
  188.     ...)
  189. {
  190.     va_list                 ArgList;
  191.  
  192.  
  193.     ACPI_MSG_REDIRECT_BEGIN;
  194.     AcpiOsPrintf (ACPI_MSG_ERROR);
  195.  
  196.     va_start (ArgList, Format);
  197.     AcpiOsVprintf (Format, ArgList);
  198.     ACPI_MSG_SUFFIX;
  199.     va_end (ArgList);
  200.  
  201.     ACPI_MSG_REDIRECT_END;
  202. }
  203.  
  204. ACPI_EXPORT_SYMBOL (AcpiError)
  205.  
  206.  
  207. /*******************************************************************************
  208.  *
  209.  * FUNCTION:    AcpiException
  210.  *
  211.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  212.  *              LineNumber          - Caller's line number (for error output)
  213.  *              Status              - Status to be formatted
  214.  *              Format              - Printf format string + additional args
  215.  *
  216.  * RETURN:      None
  217.  *
  218.  * DESCRIPTION: Print "ACPI Exception" message with module/line/version info
  219.  *              and decoded ACPI_STATUS.
  220.  *
  221.  ******************************************************************************/
  222.  
  223. void ACPI_INTERNAL_VAR_XFACE
  224. AcpiException (
  225.     const char              *ModuleName,
  226.     UINT32                  LineNumber,
  227.     ACPI_STATUS             Status,
  228.     const char              *Format,
  229.     ...)
  230. {
  231.     va_list                 ArgList;
  232.  
  233.  
  234.     ACPI_MSG_REDIRECT_BEGIN;
  235.     AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ", AcpiFormatException (Status));
  236.  
  237.     va_start (ArgList, Format);
  238.     AcpiOsVprintf (Format, ArgList);
  239.     ACPI_MSG_SUFFIX;
  240.     va_end (ArgList);
  241.  
  242.     ACPI_MSG_REDIRECT_END;
  243. }
  244.  
  245. ACPI_EXPORT_SYMBOL (AcpiException)
  246.  
  247.  
  248. /*******************************************************************************
  249.  *
  250.  * FUNCTION:    AcpiWarning
  251.  *
  252.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  253.  *              LineNumber          - Caller's line number (for error output)
  254.  *              Format              - Printf format string + additional args
  255.  *
  256.  * RETURN:      None
  257.  *
  258.  * DESCRIPTION: Print "ACPI Warning" message with module/line/version info
  259.  *
  260.  ******************************************************************************/
  261.  
  262. void ACPI_INTERNAL_VAR_XFACE
  263. AcpiWarning (
  264.     const char              *ModuleName,
  265.     UINT32                  LineNumber,
  266.     const char              *Format,
  267.     ...)
  268. {
  269.     va_list                 ArgList;
  270.  
  271.  
  272.     ACPI_MSG_REDIRECT_BEGIN;
  273.     AcpiOsPrintf (ACPI_MSG_WARNING);
  274.  
  275.     va_start (ArgList, Format);
  276.     AcpiOsVprintf (Format, ArgList);
  277.     ACPI_MSG_SUFFIX;
  278.     va_end (ArgList);
  279.  
  280.     ACPI_MSG_REDIRECT_END;
  281. }
  282.  
  283. ACPI_EXPORT_SYMBOL (AcpiWarning)
  284.  
  285.  
  286. /*******************************************************************************
  287.  *
  288.  * FUNCTION:    AcpiInfo
  289.  *
  290.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  291.  *              LineNumber          - Caller's line number (for error output)
  292.  *              Format              - Printf format string + additional args
  293.  *
  294.  * RETURN:      None
  295.  *
  296.  * DESCRIPTION: Print generic "ACPI:" information message. There is no
  297.  *              module/line/version info in order to keep the message simple.
  298.  *
  299.  * TBD: ModuleName and LineNumber args are not needed, should be removed.
  300.  *
  301.  ******************************************************************************/
  302.  
  303. void ACPI_INTERNAL_VAR_XFACE
  304. AcpiInfo (
  305.     const char              *ModuleName,
  306.     UINT32                  LineNumber,
  307.     const char              *Format,
  308.     ...)
  309. {
  310.     va_list                 ArgList;
  311.  
  312.  
  313.     ACPI_MSG_REDIRECT_BEGIN;
  314.     AcpiOsPrintf (ACPI_MSG_INFO);
  315.  
  316.     va_start (ArgList, Format);
  317.     AcpiOsVprintf (Format, ArgList);
  318.     AcpiOsPrintf ("\n");
  319.     va_end (ArgList);
  320.  
  321.     ACPI_MSG_REDIRECT_END;
  322. }
  323.  
  324. ACPI_EXPORT_SYMBOL (AcpiInfo)
  325.  
  326.  
  327. /*
  328.  * The remainder of this module contains internal error functions that may
  329.  * be configured out.
  330.  */
  331. #if !defined (ACPI_NO_ERROR_MESSAGES) && !defined (ACPI_BIN_APP)
  332.  
  333. /*******************************************************************************
  334.  *
  335.  * FUNCTION:    AcpiUtPredefinedWarning
  336.  *
  337.  * PARAMETERS:  ModuleName      - Caller's module name (for error output)
  338.  *              LineNumber      - Caller's line number (for error output)
  339.  *              Pathname        - Full pathname to the node
  340.  *              NodeFlags       - From Namespace node for the method/object
  341.  *              Format          - Printf format string + additional args
  342.  *
  343.  * RETURN:      None
  344.  *
  345.  * DESCRIPTION: Warnings for the predefined validation module. Messages are
  346.  *              only emitted the first time a problem with a particular
  347.  *              method/object is detected. This prevents a flood of error
  348.  *              messages for methods that are repeatedly evaluated.
  349.  *
  350.  ******************************************************************************/
  351.  
  352. void ACPI_INTERNAL_VAR_XFACE
  353. AcpiUtPredefinedWarning (
  354.     const char              *ModuleName,
  355.     UINT32                  LineNumber,
  356.     char                    *Pathname,
  357.     UINT8                   NodeFlags,
  358.     const char              *Format,
  359.     ...)
  360. {
  361.     va_list                 ArgList;
  362.  
  363.  
  364.     /*
  365.      * Warning messages for this method/object will be disabled after the
  366.      * first time a validation fails or an object is successfully repaired.
  367.      */
  368.     if (NodeFlags & ANOBJ_EVALUATED)
  369.     {
  370.         return;
  371.     }
  372.  
  373.     AcpiOsPrintf (ACPI_MSG_WARNING "For %s: ", Pathname);
  374.  
  375.     va_start (ArgList, Format);
  376.     AcpiOsVprintf (Format, ArgList);
  377.     ACPI_MSG_SUFFIX;
  378.     va_end (ArgList);
  379. }
  380.  
  381.  
  382. /*******************************************************************************
  383.  *
  384.  * FUNCTION:    AcpiUtPredefinedInfo
  385.  *
  386.  * PARAMETERS:  ModuleName      - Caller's module name (for error output)
  387.  *              LineNumber      - Caller's line number (for error output)
  388.  *              Pathname        - Full pathname to the node
  389.  *              NodeFlags       - From Namespace node for the method/object
  390.  *              Format          - Printf format string + additional args
  391.  *
  392.  * RETURN:      None
  393.  *
  394.  * DESCRIPTION: Info messages for the predefined validation module. Messages
  395.  *              are only emitted the first time a problem with a particular
  396.  *              method/object is detected. This prevents a flood of
  397.  *              messages for methods that are repeatedly evaluated.
  398.  *
  399.  ******************************************************************************/
  400.  
  401. void ACPI_INTERNAL_VAR_XFACE
  402. AcpiUtPredefinedInfo (
  403.     const char              *ModuleName,
  404.     UINT32                  LineNumber,
  405.     char                    *Pathname,
  406.     UINT8                   NodeFlags,
  407.     const char              *Format,
  408.     ...)
  409. {
  410.     va_list                 ArgList;
  411.  
  412.  
  413.     /*
  414.      * Warning messages for this method/object will be disabled after the
  415.      * first time a validation fails or an object is successfully repaired.
  416.      */
  417.     if (NodeFlags & ANOBJ_EVALUATED)
  418.     {
  419.         return;
  420.     }
  421.  
  422.     AcpiOsPrintf (ACPI_MSG_INFO "For %s: ", Pathname);
  423.  
  424.     va_start (ArgList, Format);
  425.     AcpiOsVprintf (Format, ArgList);
  426.     ACPI_MSG_SUFFIX;
  427.     va_end (ArgList);
  428. }
  429.  
  430.  
  431. /*******************************************************************************
  432.  *
  433.  * FUNCTION:    AcpiUtNamespaceError
  434.  *
  435.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  436.  *              LineNumber          - Caller's line number (for error output)
  437.  *              InternalName        - Name or path of the namespace node
  438.  *              LookupStatus        - Exception code from NS lookup
  439.  *
  440.  * RETURN:      None
  441.  *
  442.  * DESCRIPTION: Print error message with the full pathname for the NS node.
  443.  *
  444.  ******************************************************************************/
  445.  
  446. void
  447. AcpiUtNamespaceError (
  448.     const char              *ModuleName,
  449.     UINT32                  LineNumber,
  450.     const char              *InternalName,
  451.     ACPI_STATUS             LookupStatus)
  452. {
  453.     ACPI_STATUS             Status;
  454.     UINT32                  BadName;
  455.     char                    *Name = NULL;
  456.  
  457.  
  458.     ACPI_MSG_REDIRECT_BEGIN;
  459.     AcpiOsPrintf (ACPI_MSG_ERROR);
  460.  
  461.     if (LookupStatus == AE_BAD_CHARACTER)
  462.     {
  463.         /* There is a non-ascii character in the name */
  464.  
  465.         ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName));
  466.         AcpiOsPrintf ("[0x%4.4X] (NON-ASCII)", BadName);
  467.     }
  468.     else
  469.     {
  470.         /* Convert path to external format */
  471.  
  472.         Status = AcpiNsExternalizeName (ACPI_UINT32_MAX,
  473.                     InternalName, NULL, &Name);
  474.  
  475.         /* Print target name */
  476.  
  477.         if (ACPI_SUCCESS (Status))
  478.         {
  479.             AcpiOsPrintf ("[%s]", Name);
  480.         }
  481.         else
  482.         {
  483.             AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]");
  484.         }
  485.  
  486.         if (Name)
  487.         {
  488.             ACPI_FREE (Name);
  489.         }
  490.     }
  491.  
  492.     AcpiOsPrintf (" Namespace lookup failure, %s",
  493.         AcpiFormatException (LookupStatus));
  494.  
  495.     ACPI_MSG_SUFFIX;
  496.     ACPI_MSG_REDIRECT_END;
  497. }
  498.  
  499.  
  500. /*******************************************************************************
  501.  *
  502.  * FUNCTION:    AcpiUtMethodError
  503.  *
  504.  * PARAMETERS:  ModuleName          - Caller's module name (for error output)
  505.  *              LineNumber          - Caller's line number (for error output)
  506.  *              Message             - Error message to use on failure
  507.  *              PrefixNode          - Prefix relative to the path
  508.  *              Path                - Path to the node (optional)
  509.  *              MethodStatus        - Execution status
  510.  *
  511.  * RETURN:      None
  512.  *
  513.  * DESCRIPTION: Print error message with the full pathname for the method.
  514.  *
  515.  ******************************************************************************/
  516.  
  517. void
  518. AcpiUtMethodError (
  519.     const char              *ModuleName,
  520.     UINT32                  LineNumber,
  521.     const char              *Message,
  522.     ACPI_NAMESPACE_NODE     *PrefixNode,
  523.     const char              *Path,
  524.     ACPI_STATUS             MethodStatus)
  525. {
  526.     ACPI_STATUS             Status;
  527.     ACPI_NAMESPACE_NODE     *Node = PrefixNode;
  528.  
  529.  
  530.     ACPI_MSG_REDIRECT_BEGIN;
  531.     AcpiOsPrintf (ACPI_MSG_ERROR);
  532.  
  533.     if (Path)
  534.     {
  535.         Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH,
  536.                     &Node);
  537.         if (ACPI_FAILURE (Status))
  538.         {
  539.             AcpiOsPrintf ("[Could not get node by pathname]");
  540.         }
  541.     }
  542.  
  543.     AcpiNsPrintNodePathname (Node, Message);
  544.     AcpiOsPrintf (", %s", AcpiFormatException (MethodStatus));
  545.  
  546.     ACPI_MSG_SUFFIX;
  547.     ACPI_MSG_REDIRECT_END;
  548. }
  549.  
  550. #endif /* ACPI_NO_ERROR_MESSAGES */
  551.