LCOV - code coverage report
Current view: top level - drivers/acpi/acpica - exdebug.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 107 0.0 %
Date: 2022-03-28 13:20:08 Functions: 0 1 0.0 %
Branches: 0 60 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
       2                 :            : /******************************************************************************
       3                 :            :  *
       4                 :            :  * Module Name: exdebug - Support for stores to the AML Debug Object
       5                 :            :  *
       6                 :            :  * Copyright (C) 2000 - 2020, Intel Corp.
       7                 :            :  *
       8                 :            :  *****************************************************************************/
       9                 :            : 
      10                 :            : #include <acpi/acpi.h>
      11                 :            : #include "accommon.h"
      12                 :            : #include "acinterp.h"
      13                 :            : 
      14                 :            : #define _COMPONENT          ACPI_EXECUTER
      15                 :            : ACPI_MODULE_NAME("exdebug")
      16                 :            : 
      17                 :            : #ifndef ACPI_NO_ERROR_MESSAGES
      18                 :            : /*******************************************************************************
      19                 :            :  *
      20                 :            :  * FUNCTION:    acpi_ex_do_debug_object
      21                 :            :  *
      22                 :            :  * PARAMETERS:  source_desc         - Object to be output to "Debug Object"
      23                 :            :  *              level               - Indentation level (used for packages)
      24                 :            :  *              index               - Current package element, zero if not pkg
      25                 :            :  *
      26                 :            :  * RETURN:      None
      27                 :            :  *
      28                 :            :  * DESCRIPTION: Handles stores to the AML Debug Object. For example:
      29                 :            :  *              Store(INT1, Debug)
      30                 :            :  *
      31                 :            :  * This function is not compiled if ACPI_NO_ERROR_MESSAGES is set.
      32                 :            :  *
      33                 :            :  * This function is only enabled if acpi_gbl_enable_aml_debug_object is set, or
      34                 :            :  * if ACPI_LV_DEBUG_OBJECT is set in the acpi_dbg_level. Thus, in the normal
      35                 :            :  * operational case, stores to the debug object are ignored but can be easily
      36                 :            :  * enabled if necessary.
      37                 :            :  *
      38                 :            :  ******************************************************************************/
      39                 :            : void
      40                 :          0 : acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
      41                 :            :                         u32 level, u32 index)
      42                 :            : {
      43                 :          0 :         u32 i;
      44                 :          0 :         u32 timer;
      45                 :          0 :         union acpi_operand_object *object_desc;
      46                 :          0 :         u32 value;
      47                 :            : 
      48                 :          0 :         ACPI_FUNCTION_TRACE_PTR(ex_do_debug_object, source_desc);
      49                 :            : 
      50                 :            :         /* Output must be enabled via the debug_object global or the dbg_level */
      51                 :            : 
      52         [ #  # ]:          0 :         if (!acpi_gbl_enable_aml_debug_object &&
      53         [ #  # ]:          0 :             !(acpi_dbg_level & ACPI_LV_DEBUG_OBJECT)) {
      54                 :            :                 return_VOID;
      55                 :            :         }
      56                 :            : 
      57                 :            :         /* Newline -- don't emit the line header */
      58                 :            : 
      59         [ #  # ]:          0 :         if (source_desc &&
      60         [ #  # ]:          0 :             (ACPI_GET_DESCRIPTOR_TYPE(source_desc) == ACPI_DESC_TYPE_OPERAND) &&
      61         [ #  # ]:          0 :             (source_desc->common.type == ACPI_TYPE_STRING)) {
      62         [ #  # ]:          0 :                 if ((source_desc->string.length == 1) &&
      63         [ #  # ]:          0 :                     (*source_desc->string.pointer == '\n')) {
      64                 :          0 :                         acpi_os_printf("\n");
      65                 :          0 :                         return_VOID;
      66                 :            :                 }
      67                 :            :         }
      68                 :            : 
      69                 :            :         /*
      70                 :            :          * Print line header as long as we are not in the middle of an
      71                 :            :          * object display
      72                 :            :          */
      73         [ #  # ]:          0 :         if (!((level > 0) && index == 0)) {
      74         [ #  # ]:          0 :                 if (acpi_gbl_display_debug_timer) {
      75                 :            :                         /*
      76                 :            :                          * We will emit the current timer value (in microseconds) with each
      77                 :            :                          * debug output. Only need the lower 26 bits. This allows for 67
      78                 :            :                          * million microseconds or 67 seconds before rollover.
      79                 :            :                          *
      80                 :            :                          * Convert 100 nanosecond units to microseconds
      81                 :            :                          */
      82                 :          0 :                         timer = ((u32)acpi_os_get_timer() / 10);
      83                 :          0 :                         timer &= 0x03FFFFFF;
      84                 :            : 
      85                 :          0 :                         acpi_os_printf("ACPI Debug: T=0x%8.8X %*s", timer,
      86                 :            :                                        level, " ");
      87                 :            :                 } else {
      88                 :          0 :                         acpi_os_printf("ACPI Debug: %*s", level, " ");
      89                 :            :                 }
      90                 :            :         }
      91                 :            : 
      92                 :            :         /* Display the index for package output only */
      93                 :            : 
      94         [ #  # ]:          0 :         if (index > 0) {
      95                 :          0 :                 acpi_os_printf("(%.2u) ", index - 1);
      96                 :            :         }
      97                 :            : 
      98         [ #  # ]:          0 :         if (!source_desc) {
      99                 :          0 :                 acpi_os_printf("[Null Object]\n");
     100                 :          0 :                 return_VOID;
     101                 :            :         }
     102                 :            : 
     103         [ #  # ]:          0 :         if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) == ACPI_DESC_TYPE_OPERAND) {
     104                 :            : 
     105                 :            :                 /* No object type prefix needed for integers and strings */
     106                 :            : 
     107         [ #  # ]:          0 :                 if ((source_desc->common.type != ACPI_TYPE_INTEGER) &&
     108                 :            :                     (source_desc->common.type != ACPI_TYPE_STRING)) {
     109                 :          0 :                         acpi_os_printf("%s ",
     110                 :            :                                        acpi_ut_get_object_type_name
     111                 :            :                                        (source_desc));
     112                 :            :                 }
     113                 :            : 
     114         [ #  # ]:          0 :                 if (!acpi_ut_valid_internal_object(source_desc)) {
     115                 :          0 :                         acpi_os_printf("%p, Invalid Internal Object!\n",
     116                 :            :                                        source_desc);
     117                 :          0 :                         return_VOID;
     118                 :            :                 }
     119         [ #  # ]:          0 :         } else if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) ==
     120                 :            :                    ACPI_DESC_TYPE_NAMED) {
     121                 :          0 :                 acpi_os_printf("%s (Node %p)\n",
     122                 :            :                                acpi_ut_get_type_name(((struct
     123                 :            :                                                        acpi_namespace_node *)
     124                 :          0 :                                                       source_desc)->type),
     125                 :            :                                source_desc);
     126                 :          0 :                 return_VOID;
     127                 :            :         } else {
     128                 :            :                 return_VOID;
     129                 :            :         }
     130                 :            : 
     131                 :            :         /* source_desc is of type ACPI_DESC_TYPE_OPERAND */
     132                 :            : 
     133   [ #  #  #  #  :          0 :         switch (source_desc->common.type) {
                   #  # ]
     134                 :          0 :         case ACPI_TYPE_INTEGER:
     135                 :            : 
     136                 :            :                 /* Output correct integer width */
     137                 :            : 
     138         [ #  # ]:          0 :                 if (acpi_gbl_integer_byte_width == 4) {
     139                 :          0 :                         acpi_os_printf("0x%8.8X\n",
     140                 :          0 :                                        (u32)source_desc->integer.value);
     141                 :            :                 } else {
     142                 :          0 :                         acpi_os_printf("0x%8.8X%8.8X\n",
     143                 :          0 :                                        ACPI_FORMAT_UINT64(source_desc->integer.
     144                 :            :                                                           value));
     145                 :            :                 }
     146                 :            :                 break;
     147                 :            : 
     148                 :          0 :         case ACPI_TYPE_BUFFER:
     149                 :            : 
     150                 :          0 :                 acpi_os_printf("[0x%.2X]\n", (u32)source_desc->buffer.length);
     151                 :          0 :                 acpi_ut_dump_buffer(source_desc->buffer.pointer,
     152                 :          0 :                                     (source_desc->buffer.length < 256) ?
     153                 :            :                                     source_desc->buffer.length : 256,
     154                 :            :                                     DB_BYTE_DISPLAY, 0);
     155                 :          0 :                 break;
     156                 :            : 
     157                 :          0 :         case ACPI_TYPE_STRING:
     158                 :            : 
     159                 :          0 :                 acpi_os_printf("\"%s\"\n", source_desc->string.pointer);
     160                 :          0 :                 break;
     161                 :            : 
     162                 :          0 :         case ACPI_TYPE_PACKAGE:
     163                 :            : 
     164                 :          0 :                 acpi_os_printf("(Contains 0x%.2X Elements):\n",
     165                 :            :                                source_desc->package.count);
     166                 :            : 
     167                 :            :                 /* Output the entire contents of the package */
     168                 :            : 
     169         [ #  # ]:          0 :                 for (i = 0; i < source_desc->package.count; i++) {
     170                 :          0 :                         acpi_ex_do_debug_object(source_desc->package.
     171                 :          0 :                                                 elements[i], level + 4, i + 1);
     172                 :            :                 }
     173                 :            :                 break;
     174                 :            : 
     175                 :          0 :         case ACPI_TYPE_LOCAL_REFERENCE:
     176                 :            : 
     177                 :          0 :                 acpi_os_printf("[%s] ",
     178                 :            :                                acpi_ut_get_reference_name(source_desc));
     179                 :            : 
     180                 :            :                 /* Decode the reference */
     181                 :            : 
     182      [ #  #  # ]:          0 :                 switch (source_desc->reference.class) {
     183                 :          0 :                 case ACPI_REFCLASS_INDEX:
     184                 :            : 
     185                 :          0 :                         acpi_os_printf("0x%X\n", source_desc->reference.value);
     186                 :          0 :                         break;
     187                 :            : 
     188                 :          0 :                 case ACPI_REFCLASS_TABLE:
     189                 :            : 
     190                 :            :                         /* Case for ddb_handle */
     191                 :            : 
     192                 :          0 :                         acpi_os_printf("Table Index 0x%X\n",
     193                 :            :                                        source_desc->reference.value);
     194                 :          0 :                         return_VOID;
     195                 :            : 
     196                 :            :                 default:
     197                 :            : 
     198                 :            :                         break;
     199                 :            :                 }
     200                 :            : 
     201                 :          0 :                 acpi_os_printf(" ");
     202                 :            : 
     203                 :            :                 /* Check for valid node first, then valid object */
     204                 :            : 
     205         [ #  # ]:          0 :                 if (source_desc->reference.node) {
     206         [ #  # ]:          0 :                         if (ACPI_GET_DESCRIPTOR_TYPE
     207                 :            :                             (source_desc->reference.node) !=
     208                 :            :                             ACPI_DESC_TYPE_NAMED) {
     209                 :          0 :                                 acpi_os_printf
     210                 :            :                                     (" %p - Not a valid namespace node\n",
     211                 :            :                                      source_desc->reference.node);
     212                 :            :                         } else {
     213                 :          0 :                                 acpi_os_printf("Node %p [%4.4s] ",
     214                 :            :                                                source_desc->reference.node,
     215                 :            :                                                (source_desc->reference.node)->
     216                 :          0 :                                                name.ascii);
     217                 :            : 
     218      [ #  #  # ]:          0 :                                 switch ((source_desc->reference.node)->type) {
     219                 :            : 
     220                 :            :                                         /* These types have no attached object */
     221                 :            : 
     222                 :          0 :                                 case ACPI_TYPE_DEVICE:
     223                 :          0 :                                         acpi_os_printf("Device\n");
     224                 :          0 :                                         break;
     225                 :            : 
     226                 :          0 :                                 case ACPI_TYPE_THERMAL:
     227                 :          0 :                                         acpi_os_printf("Thermal Zone\n");
     228                 :          0 :                                         break;
     229                 :            : 
     230                 :          0 :                                 default:
     231                 :            : 
     232                 :          0 :                                         acpi_ex_do_debug_object((source_desc->
     233                 :            :                                                                  reference.
     234                 :            :                                                                  node)->object,
     235                 :            :                                                                 level + 4, 0);
     236                 :          0 :                                         break;
     237                 :            :                                 }
     238                 :            :                         }
     239         [ #  # ]:          0 :                 } else if (source_desc->reference.object) {
     240         [ #  # ]:          0 :                         if (ACPI_GET_DESCRIPTOR_TYPE
     241                 :            :                             (source_desc->reference.object) ==
     242                 :            :                             ACPI_DESC_TYPE_NAMED) {
     243                 :            : 
     244                 :            :                                 /* Reference object is a namespace node */
     245                 :            : 
     246                 :          0 :                                 acpi_ex_do_debug_object(ACPI_CAST_PTR
     247                 :            :                                                         (union
     248                 :            :                                                          acpi_operand_object,
     249                 :            :                                                          source_desc->reference.
     250                 :            :                                                          object), level + 4, 0);
     251                 :            :                         } else {
     252                 :          0 :                                 object_desc = source_desc->reference.object;
     253                 :          0 :                                 value = source_desc->reference.value;
     254                 :            : 
     255   [ #  #  #  # ]:          0 :                                 switch (object_desc->common.type) {
     256                 :          0 :                                 case ACPI_TYPE_BUFFER:
     257                 :            : 
     258                 :          0 :                                         acpi_os_printf("Buffer[%u] = 0x%2.2X\n",
     259                 :            :                                                        value,
     260                 :          0 :                                                        *source_desc->reference.
     261                 :            :                                                        index_pointer);
     262                 :          0 :                                         break;
     263                 :            : 
     264                 :          0 :                                 case ACPI_TYPE_STRING:
     265                 :            : 
     266                 :          0 :                                         acpi_os_printf
     267                 :            :                                             ("String[%u] = \"%c\" (0x%2.2X)\n",
     268                 :            :                                              value,
     269                 :            :                                              *source_desc->reference.
     270                 :            :                                              index_pointer,
     271                 :          0 :                                              *source_desc->reference.
     272                 :            :                                              index_pointer);
     273                 :          0 :                                         break;
     274                 :            : 
     275                 :          0 :                                 case ACPI_TYPE_PACKAGE:
     276                 :            : 
     277                 :          0 :                                         acpi_os_printf("Package[%u] = ", value);
     278         [ #  # ]:          0 :                                         if (!(*source_desc->reference.where)) {
     279                 :          0 :                                                 acpi_os_printf
     280                 :            :                                                     ("[Uninitialized Package Element]\n");
     281                 :            :                                         } else {
     282                 :          0 :                                                 acpi_ex_do_debug_object
     283                 :            :                                                     (*source_desc->reference.
     284                 :            :                                                      where, level + 4, 0);
     285                 :            :                                         }
     286                 :            :                                         break;
     287                 :            : 
     288                 :          0 :                                 default:
     289                 :            : 
     290                 :          0 :                                         acpi_os_printf
     291                 :            :                                             ("Unknown Reference object type %X\n",
     292                 :            :                                              object_desc->common.type);
     293                 :          0 :                                         break;
     294                 :            :                                 }
     295                 :          0 :                         }
     296                 :            :                 }
     297                 :            :                 break;
     298                 :            : 
     299                 :          0 :         default:
     300                 :            : 
     301                 :          0 :                 acpi_os_printf("(Descriptor %p)\n", source_desc);
     302                 :          0 :                 break;
     303                 :            :         }
     304                 :            : 
     305                 :            :         ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "\n"));
     306                 :            :         return_VOID;
     307                 :            : }
     308                 :            : #endif

Generated by: LCOV version 1.14