cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

acoutput.h (16758B)


      1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
      2/******************************************************************************
      3 *
      4 * Name: acoutput.h -- debug output
      5 *
      6 * Copyright (C) 2000 - 2022, Intel Corp.
      7 *
      8 *****************************************************************************/
      9
     10#ifndef __ACOUTPUT_H__
     11#define __ACOUTPUT_H__
     12
     13/*
     14 * Debug levels and component IDs. These are used to control the
     15 * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a
     16 * per-component basis and a per-exception-type basis.
     17 */
     18
     19/* Component IDs are used in the global "DebugLayer" */
     20
     21#define ACPI_UTILITIES              0x00000001
     22#define ACPI_HARDWARE               0x00000002
     23#define ACPI_EVENTS                 0x00000004
     24#define ACPI_TABLES                 0x00000008
     25#define ACPI_NAMESPACE              0x00000010
     26#define ACPI_PARSER                 0x00000020
     27#define ACPI_DISPATCHER             0x00000040
     28#define ACPI_EXECUTER               0x00000080
     29#define ACPI_RESOURCES              0x00000100
     30#define ACPI_CA_DEBUGGER            0x00000200
     31#define ACPI_OS_SERVICES            0x00000400
     32#define ACPI_CA_DISASSEMBLER        0x00000800
     33
     34/* Component IDs for ACPI tools and utilities */
     35
     36#define ACPI_COMPILER               0x00001000
     37#define ACPI_TOOLS                  0x00002000
     38#define ACPI_EXAMPLE                0x00004000
     39#define ACPI_DRIVER                 0x00008000
     40#define DT_COMPILER                 0x00010000
     41#define ASL_PREPROCESSOR            0x00020000
     42
     43#define ACPI_ALL_COMPONENTS         0x0001FFFF
     44#define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
     45
     46/* Component IDs reserved for ACPI drivers */
     47
     48#define ACPI_ALL_DRIVERS            0xFFFF0000
     49
     50/*
     51 * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros
     52 */
     53#define ACPI_LV_INIT                0x00000001
     54#define ACPI_LV_DEBUG_OBJECT        0x00000002
     55#define ACPI_LV_INFO                0x00000004
     56#define ACPI_LV_REPAIR              0x00000008
     57#define ACPI_LV_TRACE_POINT         0x00000010
     58#define ACPI_LV_ALL_EXCEPTIONS      0x0000001F
     59
     60/* Trace verbosity level 1 [Standard Trace Level] */
     61
     62#define ACPI_LV_INIT_NAMES          0x00000020
     63#define ACPI_LV_PARSE               0x00000040
     64#define ACPI_LV_LOAD                0x00000080
     65#define ACPI_LV_DISPATCH            0x00000100
     66#define ACPI_LV_EXEC                0x00000200
     67#define ACPI_LV_NAMES               0x00000400
     68#define ACPI_LV_OPREGION            0x00000800
     69#define ACPI_LV_BFIELD              0x00001000
     70#define ACPI_LV_TABLES              0x00002000
     71#define ACPI_LV_VALUES              0x00004000
     72#define ACPI_LV_OBJECTS             0x00008000
     73#define ACPI_LV_RESOURCES           0x00010000
     74#define ACPI_LV_USER_REQUESTS       0x00020000
     75#define ACPI_LV_PACKAGE             0x00040000
     76#define ACPI_LV_EVALUATION          0x00080000
     77#define ACPI_LV_VERBOSITY1          0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS
     78
     79/* Trace verbosity level 2 [Function tracing and memory allocation] */
     80
     81#define ACPI_LV_ALLOCATIONS         0x00100000
     82#define ACPI_LV_FUNCTIONS           0x00200000
     83#define ACPI_LV_OPTIMIZATIONS       0x00400000
     84#define ACPI_LV_PARSE_TREES         0x00800000
     85#define ACPI_LV_VERBOSITY2          0x00F00000 | ACPI_LV_VERBOSITY1
     86#define ACPI_LV_ALL                 ACPI_LV_VERBOSITY2
     87
     88/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
     89
     90#define ACPI_LV_MUTEX               0x01000000
     91#define ACPI_LV_THREADS             0x02000000
     92#define ACPI_LV_IO                  0x04000000
     93#define ACPI_LV_INTERRUPTS          0x08000000
     94#define ACPI_LV_VERBOSITY3          0x0F000000 | ACPI_LV_VERBOSITY2
     95
     96/* Exceptionally verbose output -- also used in the global "DebugLevel"  */
     97
     98#define ACPI_LV_AML_DISASSEMBLE     0x10000000
     99#define ACPI_LV_VERBOSE_INFO        0x20000000
    100#define ACPI_LV_FULL_TABLES         0x40000000
    101#define ACPI_LV_EVENTS              0x80000000
    102#define ACPI_LV_VERBOSE             0xF0000000
    103
    104/*
    105 * Debug level macros that are used in the DEBUG_PRINT macros
    106 */
    107#define ACPI_DEBUG_LEVEL(dl)        (u32) dl,ACPI_DEBUG_PARAMETERS
    108
    109/*
    110 * Exception level -- used in the global "DebugLevel"
    111 *
    112 * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces.
    113 * For warnings, use ACPI_WARNING.
    114 */
    115#define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
    116#define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
    117#define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
    118#define ACPI_DB_REPAIR              ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
    119#define ACPI_DB_TRACE_POINT         ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT)
    120#define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
    121
    122/* Trace level -- also used in the global "DebugLevel" */
    123
    124#define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
    125#define ACPI_DB_THREADS             ACPI_DEBUG_LEVEL (ACPI_LV_THREADS)
    126#define ACPI_DB_PARSE               ACPI_DEBUG_LEVEL (ACPI_LV_PARSE)
    127#define ACPI_DB_DISPATCH            ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH)
    128#define ACPI_DB_LOAD                ACPI_DEBUG_LEVEL (ACPI_LV_LOAD)
    129#define ACPI_DB_EXEC                ACPI_DEBUG_LEVEL (ACPI_LV_EXEC)
    130#define ACPI_DB_NAMES               ACPI_DEBUG_LEVEL (ACPI_LV_NAMES)
    131#define ACPI_DB_OPREGION            ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION)
    132#define ACPI_DB_BFIELD              ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD)
    133#define ACPI_DB_TABLES              ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
    134#define ACPI_DB_FUNCTIONS           ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
    135#define ACPI_DB_OPTIMIZATIONS       ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
    136#define ACPI_DB_PARSE_TREES         ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES)
    137#define ACPI_DB_VALUES              ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
    138#define ACPI_DB_OBJECTS             ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
    139#define ACPI_DB_ALLOCATIONS         ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
    140#define ACPI_DB_RESOURCES           ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES)
    141#define ACPI_DB_IO                  ACPI_DEBUG_LEVEL (ACPI_LV_IO)
    142#define ACPI_DB_INTERRUPTS          ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
    143#define ACPI_DB_USER_REQUESTS       ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
    144#define ACPI_DB_PACKAGE             ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
    145#define ACPI_DB_EVALUATION          ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION)
    146#define ACPI_DB_MUTEX               ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
    147#define ACPI_DB_EVENTS              ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS)
    148
    149#define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
    150
    151/* Defaults for debug_level, debug and normal */
    152
    153#ifndef ACPI_DEBUG_DEFAULT
    154#define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR)
    155#endif
    156
    157#define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
    158#define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
    159
    160/*
    161 * Global trace flags
    162 */
    163#define ACPI_TRACE_ENABLED          ((u32) 4)
    164#define ACPI_TRACE_ONESHOT          ((u32) 2)
    165#define ACPI_TRACE_OPCODE           ((u32) 1)
    166
    167/* Defaults for trace debugging level/layer */
    168
    169#define ACPI_TRACE_LEVEL_ALL        ACPI_LV_ALL
    170#define ACPI_TRACE_LAYER_ALL        0x000001FF
    171#define ACPI_TRACE_LEVEL_DEFAULT    ACPI_LV_TRACE_POINT
    172#define ACPI_TRACE_LAYER_DEFAULT    ACPI_EXECUTER
    173
    174#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
    175/*
    176 * The module name is used primarily for error and debug messages.
    177 * The __FILE__ macro is not very useful for this, because it
    178 * usually includes the entire pathname to the module making the
    179 * debug output difficult to read.
    180 */
    181#define ACPI_MODULE_NAME(name)          static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
    182#else
    183/*
    184 * For the no-debug and no-error-msg cases, we must at least define
    185 * a null module name.
    186 */
    187#define ACPI_MODULE_NAME(name)
    188#define _acpi_module_name ""
    189#endif
    190
    191/*
    192 * Ascii error messages can be configured out
    193 */
    194#ifndef ACPI_NO_ERROR_MESSAGES
    195#define AE_INFO                         _acpi_module_name, __LINE__
    196
    197/*
    198 * Error reporting. Callers module and line number are inserted by AE_INFO,
    199 * the plist contains a set of parens to allow variable-length lists.
    200 * These macros are used for both the debug and non-debug versions of the code.
    201 */
    202#define ACPI_INFO(plist)                acpi_info plist
    203#define ACPI_WARNING(plist)             acpi_warning plist
    204#define ACPI_EXCEPTION(plist)           acpi_exception plist
    205#define ACPI_ERROR(plist)               acpi_error plist
    206#define ACPI_BIOS_WARNING(plist)        acpi_bios_warning plist
    207#define ACPI_BIOS_EXCEPTION(plist)      acpi_bios_exception plist
    208#define ACPI_BIOS_ERROR(plist)          acpi_bios_error plist
    209#define ACPI_DEBUG_OBJECT(obj,l,i)      acpi_ex_do_debug_object(obj,l,i)
    210
    211#else
    212
    213/* No error messages */
    214
    215#define ACPI_INFO(plist)
    216#define ACPI_WARNING(plist)
    217#define ACPI_EXCEPTION(plist)
    218#define ACPI_ERROR(plist)
    219#define ACPI_BIOS_WARNING(plist)
    220#define ACPI_BIOS_EXCEPTION(plist)
    221#define ACPI_BIOS_ERROR(plist)
    222#define ACPI_DEBUG_OBJECT(obj,l,i)
    223
    224#endif				/* ACPI_NO_ERROR_MESSAGES */
    225
    226/*
    227 * Debug macros that are conditionally compiled
    228 */
    229#ifdef ACPI_DEBUG_OUTPUT
    230
    231/*
    232 * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
    233 * define it now. This is the case where there the compiler does not support
    234 * a __func__ macro or equivalent.
    235 */
    236#ifndef ACPI_GET_FUNCTION_NAME
    237#define ACPI_GET_FUNCTION_NAME          _acpi_function_name
    238
    239/*
    240 * The Name parameter should be the procedure name as a non-quoted string.
    241 * The function name is also used by the function exit macros below.
    242 * Note: (const char) is used to be compatible with the debug interfaces
    243 * and macros such as __func__.
    244 */
    245#define ACPI_FUNCTION_NAME(name)        static const char _acpi_function_name[] = #name;
    246
    247#else
    248/* Compiler supports __func__ (or equivalent) -- Ignore this macro */
    249
    250#define ACPI_FUNCTION_NAME(name)
    251#endif				/* ACPI_GET_FUNCTION_NAME */
    252
    253/*
    254 * Common parameters used for debug output functions:
    255 * line number, function name, module(file) name, component ID
    256 */
    257#define ACPI_DEBUG_PARAMETERS \
    258	__LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT
    259
    260/* Check if debug output is currently dynamically enabled */
    261
    262#define ACPI_IS_DEBUG_ENABLED(level, component) \
    263	((level & acpi_dbg_level) && (component & acpi_dbg_layer))
    264
    265/*
    266 * Master debug print macros
    267 * Print message if and only if:
    268 *    1) Debug print for the current component is enabled
    269 *    2) Debug error level or trace level for the print statement is enabled
    270 *
    271 * November 2012: Moved the runtime check for whether to actually emit the
    272 * debug message outside of the print function itself. This improves overall
    273 * performance at a relatively small code cost. Implementation involves the
    274 * use of variadic macros supported by C99.
    275 *
    276 * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from
    277 * complaining about these constructs. On other compilers the do...while
    278 * adds some extra code, so this feature is optional.
    279 */
    280#ifdef ACPI_USE_DO_WHILE_0
    281#define ACPI_DO_WHILE0(a)               do a while(0)
    282#else
    283#define ACPI_DO_WHILE0(a)               a
    284#endif
    285
    286/* DEBUG_PRINT functions */
    287
    288#ifndef COMPILER_VA_MACRO
    289
    290#define ACPI_DEBUG_PRINT(plist)         acpi_debug_print plist
    291#define ACPI_DEBUG_PRINT_RAW(plist)     acpi_debug_print_raw plist
    292
    293#else
    294
    295/* Helper macros for DEBUG_PRINT */
    296
    297#define ACPI_DO_DEBUG_PRINT(function, level, line, filename, modulename, component, ...) \
    298	ACPI_DO_WHILE0 ({ \
    299		if (ACPI_IS_DEBUG_ENABLED (level, component)) \
    300		{ \
    301			function (level, line, filename, modulename, component, __VA_ARGS__); \
    302		} \
    303	})
    304
    305#define ACPI_ACTUAL_DEBUG(level, line, filename, modulename, component, ...) \
    306	ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \
    307		filename, modulename, component, __VA_ARGS__)
    308
    309#define ACPI_ACTUAL_DEBUG_RAW(level, line, filename, modulename, component, ...) \
    310	ACPI_DO_DEBUG_PRINT (acpi_debug_print_raw, level, line, \
    311		filename, modulename, component, __VA_ARGS__)
    312
    313#define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist
    314#define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist
    315
    316#endif
    317
    318/*
    319 * Function entry tracing
    320 *
    321 * The name of the function is emitted as a local variable that is
    322 * intended to be used by both the entry trace and the exit trace.
    323 */
    324
    325/* Helper macro */
    326
    327#define ACPI_TRACE_ENTRY(name, function, type, param) \
    328	ACPI_FUNCTION_NAME (name) \
    329	function (ACPI_DEBUG_PARAMETERS, (type) (param))
    330
    331/* The actual entry trace macros */
    332
    333#define ACPI_FUNCTION_TRACE(name) \
    334	ACPI_FUNCTION_NAME(name) \
    335	acpi_ut_trace (ACPI_DEBUG_PARAMETERS)
    336
    337#define ACPI_FUNCTION_TRACE_PTR(name, pointer) \
    338	ACPI_TRACE_ENTRY (name, acpi_ut_trace_ptr, void *, pointer)
    339
    340#define ACPI_FUNCTION_TRACE_U32(name, value) \
    341	ACPI_TRACE_ENTRY (name, acpi_ut_trace_u32, u32, value)
    342
    343#define ACPI_FUNCTION_TRACE_STR(name, string) \
    344	ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, const char *, string)
    345
    346#define ACPI_FUNCTION_ENTRY() \
    347	acpi_ut_track_stack_ptr()
    348
    349/*
    350 * Function exit tracing
    351 *
    352 * These macros include a return statement. This is usually considered
    353 * bad form, but having a separate exit macro before the actual return
    354 * is very ugly and difficult to maintain.
    355 *
    356 * One of the FUNCTION_TRACE macros above must be used in conjunction
    357 * with these macros so that "_AcpiFunctionName" is defined.
    358 *
    359 * There are two versions of most of the return macros. The default version is
    360 * safer, since it avoids side-effects by guaranteeing that the argument will
    361 * not be evaluated twice.
    362 *
    363 * A less-safe version of the macros is provided for optional use if the
    364 * compiler uses excessive CPU stack (for example, this may happen in the
    365 * debug case if code optimization is disabled.)
    366 */
    367
    368/* Exit trace helper macro */
    369
    370#ifndef ACPI_SIMPLE_RETURN_MACROS
    371
    372#define ACPI_TRACE_EXIT(function, type, param) \
    373	ACPI_DO_WHILE0 ({ \
    374		register type _param = (type) (param); \
    375		function (ACPI_DEBUG_PARAMETERS, _param); \
    376		return (_param); \
    377	})
    378
    379#else				/* Use original less-safe macros */
    380
    381#define ACPI_TRACE_EXIT(function, type, param) \
    382	ACPI_DO_WHILE0 ({ \
    383		function (ACPI_DEBUG_PARAMETERS, (type) (param)); \
    384		return (param); \
    385	})
    386
    387#endif				/* ACPI_SIMPLE_RETURN_MACROS */
    388
    389/* The actual exit macros */
    390
    391#define return_VOID \
    392	ACPI_DO_WHILE0 ({ \
    393		acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \
    394		return; \
    395	})
    396
    397#define return_ACPI_STATUS(status) \
    398	ACPI_TRACE_EXIT (acpi_ut_status_exit, acpi_status, status)
    399
    400#define return_PTR(pointer) \
    401	ACPI_TRACE_EXIT (acpi_ut_ptr_exit, void *, pointer)
    402
    403#define return_STR(string) \
    404	ACPI_TRACE_EXIT (acpi_ut_str_exit, const char *, string)
    405
    406#define return_VALUE(value) \
    407	ACPI_TRACE_EXIT (acpi_ut_value_exit, u64, value)
    408
    409#define return_UINT32(value) \
    410	ACPI_TRACE_EXIT (acpi_ut_value_exit, u32, value)
    411
    412#define return_UINT8(value) \
    413	ACPI_TRACE_EXIT (acpi_ut_value_exit, u8, value)
    414
    415/* Conditional execution */
    416
    417#define ACPI_DEBUG_EXEC(a)              a
    418#define ACPI_DEBUG_ONLY_MEMBERS(a)      a
    419#define _VERBOSE_STRUCTURES
    420
    421/* Various object display routines for debug */
    422
    423#define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a), 0)
    424#define ACPI_DUMP_OPERANDS(a, b ,c)     acpi_ex_dump_operands(a, b, c)
    425#define ACPI_DUMP_ENTRY(a, b)           acpi_ns_dump_entry (a, b)
    426#define ACPI_DUMP_PATHNAME(a, b, c, d)  acpi_ns_dump_pathname(a, b, c, d)
    427#define ACPI_DUMP_BUFFER(a, b)          acpi_ut_debug_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
    428
    429#define ACPI_TRACE_POINT(a, b, c, d)    acpi_trace_point (a, b, c, d)
    430
    431#else				/* ACPI_DEBUG_OUTPUT */
    432/*
    433 * This is the non-debug case -- make everything go away,
    434 * leaving no executable debug code!
    435 */
    436#define ACPI_DEBUG_PRINT(pl)
    437#define ACPI_DEBUG_PRINT_RAW(pl)
    438#define ACPI_DEBUG_EXEC(a)
    439#define ACPI_DEBUG_ONLY_MEMBERS(a)
    440#define ACPI_FUNCTION_NAME(a)
    441#define ACPI_FUNCTION_TRACE(a)
    442#define ACPI_FUNCTION_TRACE_PTR(a, b)
    443#define ACPI_FUNCTION_TRACE_U32(a, b)
    444#define ACPI_FUNCTION_TRACE_STR(a, b)
    445#define ACPI_FUNCTION_ENTRY()
    446#define ACPI_DUMP_STACK_ENTRY(a)
    447#define ACPI_DUMP_OPERANDS(a, b, c)
    448#define ACPI_DUMP_ENTRY(a, b)
    449#define ACPI_DUMP_PATHNAME(a, b, c, d)
    450#define ACPI_DUMP_BUFFER(a, b)
    451#define ACPI_IS_DEBUG_ENABLED(level, component) 0
    452#define ACPI_TRACE_POINT(a, b, c, d)
    453
    454/* Return macros must have a return statement at the minimum */
    455
    456#define return_VOID                     return
    457#define return_ACPI_STATUS(s)           return(s)
    458#define return_PTR(s)                   return(s)
    459#define return_STR(s)                   return(s)
    460#define return_VALUE(s)                 return(s)
    461#define return_UINT8(s)                 return(s)
    462#define return_UINT32(s)                return(s)
    463
    464#endif				/* ACPI_DEBUG_OUTPUT */
    465
    466#endif				/* __ACOUTPUT_H__ */