utbuffer.c revision 250838
1285242Sachim/****************************************************************************** 2285242Sachim * 3285242Sachim * Module Name: utbuffer - Buffer dump routines 4285242Sachim * 5285242Sachim *****************************************************************************/ 6285242Sachim 7285242Sachim/* 8285242Sachim * Copyright (C) 2000 - 2013, Intel Corp. 9285242Sachim * All rights reserved. 10285242Sachim * 11285242Sachim * Redistribution and use in source and binary forms, with or without 12285242Sachim * modification, are permitted provided that the following conditions 13285242Sachim * are met: 14285242Sachim * 1. Redistributions of source code must retain the above copyright 15285242Sachim * notice, this list of conditions, and the following disclaimer, 16285242Sachim * without modification. 17285242Sachim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18285242Sachim * substantially similar to the "NO WARRANTY" disclaimer below 19285242Sachim * ("Disclaimer") and any redistribution must be conditioned upon 20285242Sachim * including a substantially similar Disclaimer requirement for further 21285242Sachim * binary redistribution. 22285242Sachim * 3. Neither the names of the above-listed copyright holders nor the names 23285242Sachim * of any contributors may be used to endorse or promote products derived 24285242Sachim * from this software without specific prior written permission. 25285242Sachim * 26285242Sachim * Alternatively, this software may be distributed under the terms of the 27285242Sachim * GNU General Public License ("GPL") version 2 as published by the Free 28285242Sachim * Software Foundation. 29285242Sachim * 30285242Sachim * NO WARRANTY 31285242Sachim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32285242Sachim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33285242Sachim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34285242Sachim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35285242Sachim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36285242Sachim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37285242Sachim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38285242Sachim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39285242Sachim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40285242Sachim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41285242Sachim * POSSIBILITY OF SUCH DAMAGES. 42285242Sachim */ 43285242Sachim 44285242Sachim#define __UTBUFFER_C__ 45285242Sachim 46285242Sachim#include <contrib/dev/acpica/include/acpi.h> 47285242Sachim#include <contrib/dev/acpica/include/accommon.h> 48285242Sachim 49285242Sachim#define _COMPONENT ACPI_UTILITIES 50285242Sachim ACPI_MODULE_NAME ("utbuffer") 51285242Sachim 52285242Sachim 53285242Sachim/******************************************************************************* 54285242Sachim * 55285242Sachim * FUNCTION: AcpiUtDumpBuffer 56285242Sachim * 57285242Sachim * PARAMETERS: Buffer - Buffer to dump 58285242Sachim * Count - Amount to dump, in bytes 59285242Sachim * Display - BYTE, WORD, DWORD, or QWORD display: 60285242Sachim * DB_BYTE_DISPLAY 61285242Sachim * DB_WORD_DISPLAY 62285242Sachim * DB_DWORD_DISPLAY 63285242Sachim * DB_QWORD_DISPLAY 64285242Sachim * BaseOffset - Beginning buffer offset (display only) 65285242Sachim * 66285242Sachim * RETURN: None 67285242Sachim * 68285242Sachim * DESCRIPTION: Generic dump buffer in both hex and ascii. 69285242Sachim * 70285242Sachim ******************************************************************************/ 71285242Sachim 72285242Sachimvoid 73285242SachimAcpiUtDumpBuffer ( 74285242Sachim UINT8 *Buffer, 75285242Sachim UINT32 Count, 76285242Sachim UINT32 Display, 77285242Sachim UINT32 BaseOffset) 78285242Sachim{ 79285242Sachim UINT32 i = 0; 80285242Sachim UINT32 j; 81285242Sachim UINT32 Temp32; 82285242Sachim UINT8 BufChar; 83285242Sachim 84285242Sachim 85285242Sachim if (!Buffer) 86285242Sachim { 87285242Sachim AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); 88285242Sachim return; 89285242Sachim } 90285242Sachim 91285242Sachim if ((Count < 4) || (Count & 0x01)) 92285242Sachim { 93285242Sachim Display = DB_BYTE_DISPLAY; 94285242Sachim } 95285242Sachim 96285242Sachim /* Nasty little dump buffer routine! */ 97285242Sachim 98285242Sachim while (i < Count) 99285242Sachim { 100285242Sachim /* Print current offset */ 101285242Sachim 102285242Sachim AcpiOsPrintf ("%6.4X: ", (BaseOffset + i)); 103285242Sachim 104285242Sachim /* Print 16 hex chars */ 105285242Sachim 106285242Sachim for (j = 0; j < 16;) 107285242Sachim { 108285242Sachim if (i + j >= Count) 109285242Sachim { 110285242Sachim /* Dump fill spaces */ 111285242Sachim 112285242Sachim AcpiOsPrintf ("%*s", ((Display * 2) + 1), " "); 113285242Sachim j += Display; 114285242Sachim continue; 115285242Sachim } 116285242Sachim 117285242Sachim switch (Display) 118285242Sachim { 119285242Sachim case DB_BYTE_DISPLAY: 120285242Sachim default: /* Default is BYTE display */ 121285242Sachim 122285242Sachim AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]); 123285242Sachim break; 124285242Sachim 125285242Sachim case DB_WORD_DISPLAY: 126285242Sachim 127285242Sachim ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 128285242Sachim AcpiOsPrintf ("%04X ", Temp32); 129285242Sachim break; 130285242Sachim 131285242Sachim case DB_DWORD_DISPLAY: 132285242Sachim 133285242Sachim ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 134285242Sachim AcpiOsPrintf ("%08X ", Temp32); 135285242Sachim break; 136285242Sachim 137285242Sachim case DB_QWORD_DISPLAY: 138285242Sachim 139285242Sachim ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); 140285242Sachim AcpiOsPrintf ("%08X", Temp32); 141285242Sachim 142285242Sachim ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); 143285242Sachim AcpiOsPrintf ("%08X ", Temp32); 144285242Sachim break; 145285242Sachim } 146285242Sachim 147285242Sachim j += Display; 148285242Sachim } 149285242Sachim 150285242Sachim /* 151285242Sachim * Print the ASCII equivalent characters but watch out for the bad 152285242Sachim * unprintable ones (printable chars are 0x20 through 0x7E) 153285242Sachim */ 154285242Sachim AcpiOsPrintf (" "); 155285242Sachim for (j = 0; j < 16; j++) 156285242Sachim { 157285242Sachim if (i + j >= Count) 158285242Sachim { 159285242Sachim AcpiOsPrintf ("\n"); 160285242Sachim return; 161285242Sachim } 162285242Sachim 163285242Sachim BufChar = Buffer[(ACPI_SIZE) i + j]; 164285242Sachim if (ACPI_IS_PRINT (BufChar)) 165285242Sachim { 166285242Sachim AcpiOsPrintf ("%c", BufChar); 167285242Sachim } 168285242Sachim else 169285242Sachim { 170285242Sachim AcpiOsPrintf ("."); 171285242Sachim } 172285242Sachim } 173285242Sachim 174285242Sachim /* Done with that line. */ 175285242Sachim 176285242Sachim AcpiOsPrintf ("\n"); 177285242Sachim i += 16; 178285242Sachim } 179285242Sachim 180285242Sachim return; 181285242Sachim} 182285242Sachim 183285242Sachim 184285242Sachim/******************************************************************************* 185285242Sachim * 186285242Sachim * FUNCTION: AcpiUtDebugDumpBuffer 187285242Sachim * 188285242Sachim * PARAMETERS: Buffer - Buffer to dump 189285242Sachim * Count - Amount to dump, in bytes 190285242Sachim * Display - BYTE, WORD, DWORD, or QWORD display: 191285242Sachim * DB_BYTE_DISPLAY 192285242Sachim * DB_WORD_DISPLAY 193285242Sachim * DB_DWORD_DISPLAY 194285242Sachim * DB_QWORD_DISPLAY 195285242Sachim * ComponentID - Caller's component ID 196285242Sachim * 197285242Sachim * RETURN: None 198285242Sachim * 199285242Sachim * DESCRIPTION: Generic dump buffer in both hex and ascii. 200285242Sachim * 201285242Sachim ******************************************************************************/ 202285242Sachim 203285242Sachimvoid 204285242SachimAcpiUtDebugDumpBuffer ( 205285242Sachim UINT8 *Buffer, 206285242Sachim UINT32 Count, 207285242Sachim UINT32 Display, 208285242Sachim UINT32 ComponentId) 209285242Sachim{ 210285242Sachim 211285242Sachim /* Only dump the buffer if tracing is enabled */ 212285242Sachim 213285242Sachim if (!((ACPI_LV_TABLES & AcpiDbgLevel) && 214285242Sachim (ComponentId & AcpiDbgLayer))) 215285242Sachim { 216285242Sachim return; 217285242Sachim } 218285242Sachim 219285242Sachim AcpiUtDumpBuffer (Buffer, Count, Display, 0); 220285242Sachim} 221285242Sachim