1244971Sjkim/******************************************************************************* 2244971Sjkim * 3244971Sjkim * Module Name: dbconvert - debugger miscellaneous conversion routines 4244971Sjkim * 5244971Sjkim ******************************************************************************/ 6244971Sjkim 7244971Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9244971Sjkim * All rights reserved. 10244971Sjkim * 11244971Sjkim * Redistribution and use in source and binary forms, with or without 12244971Sjkim * modification, are permitted provided that the following conditions 13244971Sjkim * are met: 14244971Sjkim * 1. Redistributions of source code must retain the above copyright 15244971Sjkim * notice, this list of conditions, and the following disclaimer, 16244971Sjkim * without modification. 17244971Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18244971Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19244971Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20244971Sjkim * including a substantially similar Disclaimer requirement for further 21244971Sjkim * binary redistribution. 22244971Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23244971Sjkim * of any contributors may be used to endorse or promote products derived 24244971Sjkim * from this software without specific prior written permission. 25244971Sjkim * 26244971Sjkim * Alternatively, this software may be distributed under the terms of the 27244971Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28244971Sjkim * Software Foundation. 29244971Sjkim * 30244971Sjkim * NO WARRANTY 31244971Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32244971Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33244971Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34244971Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35244971Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36244971Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37244971Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38244971Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39244971Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40244971Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41244971Sjkim * POSSIBILITY OF SUCH DAMAGES. 42244971Sjkim */ 43244971Sjkim 44245582Sjkim#include <contrib/dev/acpica/include/acpi.h> 45245582Sjkim#include <contrib/dev/acpica/include/accommon.h> 46245582Sjkim#include <contrib/dev/acpica/include/acdebug.h> 47244971Sjkim 48244971Sjkim 49244971Sjkim#define _COMPONENT ACPI_CA_DEBUGGER 50244971Sjkim ACPI_MODULE_NAME ("dbconvert") 51244971Sjkim 52244971Sjkim 53244971Sjkim#define DB_DEFAULT_PKG_ELEMENTS 33 54244971Sjkim 55244971Sjkim 56244971Sjkim/******************************************************************************* 57244971Sjkim * 58244971Sjkim * FUNCTION: AcpiDbHexCharToValue 59244971Sjkim * 60244971Sjkim * PARAMETERS: HexChar - Ascii Hex digit, 0-9|a-f|A-F 61244971Sjkim * ReturnValue - Where the converted value is returned 62244971Sjkim * 63244971Sjkim * RETURN: Status 64244971Sjkim * 65244971Sjkim * DESCRIPTION: Convert a single hex character to a 4-bit number (0-16). 66244971Sjkim * 67244971Sjkim ******************************************************************************/ 68244971Sjkim 69244971SjkimACPI_STATUS 70244971SjkimAcpiDbHexCharToValue ( 71244971Sjkim int HexChar, 72244971Sjkim UINT8 *ReturnValue) 73244971Sjkim{ 74244971Sjkim UINT8 Value; 75244971Sjkim 76244971Sjkim 77244971Sjkim /* Digit must be ascii [0-9a-fA-F] */ 78244971Sjkim 79306536Sjkim if (!isxdigit (HexChar)) 80244971Sjkim { 81244971Sjkim return (AE_BAD_HEX_CONSTANT); 82244971Sjkim } 83244971Sjkim 84244971Sjkim if (HexChar <= 0x39) 85244971Sjkim { 86244971Sjkim Value = (UINT8) (HexChar - 0x30); 87244971Sjkim } 88244971Sjkim else 89244971Sjkim { 90306536Sjkim Value = (UINT8) (toupper (HexChar) - 0x37); 91244971Sjkim } 92244971Sjkim 93244971Sjkim *ReturnValue = Value; 94244971Sjkim return (AE_OK); 95244971Sjkim} 96244971Sjkim 97244971Sjkim 98244971Sjkim/******************************************************************************* 99244971Sjkim * 100244971Sjkim * FUNCTION: AcpiDbHexByteToBinary 101244971Sjkim * 102244971Sjkim * PARAMETERS: HexByte - Double hex digit (0x00 - 0xFF) in format: 103244971Sjkim * HiByte then LoByte. 104244971Sjkim * ReturnValue - Where the converted value is returned 105244971Sjkim * 106244971Sjkim * RETURN: Status 107244971Sjkim * 108244971Sjkim * DESCRIPTION: Convert two hex characters to an 8 bit number (0 - 255). 109244971Sjkim * 110244971Sjkim ******************************************************************************/ 111244971Sjkim 112244971Sjkimstatic ACPI_STATUS 113244971SjkimAcpiDbHexByteToBinary ( 114244971Sjkim char *HexByte, 115244971Sjkim UINT8 *ReturnValue) 116244971Sjkim{ 117244971Sjkim UINT8 Local0; 118244971Sjkim UINT8 Local1; 119244971Sjkim ACPI_STATUS Status; 120244971Sjkim 121244971Sjkim 122244971Sjkim /* High byte */ 123244971Sjkim 124244971Sjkim Status = AcpiDbHexCharToValue (HexByte[0], &Local0); 125244971Sjkim if (ACPI_FAILURE (Status)) 126244971Sjkim { 127244971Sjkim return (Status); 128244971Sjkim } 129244971Sjkim 130244971Sjkim /* Low byte */ 131244971Sjkim 132244971Sjkim Status = AcpiDbHexCharToValue (HexByte[1], &Local1); 133244971Sjkim if (ACPI_FAILURE (Status)) 134244971Sjkim { 135244971Sjkim return (Status); 136244971Sjkim } 137244971Sjkim 138244971Sjkim *ReturnValue = (UINT8) ((Local0 << 4) | Local1); 139244971Sjkim return (AE_OK); 140244971Sjkim} 141244971Sjkim 142244971Sjkim 143244971Sjkim/******************************************************************************* 144244971Sjkim * 145244971Sjkim * FUNCTION: AcpiDbConvertToBuffer 146244971Sjkim * 147244971Sjkim * PARAMETERS: String - Input string to be converted 148244971Sjkim * Object - Where the buffer object is returned 149244971Sjkim * 150244971Sjkim * RETURN: Status 151244971Sjkim * 152244971Sjkim * DESCRIPTION: Convert a string to a buffer object. String is treated a list 153244971Sjkim * of buffer elements, each separated by a space or comma. 154244971Sjkim * 155244971Sjkim ******************************************************************************/ 156244971Sjkim 157244971Sjkimstatic ACPI_STATUS 158244971SjkimAcpiDbConvertToBuffer ( 159244971Sjkim char *String, 160244971Sjkim ACPI_OBJECT *Object) 161244971Sjkim{ 162244971Sjkim UINT32 i; 163244971Sjkim UINT32 j; 164244971Sjkim UINT32 Length; 165244971Sjkim UINT8 *Buffer; 166244971Sjkim ACPI_STATUS Status; 167244971Sjkim 168244971Sjkim 169244971Sjkim /* Generate the final buffer length */ 170244971Sjkim 171244971Sjkim for (i = 0, Length = 0; String[i];) 172244971Sjkim { 173244971Sjkim i+=2; 174244971Sjkim Length++; 175244971Sjkim 176244971Sjkim while (String[i] && 177244971Sjkim ((String[i] == ',') || (String[i] == ' '))) 178244971Sjkim { 179244971Sjkim i++; 180244971Sjkim } 181244971Sjkim } 182244971Sjkim 183244971Sjkim Buffer = ACPI_ALLOCATE (Length); 184244971Sjkim if (!Buffer) 185244971Sjkim { 186244971Sjkim return (AE_NO_MEMORY); 187244971Sjkim } 188244971Sjkim 189244971Sjkim /* Convert the command line bytes to the buffer */ 190244971Sjkim 191244971Sjkim for (i = 0, j = 0; String[i];) 192244971Sjkim { 193244971Sjkim Status = AcpiDbHexByteToBinary (&String[i], &Buffer[j]); 194244971Sjkim if (ACPI_FAILURE (Status)) 195244971Sjkim { 196244971Sjkim ACPI_FREE (Buffer); 197244971Sjkim return (Status); 198244971Sjkim } 199244971Sjkim 200244971Sjkim j++; 201306536Sjkim i += 2; 202244971Sjkim while (String[i] && 203244971Sjkim ((String[i] == ',') || (String[i] == ' '))) 204244971Sjkim { 205244971Sjkim i++; 206244971Sjkim } 207244971Sjkim } 208244971Sjkim 209244971Sjkim Object->Type = ACPI_TYPE_BUFFER; 210244971Sjkim Object->Buffer.Pointer = Buffer; 211244971Sjkim Object->Buffer.Length = Length; 212244971Sjkim return (AE_OK); 213244971Sjkim} 214244971Sjkim 215244971Sjkim 216244971Sjkim/******************************************************************************* 217244971Sjkim * 218244971Sjkim * FUNCTION: AcpiDbConvertToPackage 219244971Sjkim * 220244971Sjkim * PARAMETERS: String - Input string to be converted 221244971Sjkim * Object - Where the package object is returned 222244971Sjkim * 223244971Sjkim * RETURN: Status 224244971Sjkim * 225244971Sjkim * DESCRIPTION: Convert a string to a package object. Handles nested packages 226244971Sjkim * via recursion with AcpiDbConvertToObject. 227244971Sjkim * 228244971Sjkim ******************************************************************************/ 229244971Sjkim 230244971SjkimACPI_STATUS 231244971SjkimAcpiDbConvertToPackage ( 232244971Sjkim char *String, 233244971Sjkim ACPI_OBJECT *Object) 234244971Sjkim{ 235244971Sjkim char *This; 236244971Sjkim char *Next; 237244971Sjkim UINT32 i; 238244971Sjkim ACPI_OBJECT_TYPE Type; 239244971Sjkim ACPI_OBJECT *Elements; 240244971Sjkim ACPI_STATUS Status; 241244971Sjkim 242244971Sjkim 243244971Sjkim Elements = ACPI_ALLOCATE_ZEROED ( 244244971Sjkim DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT)); 245244971Sjkim 246244971Sjkim This = String; 247244971Sjkim for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) 248244971Sjkim { 249244971Sjkim This = AcpiDbGetNextToken (This, &Next, &Type); 250244971Sjkim if (!This) 251244971Sjkim { 252244971Sjkim break; 253244971Sjkim } 254244971Sjkim 255244971Sjkim /* Recursive call to convert each package element */ 256244971Sjkim 257244971Sjkim Status = AcpiDbConvertToObject (Type, This, &Elements[i]); 258244971Sjkim if (ACPI_FAILURE (Status)) 259244971Sjkim { 260244971Sjkim AcpiDbDeleteObjects (i + 1, Elements); 261244971Sjkim ACPI_FREE (Elements); 262244971Sjkim return (Status); 263244971Sjkim } 264244971Sjkim 265244971Sjkim This = Next; 266244971Sjkim } 267244971Sjkim 268244971Sjkim Object->Type = ACPI_TYPE_PACKAGE; 269244971Sjkim Object->Package.Count = i; 270244971Sjkim Object->Package.Elements = Elements; 271244971Sjkim return (AE_OK); 272244971Sjkim} 273244971Sjkim 274244971Sjkim 275244971Sjkim/******************************************************************************* 276244971Sjkim * 277244971Sjkim * FUNCTION: AcpiDbConvertToObject 278244971Sjkim * 279244971Sjkim * PARAMETERS: Type - Object type as determined by parser 280244971Sjkim * String - Input string to be converted 281244971Sjkim * Object - Where the new object is returned 282244971Sjkim * 283244971Sjkim * RETURN: Status 284244971Sjkim * 285244971Sjkim * DESCRIPTION: Convert a typed and tokenized string to an ACPI_OBJECT. Typing: 286244971Sjkim * 1) String objects were surrounded by quotes. 287244971Sjkim * 2) Buffer objects were surrounded by parentheses. 288244971Sjkim * 3) Package objects were surrounded by brackets "[]". 289244971Sjkim * 4) All standalone tokens are treated as integers. 290244971Sjkim * 291244971Sjkim ******************************************************************************/ 292244971Sjkim 293244971SjkimACPI_STATUS 294244971SjkimAcpiDbConvertToObject ( 295244971Sjkim ACPI_OBJECT_TYPE Type, 296244971Sjkim char *String, 297244971Sjkim ACPI_OBJECT *Object) 298244971Sjkim{ 299244971Sjkim ACPI_STATUS Status = AE_OK; 300244971Sjkim 301244971Sjkim 302244971Sjkim switch (Type) 303244971Sjkim { 304244971Sjkim case ACPI_TYPE_STRING: 305250838Sjkim 306244971Sjkim Object->Type = ACPI_TYPE_STRING; 307244971Sjkim Object->String.Pointer = String; 308306536Sjkim Object->String.Length = (UINT32) strlen (String); 309244971Sjkim break; 310244971Sjkim 311244971Sjkim case ACPI_TYPE_BUFFER: 312250838Sjkim 313244971Sjkim Status = AcpiDbConvertToBuffer (String, Object); 314244971Sjkim break; 315244971Sjkim 316244971Sjkim case ACPI_TYPE_PACKAGE: 317250838Sjkim 318244971Sjkim Status = AcpiDbConvertToPackage (String, Object); 319244971Sjkim break; 320244971Sjkim 321244971Sjkim default: 322250838Sjkim 323244971Sjkim Object->Type = ACPI_TYPE_INTEGER; 324306536Sjkim Status = AcpiUtStrtoul64 (String, 16, AcpiGbl_IntegerByteWidth, 325306536Sjkim &Object->Integer.Value); 326244971Sjkim break; 327244971Sjkim } 328244971Sjkim 329244971Sjkim return (Status); 330244971Sjkim} 331244971Sjkim 332244971Sjkim 333244971Sjkim/******************************************************************************* 334244971Sjkim * 335244971Sjkim * FUNCTION: AcpiDbEncodePldBuffer 336244971Sjkim * 337244971Sjkim * PARAMETERS: PldInfo - _PLD buffer struct (Using local struct) 338244971Sjkim * 339244971Sjkim * RETURN: Encode _PLD buffer suitable for return value from _PLD 340244971Sjkim * 341244971Sjkim * DESCRIPTION: Bit-packs a _PLD buffer struct. Used to test the _PLD macros 342244971Sjkim * 343244971Sjkim ******************************************************************************/ 344244971Sjkim 345244971SjkimUINT8 * 346244971SjkimAcpiDbEncodePldBuffer ( 347244971Sjkim ACPI_PLD_INFO *PldInfo) 348244971Sjkim{ 349244971Sjkim UINT32 *Buffer; 350244971Sjkim UINT32 Dword; 351244971Sjkim 352244971Sjkim 353244971Sjkim Buffer = ACPI_ALLOCATE_ZEROED (ACPI_PLD_BUFFER_SIZE); 354244971Sjkim if (!Buffer) 355244971Sjkim { 356244971Sjkim return (NULL); 357244971Sjkim } 358244971Sjkim 359244971Sjkim /* First 32 bits */ 360244971Sjkim 361244971Sjkim Dword = 0; 362244971Sjkim ACPI_PLD_SET_REVISION (&Dword, PldInfo->Revision); 363244971Sjkim ACPI_PLD_SET_IGNORE_COLOR (&Dword, PldInfo->IgnoreColor); 364281075Sdim ACPI_PLD_SET_RED (&Dword, PldInfo->Red); 365281075Sdim ACPI_PLD_SET_GREEN (&Dword, PldInfo->Green); 366281075Sdim ACPI_PLD_SET_BLUE (&Dword, PldInfo->Blue); 367244971Sjkim ACPI_MOVE_32_TO_32 (&Buffer[0], &Dword); 368244971Sjkim 369244971Sjkim /* Second 32 bits */ 370244971Sjkim 371244971Sjkim Dword = 0; 372244971Sjkim ACPI_PLD_SET_WIDTH (&Dword, PldInfo->Width); 373244971Sjkim ACPI_PLD_SET_HEIGHT (&Dword, PldInfo->Height); 374244971Sjkim ACPI_MOVE_32_TO_32 (&Buffer[1], &Dword); 375244971Sjkim 376244971Sjkim /* Third 32 bits */ 377244971Sjkim 378244971Sjkim Dword = 0; 379244971Sjkim ACPI_PLD_SET_USER_VISIBLE (&Dword, PldInfo->UserVisible); 380244971Sjkim ACPI_PLD_SET_DOCK (&Dword, PldInfo->Dock); 381244971Sjkim ACPI_PLD_SET_LID (&Dword, PldInfo->Lid); 382244971Sjkim ACPI_PLD_SET_PANEL (&Dword, PldInfo->Panel); 383244971Sjkim ACPI_PLD_SET_VERTICAL (&Dword, PldInfo->VerticalPosition); 384244971Sjkim ACPI_PLD_SET_HORIZONTAL (&Dword, PldInfo->HorizontalPosition); 385244971Sjkim ACPI_PLD_SET_SHAPE (&Dword, PldInfo->Shape); 386244971Sjkim ACPI_PLD_SET_ORIENTATION (&Dword, PldInfo->GroupOrientation); 387244971Sjkim ACPI_PLD_SET_TOKEN (&Dword, PldInfo->GroupToken); 388244971Sjkim ACPI_PLD_SET_POSITION (&Dword, PldInfo->GroupPosition); 389244971Sjkim ACPI_PLD_SET_BAY (&Dword, PldInfo->Bay); 390244971Sjkim ACPI_MOVE_32_TO_32 (&Buffer[2], &Dword); 391244971Sjkim 392244971Sjkim /* Fourth 32 bits */ 393244971Sjkim 394244971Sjkim Dword = 0; 395244971Sjkim ACPI_PLD_SET_EJECTABLE (&Dword, PldInfo->Ejectable); 396244971Sjkim ACPI_PLD_SET_OSPM_EJECT (&Dword, PldInfo->OspmEjectRequired); 397244971Sjkim ACPI_PLD_SET_CABINET (&Dword, PldInfo->CabinetNumber); 398244971Sjkim ACPI_PLD_SET_CARD_CAGE (&Dword, PldInfo->CardCageNumber); 399244971Sjkim ACPI_PLD_SET_REFERENCE (&Dword, PldInfo->Reference); 400244971Sjkim ACPI_PLD_SET_ROTATION (&Dword, PldInfo->Rotation); 401244971Sjkim ACPI_PLD_SET_ORDER (&Dword, PldInfo->Order); 402244971Sjkim ACPI_MOVE_32_TO_32 (&Buffer[3], &Dword); 403244971Sjkim 404244971Sjkim if (PldInfo->Revision >= 2) 405244971Sjkim { 406244971Sjkim /* Fifth 32 bits */ 407244971Sjkim 408244971Sjkim Dword = 0; 409244971Sjkim ACPI_PLD_SET_VERT_OFFSET (&Dword, PldInfo->VerticalOffset); 410244971Sjkim ACPI_PLD_SET_HORIZ_OFFSET (&Dword, PldInfo->HorizontalOffset); 411244971Sjkim ACPI_MOVE_32_TO_32 (&Buffer[4], &Dword); 412244971Sjkim } 413244971Sjkim 414244971Sjkim return (ACPI_CAST_PTR (UINT8, Buffer)); 415244971Sjkim} 416244971Sjkim 417244971Sjkim 418244971Sjkim/******************************************************************************* 419244971Sjkim * 420244971Sjkim * FUNCTION: AcpiDbDumpPldBuffer 421244971Sjkim * 422244971Sjkim * PARAMETERS: ObjDesc - Object returned from _PLD method 423244971Sjkim * 424244971Sjkim * RETURN: None. 425244971Sjkim * 426244971Sjkim * DESCRIPTION: Dumps formatted contents of a _PLD return buffer. 427244971Sjkim * 428244971Sjkim ******************************************************************************/ 429244971Sjkim 430244971Sjkim#define ACPI_PLD_OUTPUT "%20s : %-6X\n" 431244971Sjkim 432244971Sjkimvoid 433244971SjkimAcpiDbDumpPldBuffer ( 434244971Sjkim ACPI_OBJECT *ObjDesc) 435244971Sjkim{ 436244971Sjkim ACPI_OBJECT *BufferDesc; 437244971Sjkim ACPI_PLD_INFO *PldInfo; 438244971Sjkim UINT8 *NewBuffer; 439244971Sjkim ACPI_STATUS Status; 440244971Sjkim 441244971Sjkim 442244971Sjkim /* Object must be of type Package with at least one Buffer element */ 443244971Sjkim 444244971Sjkim if (ObjDesc->Type != ACPI_TYPE_PACKAGE) 445244971Sjkim { 446244971Sjkim return; 447244971Sjkim } 448244971Sjkim 449244971Sjkim BufferDesc = &ObjDesc->Package.Elements[0]; 450244971Sjkim if (BufferDesc->Type != ACPI_TYPE_BUFFER) 451244971Sjkim { 452244971Sjkim return; 453244971Sjkim } 454244971Sjkim 455244971Sjkim /* Convert _PLD buffer to local _PLD struct */ 456244971Sjkim 457244971Sjkim Status = AcpiDecodePldBuffer (BufferDesc->Buffer.Pointer, 458244971Sjkim BufferDesc->Buffer.Length, &PldInfo); 459244971Sjkim if (ACPI_FAILURE (Status)) 460244971Sjkim { 461244971Sjkim return; 462244971Sjkim } 463244971Sjkim 464244971Sjkim /* Encode local _PLD struct back to a _PLD buffer */ 465244971Sjkim 466244971Sjkim NewBuffer = AcpiDbEncodePldBuffer (PldInfo); 467244971Sjkim if (!NewBuffer) 468244971Sjkim { 469306536Sjkim goto Exit; 470244971Sjkim } 471244971Sjkim 472244971Sjkim /* The two bit-packed buffers should match */ 473244971Sjkim 474306536Sjkim if (memcmp (NewBuffer, BufferDesc->Buffer.Pointer, 475244971Sjkim BufferDesc->Buffer.Length)) 476244971Sjkim { 477244971Sjkim AcpiOsPrintf ("Converted _PLD buffer does not compare. New:\n"); 478244971Sjkim 479244971Sjkim AcpiUtDumpBuffer (NewBuffer, 480244971Sjkim BufferDesc->Buffer.Length, DB_BYTE_DISPLAY, 0); 481244971Sjkim } 482244971Sjkim 483244971Sjkim /* First 32-bit dword */ 484244971Sjkim 485281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Revision", PldInfo->Revision); 486281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_IgnoreColor", PldInfo->IgnoreColor); 487281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Red", PldInfo->Red); 488281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Green", PldInfo->Green); 489281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Blue", PldInfo->Blue); 490244971Sjkim 491244971Sjkim /* Second 32-bit dword */ 492244971Sjkim 493281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Width", PldInfo->Width); 494281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Height", PldInfo->Height); 495244971Sjkim 496244971Sjkim /* Third 32-bit dword */ 497244971Sjkim 498281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_UserVisible", PldInfo->UserVisible); 499281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Dock", PldInfo->Dock); 500281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Lid", PldInfo->Lid); 501281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Panel", PldInfo->Panel); 502281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_VerticalPosition", PldInfo->VerticalPosition); 503281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_HorizontalPosition", PldInfo->HorizontalPosition); 504281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Shape", PldInfo->Shape); 505281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupOrientation", PldInfo->GroupOrientation); 506281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupToken", PldInfo->GroupToken); 507281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_GroupPosition", PldInfo->GroupPosition); 508281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Bay", PldInfo->Bay); 509244971Sjkim 510244971Sjkim /* Fourth 32-bit dword */ 511244971Sjkim 512281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Ejectable", PldInfo->Ejectable); 513281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_EjectRequired", PldInfo->OspmEjectRequired); 514281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_CabinetNumber", PldInfo->CabinetNumber); 515281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_CardCageNumber", PldInfo->CardCageNumber); 516281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Reference", PldInfo->Reference); 517281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Rotation", PldInfo->Rotation); 518281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_Order", PldInfo->Order); 519244971Sjkim 520244971Sjkim /* Fifth 32-bit dword */ 521244971Sjkim 522244971Sjkim if (BufferDesc->Buffer.Length > 16) 523244971Sjkim { 524281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_VerticalOffset", PldInfo->VerticalOffset); 525281075Sdim AcpiOsPrintf (ACPI_PLD_OUTPUT, "PLD_HorizontalOffset", PldInfo->HorizontalOffset); 526244971Sjkim } 527244971Sjkim 528306536Sjkim ACPI_FREE (NewBuffer); 529306536SjkimExit: 530244971Sjkim ACPI_FREE (PldInfo); 531244971Sjkim} 532