![]() |
|
|||
File indexing completed on 2025-05-11 08:24:03
0001 /****************************************************************************** 0002 * 0003 * Module Name: utbuffer - Buffer dump routines 0004 * 0005 *****************************************************************************/ 0006 0007 /****************************************************************************** 0008 * 0009 * 1. Copyright Notice 0010 * 0011 * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. 0012 * All rights reserved. 0013 * 0014 * 2. License 0015 * 0016 * 2.1. This is your license from Intel Corp. under its intellectual property 0017 * rights. You may have additional license terms from the party that provided 0018 * you this software, covering your right to use that party's intellectual 0019 * property rights. 0020 * 0021 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 0022 * copy of the source code appearing in this file ("Covered Code") an 0023 * irrevocable, perpetual, worldwide license under Intel's copyrights in the 0024 * base code distributed originally by Intel ("Original Intel Code") to copy, 0025 * make derivatives, distribute, use and display any portion of the Covered 0026 * Code in any form, with the right to sublicense such rights; and 0027 * 0028 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 0029 * license (with the right to sublicense), under only those claims of Intel 0030 * patents that are infringed by the Original Intel Code, to make, use, sell, 0031 * offer to sell, and import the Covered Code and derivative works thereof 0032 * solely to the minimum extent necessary to exercise the above copyright 0033 * license, and in no event shall the patent license extend to any additions 0034 * to or modifications of the Original Intel Code. No other license or right 0035 * is granted directly or by implication, estoppel or otherwise; 0036 * 0037 * The above copyright and patent license is granted only if the following 0038 * conditions are met: 0039 * 0040 * 3. Conditions 0041 * 0042 * 3.1. Redistribution of Source with Rights to Further Distribute Source. 0043 * Redistribution of source code of any substantial portion of the Covered 0044 * Code or modification with rights to further distribute source must include 0045 * the above Copyright Notice, the above License, this list of Conditions, 0046 * and the following Disclaimer and Export Compliance provision. In addition, 0047 * Licensee must cause all Covered Code to which Licensee contributes to 0048 * contain a file documenting the changes Licensee made to create that Covered 0049 * Code and the date of any change. Licensee must include in that file the 0050 * documentation of any changes made by any predecessor Licensee. Licensee 0051 * must include a prominent statement that the modification is derived, 0052 * directly or indirectly, from Original Intel Code. 0053 * 0054 * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 0055 * Redistribution of source code of any substantial portion of the Covered 0056 * Code or modification without rights to further distribute source must 0057 * include the following Disclaimer and Export Compliance provision in the 0058 * documentation and/or other materials provided with distribution. In 0059 * addition, Licensee may not authorize further sublicense of source of any 0060 * portion of the Covered Code, and must include terms to the effect that the 0061 * license from Licensee to its licensee is limited to the intellectual 0062 * property embodied in the software Licensee provides to its licensee, and 0063 * not to intellectual property embodied in modifications its licensee may 0064 * make. 0065 * 0066 * 3.3. Redistribution of Executable. Redistribution in executable form of any 0067 * substantial portion of the Covered Code or modification must reproduce the 0068 * above Copyright Notice, and the following Disclaimer and Export Compliance 0069 * provision in the documentation and/or other materials provided with the 0070 * distribution. 0071 * 0072 * 3.4. Intel retains all right, title, and interest in and to the Original 0073 * Intel Code. 0074 * 0075 * 3.5. Neither the name Intel nor any other trademark owned or controlled by 0076 * Intel shall be used in advertising or otherwise to promote the sale, use or 0077 * other dealings in products derived from or relating to the Covered Code 0078 * without prior written authorization from Intel. 0079 * 0080 * 4. Disclaimer and Export Compliance 0081 * 0082 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 0083 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 0084 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 0085 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 0086 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 0087 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 0088 * PARTICULAR PURPOSE. 0089 * 0090 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 0091 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 0092 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 0093 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 0094 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 0095 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 0096 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 0097 * LIMITED REMEDY. 0098 * 0099 * 4.3. Licensee shall not export, either directly or indirectly, any of this 0100 * software or system incorporating such software without first obtaining any 0101 * required license or other approval from the U. S. Department of Commerce or 0102 * any other agency or department of the United States Government. In the 0103 * event Licensee exports any such software from the United States or 0104 * re-exports any such software from a foreign destination, Licensee shall 0105 * ensure that the distribution and export/re-export of the software is in 0106 * compliance with all laws, regulations, orders, or other restrictions of the 0107 * U.S. Export Administration Regulations. Licensee agrees that neither it nor 0108 * any of its subsidiaries will export/re-export any technical data, process, 0109 * software, or service, directly or indirectly, to any country for which the 0110 * United States government or any agency thereof requires an export license, 0111 * other governmental approval, or letter of assurance, without first obtaining 0112 * such license, approval or letter. 0113 * 0114 ***************************************************************************** 0115 * 0116 * Alternatively, you may choose to be licensed under the terms of the 0117 * following license: 0118 * 0119 * Redistribution and use in source and binary forms, with or without 0120 * modification, are permitted provided that the following conditions 0121 * are met: 0122 * 1. Redistributions of source code must retain the above copyright 0123 * notice, this list of conditions, and the following disclaimer, 0124 * without modification. 0125 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 0126 * substantially similar to the "NO WARRANTY" disclaimer below 0127 * ("Disclaimer") and any redistribution must be conditioned upon 0128 * including a substantially similar Disclaimer requirement for further 0129 * binary redistribution. 0130 * 3. Neither the names of the above-listed copyright holders nor the names 0131 * of any contributors may be used to endorse or promote products derived 0132 * from this software without specific prior written permission. 0133 * 0134 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 0135 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 0136 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 0137 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 0138 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 0139 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 0140 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 0141 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 0142 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 0143 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 0144 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0145 * 0146 * Alternatively, you may choose to be licensed under the terms of the 0147 * GNU General Public License ("GPL") version 2 as published by the Free 0148 * Software Foundation. 0149 * 0150 *****************************************************************************/ 0151 0152 #include "acpi.h" 0153 #include "accommon.h" 0154 0155 #define _COMPONENT ACPI_UTILITIES 0156 ACPI_MODULE_NAME ("utbuffer") 0157 0158 0159 /******************************************************************************* 0160 * 0161 * FUNCTION: AcpiUtDumpBuffer 0162 * 0163 * PARAMETERS: Buffer - Buffer to dump 0164 * Count - Amount to dump, in bytes 0165 * Display - BYTE, WORD, DWORD, or QWORD display: 0166 * DB_BYTE_DISPLAY 0167 * DB_WORD_DISPLAY 0168 * DB_DWORD_DISPLAY 0169 * DB_QWORD_DISPLAY 0170 * BaseOffset - Beginning buffer offset (display only) 0171 * 0172 * RETURN: None 0173 * 0174 * DESCRIPTION: Generic dump buffer in both hex and ascii. 0175 * 0176 ******************************************************************************/ 0177 0178 void 0179 AcpiUtDumpBuffer ( 0180 UINT8 *Buffer, 0181 UINT32 Count, 0182 UINT32 Display, 0183 UINT32 BaseOffset) 0184 { 0185 UINT32 i = 0; 0186 UINT32 j; 0187 UINT32 Temp32; 0188 UINT8 BufChar; 0189 UINT32 DisplayDataOnly = Display & DB_DISPLAY_DATA_ONLY; 0190 0191 0192 Display &= ~DB_DISPLAY_DATA_ONLY; 0193 if (!Buffer) 0194 { 0195 AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); 0196 return; 0197 } 0198 0199 if ((Count < 4) || (Count & 0x01)) 0200 { 0201 Display = DB_BYTE_DISPLAY; 0202 } 0203 0204 /* Nasty little dump buffer routine! */ 0205 0206 while (i < Count) 0207 { 0208 /* Print current offset */ 0209 0210 if (!DisplayDataOnly) 0211 { 0212 AcpiOsPrintf ("%8.4X: ", (BaseOffset + i)); 0213 } 0214 0215 /* Print 16 hex chars */ 0216 0217 for (j = 0; j < 16;) 0218 { 0219 if (i + j >= Count) 0220 { 0221 /* Dump fill spaces */ 0222 0223 AcpiOsPrintf ("%*s", ((Display * 2) + 1), " "); 0224 j += Display; 0225 continue; 0226 } 0227 0228 switch (Display) 0229 { 0230 case DB_BYTE_DISPLAY: 0231 default: /* Default is BYTE display */ 0232 0233 AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]); 0234 break; 0235 0236 case DB_WORD_DISPLAY: 0237 0238 ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0239 AcpiOsPrintf ("%04X ", Temp32); 0240 break; 0241 0242 case DB_DWORD_DISPLAY: 0243 0244 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0245 AcpiOsPrintf ("%08X ", Temp32); 0246 break; 0247 0248 case DB_QWORD_DISPLAY: 0249 0250 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0251 AcpiOsPrintf ("%08X", Temp32); 0252 0253 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); 0254 AcpiOsPrintf ("%08X ", Temp32); 0255 break; 0256 } 0257 0258 j += Display; 0259 } 0260 0261 /* 0262 * Print the ASCII equivalent characters but watch out for the bad 0263 * unprintable ones (printable chars are 0x20 through 0x7E) 0264 */ 0265 if (!DisplayDataOnly) 0266 { 0267 AcpiOsPrintf (" "); 0268 for (j = 0; j < 16; j++) 0269 { 0270 if (i + j >= Count) 0271 { 0272 AcpiOsPrintf ("\n"); 0273 return; 0274 } 0275 0276 /* 0277 * Add comment characters so rest of line is ignored when 0278 * compiled 0279 */ 0280 if (j == 0) 0281 { 0282 AcpiOsPrintf ("// "); 0283 } 0284 0285 BufChar = Buffer[(ACPI_SIZE) i + j]; 0286 if (isprint (BufChar)) 0287 { 0288 AcpiOsPrintf ("%c", BufChar); 0289 } 0290 else 0291 { 0292 AcpiOsPrintf ("."); 0293 } 0294 } 0295 0296 /* Done with that line. */ 0297 0298 AcpiOsPrintf ("\n"); 0299 } 0300 i += 16; 0301 } 0302 0303 return; 0304 } 0305 0306 0307 /******************************************************************************* 0308 * 0309 * FUNCTION: AcpiUtDebugDumpBuffer 0310 * 0311 * PARAMETERS: Buffer - Buffer to dump 0312 * Count - Amount to dump, in bytes 0313 * Display - BYTE, WORD, DWORD, or QWORD display: 0314 * DB_BYTE_DISPLAY 0315 * DB_WORD_DISPLAY 0316 * DB_DWORD_DISPLAY 0317 * DB_QWORD_DISPLAY 0318 * ComponentID - Caller's component ID 0319 * 0320 * RETURN: None 0321 * 0322 * DESCRIPTION: Generic dump buffer in both hex and ascii. 0323 * 0324 ******************************************************************************/ 0325 0326 void 0327 AcpiUtDebugDumpBuffer ( 0328 UINT8 *Buffer, 0329 UINT32 Count, 0330 UINT32 Display, 0331 UINT32 ComponentId) 0332 { 0333 0334 /* Only dump the buffer if tracing is enabled */ 0335 0336 if (!((ACPI_LV_TABLES & AcpiDbgLevel) && 0337 (ComponentId & AcpiDbgLayer))) 0338 { 0339 return; 0340 } 0341 0342 AcpiUtDumpBuffer (Buffer, Count, Display, 0); 0343 } 0344 0345 0346 #ifdef ACPI_APPLICATION 0347 /******************************************************************************* 0348 * 0349 * FUNCTION: AcpiUtDumpBufferToFile 0350 * 0351 * PARAMETERS: File - File descriptor 0352 * Buffer - Buffer to dump 0353 * Count - Amount to dump, in bytes 0354 * Display - BYTE, WORD, DWORD, or QWORD display: 0355 * DB_BYTE_DISPLAY 0356 * DB_WORD_DISPLAY 0357 * DB_DWORD_DISPLAY 0358 * DB_QWORD_DISPLAY 0359 * BaseOffset - Beginning buffer offset (display only) 0360 * 0361 * RETURN: None 0362 * 0363 * DESCRIPTION: Generic dump buffer in both hex and ascii to a file. 0364 * 0365 ******************************************************************************/ 0366 0367 void 0368 AcpiUtDumpBufferToFile ( 0369 ACPI_FILE File, 0370 UINT8 *Buffer, 0371 UINT32 Count, 0372 UINT32 Display, 0373 UINT32 BaseOffset) 0374 { 0375 UINT32 i = 0; 0376 UINT32 j; 0377 UINT32 Temp32; 0378 UINT8 BufChar; 0379 0380 0381 if (!Buffer) 0382 { 0383 fprintf (File, "Null Buffer Pointer in DumpBuffer!\n"); 0384 return; 0385 } 0386 0387 if ((Count < 4) || (Count & 0x01)) 0388 { 0389 Display = DB_BYTE_DISPLAY; 0390 } 0391 0392 /* Nasty little dump buffer routine! */ 0393 0394 while (i < Count) 0395 { 0396 /* Print current offset */ 0397 0398 fprintf (File, "%8.4X: ", (BaseOffset + i)); 0399 0400 /* Print 16 hex chars */ 0401 0402 for (j = 0; j < 16;) 0403 { 0404 if (i + j >= Count) 0405 { 0406 /* Dump fill spaces */ 0407 0408 fprintf (File, "%*s", ((Display * 2) + 1), " "); 0409 j += Display; 0410 continue; 0411 } 0412 0413 switch (Display) 0414 { 0415 case DB_BYTE_DISPLAY: 0416 default: /* Default is BYTE display */ 0417 0418 fprintf (File, "%02X ", Buffer[(ACPI_SIZE) i + j]); 0419 break; 0420 0421 case DB_WORD_DISPLAY: 0422 0423 ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0424 fprintf (File, "%04X ", Temp32); 0425 break; 0426 0427 case DB_DWORD_DISPLAY: 0428 0429 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0430 fprintf (File, "%08X ", Temp32); 0431 break; 0432 0433 case DB_QWORD_DISPLAY: 0434 0435 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 0436 fprintf (File, "%08X", Temp32); 0437 0438 ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); 0439 fprintf (File, "%08X ", Temp32); 0440 break; 0441 } 0442 0443 j += Display; 0444 } 0445 0446 /* 0447 * Print the ASCII equivalent characters but watch out for the bad 0448 * unprintable ones (printable chars are 0x20 through 0x7E) 0449 */ 0450 fprintf (File, " "); 0451 for (j = 0; j < 16; j++) 0452 { 0453 if (i + j >= Count) 0454 { 0455 fprintf (File, "\n"); 0456 return; 0457 } 0458 0459 BufChar = Buffer[(ACPI_SIZE) i + j]; 0460 if (isprint (BufChar)) 0461 { 0462 fprintf (File, "%c", BufChar); 0463 } 0464 else 0465 { 0466 fprintf (File, "."); 0467 } 0468 } 0469 0470 /* Done with that line. */ 0471 0472 fprintf (File, "\n"); 0473 i += 16; 0474 } 0475 0476 return; 0477 } 0478 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |