^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Module Name: utbuffer - Buffer dump routines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2000 - 2020, Intel Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <acpi/acpi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include "accommon.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define _COMPONENT ACPI_UTILITIES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) ACPI_MODULE_NAME("utbuffer")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * FUNCTION: acpi_ut_dump_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * PARAMETERS: buffer - Buffer to dump
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * count - Amount to dump, in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * display - BYTE, WORD, DWORD, or QWORD display:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * DB_BYTE_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * DB_WORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * DB_DWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * DB_QWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * base_offset - Beginning buffer offset (display only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * RETURN: None
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * DESCRIPTION: Generic dump buffer in both hex and ascii.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) u32 i = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) u32 j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) u32 temp32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) u8 buf_char;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) u32 display_data_only = display & DB_DISPLAY_DATA_ONLY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) display &= ~DB_DISPLAY_DATA_ONLY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) if (!buffer) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) if ((count < 4) || (count & 0x01)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) display = DB_BYTE_DISPLAY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /* Nasty little dump buffer routine! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) while (i < count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) /* Print current offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) if (!display_data_only) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) acpi_os_printf("%8.4X: ", (base_offset + i));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /* Print 16 hex chars */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) for (j = 0; j < 16;) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) if (i + j >= count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* Dump fill spaces */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) acpi_os_printf("%*s", ((display * 2) + 1), " ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) j += display;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) switch (display) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) case DB_BYTE_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) default: /* Default is BYTE display */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) acpi_os_printf("%02X ",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) case DB_WORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ACPI_MOVE_16_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) acpi_os_printf("%04X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) case DB_DWORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) acpi_os_printf("%08X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) case DB_QWORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) acpi_os_printf("%08X", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) &buffer[(acpi_size)i + j +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) acpi_os_printf("%08X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) j += display;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * Print the ASCII equivalent characters but watch out for the bad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * unprintable ones (printable chars are 0x20 through 0x7E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) if (!display_data_only) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) acpi_os_printf(" ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) for (j = 0; j < 16; j++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) if (i + j >= count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) acpi_os_printf("\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) * Add comment characters so rest of line is ignored when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) * compiled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) if (j == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) acpi_os_printf("// ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) buf_char = buffer[(acpi_size)i + j];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) if (isprint(buf_char)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) acpi_os_printf("%c", buf_char);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) acpi_os_printf(".");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) /* Done with that line. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) acpi_os_printf("\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) i += 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) * FUNCTION: acpi_ut_debug_dump_buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) * PARAMETERS: buffer - Buffer to dump
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) * count - Amount to dump, in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) * display - BYTE, WORD, DWORD, or QWORD display:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) * DB_BYTE_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) * DB_WORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) * DB_DWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) * DB_QWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) * component_ID - Caller's component ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) * RETURN: None
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) * DESCRIPTION: Generic dump buffer in both hex and ascii.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) acpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* Only dump the buffer if tracing is enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) (component_id & acpi_dbg_layer))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) acpi_ut_dump_buffer(buffer, count, display, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #ifdef ACPI_APPLICATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) * FUNCTION: acpi_ut_dump_buffer_to_file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) * PARAMETERS: file - File descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) * buffer - Buffer to dump
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) * count - Amount to dump, in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) * display - BYTE, WORD, DWORD, or QWORD display:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) * DB_BYTE_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) * DB_WORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) * DB_DWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) * DB_QWORD_DISPLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) * base_offset - Beginning buffer offset (display only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) * RETURN: None
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) * DESCRIPTION: Generic dump buffer in both hex and ascii to a file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) acpi_ut_dump_buffer_to_file(ACPI_FILE file,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) u8 *buffer, u32 count, u32 display, u32 base_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) u32 i = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) u32 j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) u32 temp32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) u8 buf_char;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) if (!buffer) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) fprintf(file, "Null Buffer Pointer in DumpBuffer!\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) if ((count < 4) || (count & 0x01)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) display = DB_BYTE_DISPLAY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) /* Nasty little dump buffer routine! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) while (i < count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /* Print current offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) fprintf(file, "%8.4X: ", (base_offset + i));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /* Print 16 hex chars */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) for (j = 0; j < 16;) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) if (i + j >= count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) /* Dump fill spaces */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) fprintf(file, "%*s", ((display * 2) + 1), " ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) j += display;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) switch (display) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) case DB_BYTE_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) default: /* Default is BYTE display */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) fprintf(file, "%02X ",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) case DB_WORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) ACPI_MOVE_16_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) fprintf(file, "%04X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) case DB_DWORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) fprintf(file, "%08X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) case DB_QWORD_DISPLAY:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) &buffer[(acpi_size)i + j]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) fprintf(file, "%08X", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) ACPI_MOVE_32_TO_32(&temp32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) &buffer[(acpi_size)i + j +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 4]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) fprintf(file, "%08X ", temp32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) j += display;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) * Print the ASCII equivalent characters but watch out for the bad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) * unprintable ones (printable chars are 0x20 through 0x7E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) fprintf(file, " ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) for (j = 0; j < 16; j++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) if (i + j >= count) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) fprintf(file, "\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) buf_char = buffer[(acpi_size)i + j];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) if (isprint(buf_char)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) fprintf(file, "%c", buf_char);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) fprintf(file, ".");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /* Done with that line. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) fprintf(file, "\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) i += 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #endif