]> Pileus Git - ~andy/linux/blob - drivers/acpi/acpica/utbuffer.c
net: mvneta: use devm_ioremap_resource() instead of of_iomap()
[~andy/linux] / drivers / acpi / acpica / utbuffer.c
1 /******************************************************************************
2  *
3  * Module Name: utbuffer - Buffer dump routines
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2013, 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
48 ACPI_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  ******************************************************************************/
68 void 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
189 void
190 acpi_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 }