Linux Audio

Check our new training course

Loading...
v5.9
  1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
  2/******************************************************************************
  3 *
  4 * Module Name: utbuffer - Buffer dump routines
  5 *
  6 * Copyright (C) 2000 - 2020, Intel Corp.
  7 *
  8 *****************************************************************************/
  9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 10#include <acpi/acpi.h>
 11#include "accommon.h"
 12
 13#define _COMPONENT          ACPI_UTILITIES
 14ACPI_MODULE_NAME("utbuffer")
 15
 16/*******************************************************************************
 17 *
 18 * FUNCTION:    acpi_ut_dump_buffer
 19 *
 20 * PARAMETERS:  buffer              - Buffer to dump
 21 *              count               - Amount to dump, in bytes
 22 *              display             - BYTE, WORD, DWORD, or QWORD display:
 23 *                                      DB_BYTE_DISPLAY
 24 *                                      DB_WORD_DISPLAY
 25 *                                      DB_DWORD_DISPLAY
 26 *                                      DB_QWORD_DISPLAY
 27 *              base_offset         - Beginning buffer offset (display only)
 28 *
 29 * RETURN:      None
 30 *
 31 * DESCRIPTION: Generic dump buffer in both hex and ascii.
 32 *
 33 ******************************************************************************/
 34void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
 35{
 36	u32 i = 0;
 37	u32 j;
 38	u32 temp32;
 39	u8 buf_char;
 40	u32 display_data_only = display & DB_DISPLAY_DATA_ONLY;
 41
 42	display &= ~DB_DISPLAY_DATA_ONLY;
 43	if (!buffer) {
 44		acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n");
 45		return;
 46	}
 47
 48	if ((count < 4) || (count & 0x01)) {
 49		display = DB_BYTE_DISPLAY;
 50	}
 51
 52	/* Nasty little dump buffer routine! */
 53
 54	while (i < count) {
 55
 56		/* Print current offset */
 57
 58		if (!display_data_only) {
 59			acpi_os_printf("%8.4X: ", (base_offset + i));
 60		}
 61
 62		/* Print 16 hex chars */
 63
 64		for (j = 0; j < 16;) {
 65			if (i + j >= count) {
 66
 67				/* Dump fill spaces */
 68
 69				acpi_os_printf("%*s", ((display * 2) + 1), " ");
 70				j += display;
 71				continue;
 72			}
 73
 74			switch (display) {
 75			case DB_BYTE_DISPLAY:
 76			default:	/* Default is BYTE display */
 77
 78				acpi_os_printf("%02X ",
 79					       buffer[(acpi_size)i + j]);
 80				break;
 81
 82			case DB_WORD_DISPLAY:
 83
 84				ACPI_MOVE_16_TO_32(&temp32,
 85						   &buffer[(acpi_size)i + j]);
 86				acpi_os_printf("%04X ", temp32);
 87				break;
 88
 89			case DB_DWORD_DISPLAY:
 90
 91				ACPI_MOVE_32_TO_32(&temp32,
 92						   &buffer[(acpi_size)i + j]);
 93				acpi_os_printf("%08X ", temp32);
 94				break;
 95
 96			case DB_QWORD_DISPLAY:
 97
 98				ACPI_MOVE_32_TO_32(&temp32,
 99						   &buffer[(acpi_size)i + j]);
100				acpi_os_printf("%08X", temp32);
101
102				ACPI_MOVE_32_TO_32(&temp32,
103						   &buffer[(acpi_size)i + j +
104							   4]);
105				acpi_os_printf("%08X ", temp32);
106				break;
107			}
108
109			j += display;
110		}
111
112		/*
113		 * Print the ASCII equivalent characters but watch out for the bad
114		 * unprintable ones (printable chars are 0x20 through 0x7E)
115		 */
116		if (!display_data_only) {
117			acpi_os_printf(" ");
118			for (j = 0; j < 16; j++) {
119				if (i + j >= count) {
120					acpi_os_printf("\n");
121					return;
122				}
123
124				/*
125				 * Add comment characters so rest of line is ignored when
126				 * compiled
127				 */
128				if (j == 0) {
129					acpi_os_printf("// ");
130				}
131
132				buf_char = buffer[(acpi_size)i + j];
133				if (isprint(buf_char)) {
134					acpi_os_printf("%c", buf_char);
135				} else {
136					acpi_os_printf(".");
137				}
138			}
139
140			/* Done with that line. */
141
142			acpi_os_printf("\n");
 
 
 
143		}
 
 
 
 
144		i += 16;
145	}
146
147	return;
148}
149
150/*******************************************************************************
151 *
152 * FUNCTION:    acpi_ut_debug_dump_buffer
153 *
154 * PARAMETERS:  buffer              - Buffer to dump
155 *              count               - Amount to dump, in bytes
156 *              display             - BYTE, WORD, DWORD, or QWORD display:
157 *                                      DB_BYTE_DISPLAY
158 *                                      DB_WORD_DISPLAY
159 *                                      DB_DWORD_DISPLAY
160 *                                      DB_QWORD_DISPLAY
161 *              component_ID        - Caller's component ID
162 *
163 * RETURN:      None
164 *
165 * DESCRIPTION: Generic dump buffer in both hex and ascii.
166 *
167 ******************************************************************************/
168
169void
170acpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id)
171{
172
173	/* Only dump the buffer if tracing is enabled */
174
175	if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
176	      (component_id & acpi_dbg_layer))) {
177		return;
178	}
179
180	acpi_ut_dump_buffer(buffer, count, display, 0);
181}
182
183#ifdef ACPI_APPLICATION
184/*******************************************************************************
185 *
186 * FUNCTION:    acpi_ut_dump_buffer_to_file
187 *
188 * PARAMETERS:  file                - File descriptor
189 *              buffer              - Buffer to dump
190 *              count               - Amount to dump, in bytes
191 *              display             - BYTE, WORD, DWORD, or QWORD display:
192 *                                      DB_BYTE_DISPLAY
193 *                                      DB_WORD_DISPLAY
194 *                                      DB_DWORD_DISPLAY
195 *                                      DB_QWORD_DISPLAY
196 *              base_offset         - Beginning buffer offset (display only)
197 *
198 * RETURN:      None
199 *
200 * DESCRIPTION: Generic dump buffer in both hex and ascii to a file.
201 *
202 ******************************************************************************/
203
204void
205acpi_ut_dump_buffer_to_file(ACPI_FILE file,
206			    u8 *buffer, u32 count, u32 display, u32 base_offset)
207{
208	u32 i = 0;
209	u32 j;
210	u32 temp32;
211	u8 buf_char;
212
213	if (!buffer) {
214		fprintf(file, "Null Buffer Pointer in DumpBuffer!\n");
215		return;
216	}
217
218	if ((count < 4) || (count & 0x01)) {
219		display = DB_BYTE_DISPLAY;
220	}
221
222	/* Nasty little dump buffer routine! */
223
224	while (i < count) {
225
226		/* Print current offset */
227
228		fprintf(file, "%8.4X: ", (base_offset + i));
229
230		/* Print 16 hex chars */
231
232		for (j = 0; j < 16;) {
233			if (i + j >= count) {
234
235				/* Dump fill spaces */
236
237				fprintf(file, "%*s", ((display * 2) + 1), " ");
238				j += display;
239				continue;
240			}
241
242			switch (display) {
243			case DB_BYTE_DISPLAY:
244			default:	/* Default is BYTE display */
245
246				fprintf(file, "%02X ",
247					buffer[(acpi_size)i + j]);
248				break;
249
250			case DB_WORD_DISPLAY:
251
252				ACPI_MOVE_16_TO_32(&temp32,
253						   &buffer[(acpi_size)i + j]);
254				fprintf(file, "%04X ", temp32);
255				break;
256
257			case DB_DWORD_DISPLAY:
258
259				ACPI_MOVE_32_TO_32(&temp32,
260						   &buffer[(acpi_size)i + j]);
261				fprintf(file, "%08X ", temp32);
262				break;
263
264			case DB_QWORD_DISPLAY:
265
266				ACPI_MOVE_32_TO_32(&temp32,
267						   &buffer[(acpi_size)i + j]);
268				fprintf(file, "%08X", temp32);
269
270				ACPI_MOVE_32_TO_32(&temp32,
271						   &buffer[(acpi_size)i + j +
272							   4]);
273				fprintf(file, "%08X ", temp32);
274				break;
275			}
276
277			j += display;
278		}
279
280		/*
281		 * Print the ASCII equivalent characters but watch out for the bad
282		 * unprintable ones (printable chars are 0x20 through 0x7E)
283		 */
284		fprintf(file, " ");
285		for (j = 0; j < 16; j++) {
286			if (i + j >= count) {
287				fprintf(file, "\n");
288				return;
289			}
290
291			buf_char = buffer[(acpi_size)i + j];
292			if (isprint(buf_char)) {
293				fprintf(file, "%c", buf_char);
294			} else {
295				fprintf(file, ".");
296			}
297		}
298
299		/* Done with that line. */
300
301		fprintf(file, "\n");
302		i += 16;
303	}
304
305	return;
306}
307#endif
v3.15
 
  1/******************************************************************************
  2 *
  3 * Module Name: utbuffer - Buffer dump routines
  4 *
 
 
  5 *****************************************************************************/
  6
  7/*
  8 * Copyright (C) 2000 - 2014, Intel Corp.
  9 * All rights reserved.
 10 *
 11 * Redistribution and use in source and binary forms, with or without
 12 * modification, are permitted provided that the following conditions
 13 * are met:
 14 * 1. Redistributions of source code must retain the above copyright
 15 *    notice, this list of conditions, and the following disclaimer,
 16 *    without modification.
 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 18 *    substantially similar to the "NO WARRANTY" disclaimer below
 19 *    ("Disclaimer") and any redistribution must be conditioned upon
 20 *    including a substantially similar Disclaimer requirement for further
 21 *    binary redistribution.
 22 * 3. Neither the names of the above-listed copyright holders nor the names
 23 *    of any contributors may be used to endorse or promote products derived
 24 *    from this software without specific prior written permission.
 25 *
 26 * Alternatively, this software may be distributed under the terms of the
 27 * GNU General Public License ("GPL") version 2 as published by the Free
 28 * Software Foundation.
 29 *
 30 * NO WARRANTY
 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 41 * POSSIBILITY OF SUCH DAMAGES.
 42 */
 43
 44#include <acpi/acpi.h>
 45#include "accommon.h"
 46
 47#define _COMPONENT          ACPI_UTILITIES
 48ACPI_MODULE_NAME("utbuffer")
 49
 50/*******************************************************************************
 51 *
 52 * FUNCTION:    acpi_ut_dump_buffer
 53 *
 54 * PARAMETERS:  buffer              - Buffer to dump
 55 *              count               - Amount to dump, in bytes
 56 *              display             - BYTE, WORD, DWORD, or QWORD display:
 57 *                                      DB_BYTE_DISPLAY
 58 *                                      DB_WORD_DISPLAY
 59 *                                      DB_DWORD_DISPLAY
 60 *                                      DB_QWORD_DISPLAY
 61 *              base_offset         - Beginning buffer offset (display only)
 62 *
 63 * RETURN:      None
 64 *
 65 * DESCRIPTION: Generic dump buffer in both hex and ascii.
 66 *
 67 ******************************************************************************/
 68void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
 69{
 70	u32 i = 0;
 71	u32 j;
 72	u32 temp32;
 73	u8 buf_char;
 
 74
 
 75	if (!buffer) {
 76		acpi_os_printf("Null Buffer Pointer in DumpBuffer!\n");
 77		return;
 78	}
 79
 80	if ((count < 4) || (count & 0x01)) {
 81		display = DB_BYTE_DISPLAY;
 82	}
 83
 84	/* Nasty little dump buffer routine! */
 85
 86	while (i < count) {
 87
 88		/* Print current offset */
 89
 90		acpi_os_printf("%6.4X: ", (base_offset + i));
 
 
 91
 92		/* Print 16 hex chars */
 93
 94		for (j = 0; j < 16;) {
 95			if (i + j >= count) {
 96
 97				/* Dump fill spaces */
 98
 99				acpi_os_printf("%*s", ((display * 2) + 1), " ");
100				j += display;
101				continue;
102			}
103
104			switch (display) {
105			case DB_BYTE_DISPLAY:
106			default:	/* Default is BYTE display */
107
108				acpi_os_printf("%02X ",
109					       buffer[(acpi_size) i + j]);
110				break;
111
112			case DB_WORD_DISPLAY:
113
114				ACPI_MOVE_16_TO_32(&temp32,
115						   &buffer[(acpi_size) i + j]);
116				acpi_os_printf("%04X ", temp32);
117				break;
118
119			case DB_DWORD_DISPLAY:
120
121				ACPI_MOVE_32_TO_32(&temp32,
122						   &buffer[(acpi_size) i + j]);
123				acpi_os_printf("%08X ", temp32);
124				break;
125
126			case DB_QWORD_DISPLAY:
127
128				ACPI_MOVE_32_TO_32(&temp32,
129						   &buffer[(acpi_size) i + j]);
130				acpi_os_printf("%08X", temp32);
131
132				ACPI_MOVE_32_TO_32(&temp32,
133						   &buffer[(acpi_size) i + j +
134							   4]);
135				acpi_os_printf("%08X ", temp32);
136				break;
137			}
138
139			j += display;
140		}
141
142		/*
143		 * Print the ASCII equivalent characters but watch out for the bad
144		 * unprintable ones (printable chars are 0x20 through 0x7E)
145		 */
146		acpi_os_printf(" ");
147		for (j = 0; j < 16; j++) {
148			if (i + j >= count) {
149				acpi_os_printf("\n");
150				return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151			}
152
153			buf_char = buffer[(acpi_size) i + j];
154			if (ACPI_IS_PRINT(buf_char)) {
155				acpi_os_printf("%c", buf_char);
156			} else {
157				acpi_os_printf(".");
158			}
159		}
160
161		/* Done with that line. */
162
163		acpi_os_printf("\n");
164		i += 16;
165	}
166
167	return;
168}
169
170/*******************************************************************************
171 *
172 * FUNCTION:    acpi_ut_debug_dump_buffer
173 *
174 * PARAMETERS:  buffer              - Buffer to dump
175 *              count               - Amount to dump, in bytes
176 *              display             - BYTE, WORD, DWORD, or QWORD display:
177 *                                      DB_BYTE_DISPLAY
178 *                                      DB_WORD_DISPLAY
179 *                                      DB_DWORD_DISPLAY
180 *                                      DB_QWORD_DISPLAY
181 *              component_ID        - Caller's component ID
182 *
183 * RETURN:      None
184 *
185 * DESCRIPTION: Generic dump buffer in both hex and ascii.
186 *
187 ******************************************************************************/
188
189void
190acpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id)
191{
192
193	/* Only dump the buffer if tracing is enabled */
194
195	if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
196	      (component_id & acpi_dbg_layer))) {
197		return;
198	}
199
200	acpi_ut_dump_buffer(buffer, count, display, 0);
201}