Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/acpica/components/utilities/utxface.c
48406 views
1
/******************************************************************************
2
*
3
* Module Name: utxface - External interfaces, miscellaneous utility functions
4
*
5
*****************************************************************************/
6
7
/******************************************************************************
8
*
9
* 1. Copyright Notice
10
*
11
* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
12
* All rights reserved.
13
*
14
* 2. License
15
*
16
* 2.1. This is your license from Intel Corp. under its intellectual property
17
* rights. You may have additional license terms from the party that provided
18
* you this software, covering your right to use that party's intellectual
19
* property rights.
20
*
21
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22
* copy of the source code appearing in this file ("Covered Code") an
23
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
24
* base code distributed originally by Intel ("Original Intel Code") to copy,
25
* make derivatives, distribute, use and display any portion of the Covered
26
* Code in any form, with the right to sublicense such rights; and
27
*
28
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29
* license (with the right to sublicense), under only those claims of Intel
30
* patents that are infringed by the Original Intel Code, to make, use, sell,
31
* offer to sell, and import the Covered Code and derivative works thereof
32
* solely to the minimum extent necessary to exercise the above copyright
33
* license, and in no event shall the patent license extend to any additions
34
* to or modifications of the Original Intel Code. No other license or right
35
* is granted directly or by implication, estoppel or otherwise;
36
*
37
* The above copyright and patent license is granted only if the following
38
* conditions are met:
39
*
40
* 3. Conditions
41
*
42
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
43
* Redistribution of source code of any substantial portion of the Covered
44
* Code or modification with rights to further distribute source must include
45
* the above Copyright Notice, the above License, this list of Conditions,
46
* and the following Disclaimer and Export Compliance provision. In addition,
47
* Licensee must cause all Covered Code to which Licensee contributes to
48
* contain a file documenting the changes Licensee made to create that Covered
49
* Code and the date of any change. Licensee must include in that file the
50
* documentation of any changes made by any predecessor Licensee. Licensee
51
* must include a prominent statement that the modification is derived,
52
* directly or indirectly, from Original Intel Code.
53
*
54
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55
* Redistribution of source code of any substantial portion of the Covered
56
* Code or modification without rights to further distribute source must
57
* include the following Disclaimer and Export Compliance provision in the
58
* documentation and/or other materials provided with distribution. In
59
* addition, Licensee may not authorize further sublicense of source of any
60
* portion of the Covered Code, and must include terms to the effect that the
61
* license from Licensee to its licensee is limited to the intellectual
62
* property embodied in the software Licensee provides to its licensee, and
63
* not to intellectual property embodied in modifications its licensee may
64
* make.
65
*
66
* 3.3. Redistribution of Executable. Redistribution in executable form of any
67
* substantial portion of the Covered Code or modification must reproduce the
68
* above Copyright Notice, and the following Disclaimer and Export Compliance
69
* provision in the documentation and/or other materials provided with the
70
* distribution.
71
*
72
* 3.4. Intel retains all right, title, and interest in and to the Original
73
* Intel Code.
74
*
75
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
76
* Intel shall be used in advertising or otherwise to promote the sale, use or
77
* other dealings in products derived from or relating to the Covered Code
78
* without prior written authorization from Intel.
79
*
80
* 4. Disclaimer and Export Compliance
81
*
82
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88
* PARTICULAR PURPOSE.
89
*
90
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97
* LIMITED REMEDY.
98
*
99
* 4.3. Licensee shall not export, either directly or indirectly, any of this
100
* software or system incorporating such software without first obtaining any
101
* required license or other approval from the U. S. Department of Commerce or
102
* any other agency or department of the United States Government. In the
103
* event Licensee exports any such software from the United States or
104
* re-exports any such software from a foreign destination, Licensee shall
105
* ensure that the distribution and export/re-export of the software is in
106
* compliance with all laws, regulations, orders, or other restrictions of the
107
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
108
* any of its subsidiaries will export/re-export any technical data, process,
109
* software, or service, directly or indirectly, to any country for which the
110
* United States government or any agency thereof requires an export license,
111
* other governmental approval, or letter of assurance, without first obtaining
112
* such license, approval or letter.
113
*
114
*****************************************************************************
115
*
116
* Alternatively, you may choose to be licensed under the terms of the
117
* following license:
118
*
119
* Redistribution and use in source and binary forms, with or without
120
* modification, are permitted provided that the following conditions
121
* are met:
122
* 1. Redistributions of source code must retain the above copyright
123
* notice, this list of conditions, and the following disclaimer,
124
* without modification.
125
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
126
* substantially similar to the "NO WARRANTY" disclaimer below
127
* ("Disclaimer") and any redistribution must be conditioned upon
128
* including a substantially similar Disclaimer requirement for further
129
* binary redistribution.
130
* 3. Neither the names of the above-listed copyright holders nor the names
131
* of any contributors may be used to endorse or promote products derived
132
* from this software without specific prior written permission.
133
*
134
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145
*
146
* Alternatively, you may choose to be licensed under the terms of the
147
* GNU General Public License ("GPL") version 2 as published by the Free
148
* Software Foundation.
149
*
150
*****************************************************************************/
151
152
#define EXPORT_ACPI_INTERFACES
153
154
#include <contrib/dev/acpica/include/acpi.h>
155
#include <contrib/dev/acpica/include/accommon.h>
156
#include <contrib/dev/acpica/include/acdebug.h>
157
158
#define _COMPONENT ACPI_UTILITIES
159
ACPI_MODULE_NAME ("utxface")
160
161
162
/*******************************************************************************
163
*
164
* FUNCTION: AcpiTerminate
165
*
166
* PARAMETERS: None
167
*
168
* RETURN: Status
169
*
170
* DESCRIPTION: Shutdown the ACPICA subsystem and release all resources.
171
*
172
******************************************************************************/
173
174
ACPI_STATUS ACPI_INIT_FUNCTION
175
AcpiTerminate (
176
void)
177
{
178
ACPI_STATUS Status;
179
180
181
ACPI_FUNCTION_TRACE (AcpiTerminate);
182
183
184
/* Shutdown and free all resources */
185
186
AcpiUtSubsystemShutdown ();
187
188
/* Free the mutex objects */
189
190
AcpiUtMutexTerminate ();
191
192
/* Now we can shutdown the OS-dependent layer */
193
194
Status = AcpiOsTerminate ();
195
return_ACPI_STATUS (Status);
196
}
197
198
ACPI_EXPORT_SYMBOL_INIT (AcpiTerminate)
199
200
201
#ifndef ACPI_ASL_COMPILER
202
/*******************************************************************************
203
*
204
* FUNCTION: AcpiSubsystemStatus
205
*
206
* PARAMETERS: None
207
*
208
* RETURN: Status of the ACPI subsystem
209
*
210
* DESCRIPTION: Other drivers that use the ACPI subsystem should call this
211
* before making any other calls, to ensure the subsystem
212
* initialized successfully.
213
*
214
******************************************************************************/
215
216
ACPI_STATUS
217
AcpiSubsystemStatus (
218
void)
219
{
220
221
if (AcpiGbl_StartupFlags & ACPI_INITIALIZED_OK)
222
{
223
return (AE_OK);
224
}
225
else
226
{
227
return (AE_ERROR);
228
}
229
}
230
231
ACPI_EXPORT_SYMBOL (AcpiSubsystemStatus)
232
233
234
/*******************************************************************************
235
*
236
* FUNCTION: AcpiGetSystemInfo
237
*
238
* PARAMETERS: OutBuffer - A buffer to receive the resources for the
239
* device
240
*
241
* RETURN: Status - the status of the call
242
*
243
* DESCRIPTION: This function is called to get information about the current
244
* state of the ACPI subsystem. It will return system information
245
* in the OutBuffer.
246
*
247
* If the function fails an appropriate status will be returned
248
* and the value of OutBuffer is undefined.
249
*
250
******************************************************************************/
251
252
ACPI_STATUS
253
AcpiGetSystemInfo (
254
ACPI_BUFFER *OutBuffer)
255
{
256
ACPI_SYSTEM_INFO *InfoPtr;
257
ACPI_STATUS Status;
258
259
260
ACPI_FUNCTION_TRACE (AcpiGetSystemInfo);
261
262
263
/* Parameter validation */
264
265
Status = AcpiUtValidateBuffer (OutBuffer);
266
if (ACPI_FAILURE (Status))
267
{
268
return_ACPI_STATUS (Status);
269
}
270
271
/* Validate/Allocate/Clear caller buffer */
272
273
Status = AcpiUtInitializeBuffer (OutBuffer, sizeof (ACPI_SYSTEM_INFO));
274
if (ACPI_FAILURE (Status))
275
{
276
return_ACPI_STATUS (Status);
277
}
278
279
/*
280
* Populate the return buffer
281
*/
282
InfoPtr = (ACPI_SYSTEM_INFO *) OutBuffer->Pointer;
283
InfoPtr->AcpiCaVersion = ACPI_CA_VERSION;
284
285
/* System flags (ACPI capabilities) */
286
287
InfoPtr->Flags = ACPI_SYS_MODE_ACPI;
288
289
/* Timer resolution - 24 or 32 bits */
290
291
if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER)
292
{
293
InfoPtr->TimerResolution = 24;
294
}
295
else
296
{
297
InfoPtr->TimerResolution = 32;
298
}
299
300
/* Clear the reserved fields */
301
302
InfoPtr->Reserved1 = 0;
303
InfoPtr->Reserved2 = 0;
304
305
/* Current debug levels */
306
307
InfoPtr->DebugLayer = AcpiDbgLayer;
308
InfoPtr->DebugLevel = AcpiDbgLevel;
309
310
return_ACPI_STATUS (AE_OK);
311
}
312
313
ACPI_EXPORT_SYMBOL (AcpiGetSystemInfo)
314
315
316
/*******************************************************************************
317
*
318
* FUNCTION: AcpiGetStatistics
319
*
320
* PARAMETERS: Stats - Where the statistics are returned
321
*
322
* RETURN: Status - the status of the call
323
*
324
* DESCRIPTION: Get the contents of the various system counters
325
*
326
******************************************************************************/
327
328
ACPI_STATUS
329
AcpiGetStatistics (
330
ACPI_STATISTICS *Stats)
331
{
332
ACPI_FUNCTION_TRACE (AcpiGetStatistics);
333
334
335
/* Parameter validation */
336
337
if (!Stats)
338
{
339
return_ACPI_STATUS (AE_BAD_PARAMETER);
340
}
341
342
/* Various interrupt-based event counters */
343
344
Stats->SciCount = AcpiSciCount;
345
Stats->GpeCount = AcpiGpeCount;
346
347
memcpy (Stats->FixedEventCount, AcpiFixedEventCount,
348
sizeof (AcpiFixedEventCount));
349
350
/* Other counters */
351
352
Stats->MethodCount = AcpiMethodCount;
353
return_ACPI_STATUS (AE_OK);
354
}
355
356
ACPI_EXPORT_SYMBOL (AcpiGetStatistics)
357
358
359
/*****************************************************************************
360
*
361
* FUNCTION: AcpiInstallInitializationHandler
362
*
363
* PARAMETERS: Handler - Callback procedure
364
* Function - Not (currently) used, see below
365
*
366
* RETURN: Status
367
*
368
* DESCRIPTION: Install an initialization handler
369
*
370
* TBD: When a second function is added, must save the Function also.
371
*
372
****************************************************************************/
373
374
ACPI_STATUS
375
AcpiInstallInitializationHandler (
376
ACPI_INIT_HANDLER Handler,
377
UINT32 Function)
378
{
379
380
if (!Handler)
381
{
382
return (AE_BAD_PARAMETER);
383
}
384
385
if (AcpiGbl_InitHandler)
386
{
387
return (AE_ALREADY_EXISTS);
388
}
389
390
AcpiGbl_InitHandler = Handler;
391
return (AE_OK);
392
}
393
394
ACPI_EXPORT_SYMBOL (AcpiInstallInitializationHandler)
395
396
397
/*****************************************************************************
398
*
399
* FUNCTION: AcpiPurgeCachedObjects
400
*
401
* PARAMETERS: None
402
*
403
* RETURN: Status
404
*
405
* DESCRIPTION: Empty all caches (delete the cached objects)
406
*
407
****************************************************************************/
408
409
ACPI_STATUS
410
AcpiPurgeCachedObjects (
411
void)
412
{
413
ACPI_FUNCTION_TRACE (AcpiPurgeCachedObjects);
414
415
416
(void) AcpiOsPurgeCache (AcpiGbl_StateCache);
417
(void) AcpiOsPurgeCache (AcpiGbl_OperandCache);
418
(void) AcpiOsPurgeCache (AcpiGbl_PsNodeCache);
419
(void) AcpiOsPurgeCache (AcpiGbl_PsNodeExtCache);
420
421
return_ACPI_STATUS (AE_OK);
422
}
423
424
ACPI_EXPORT_SYMBOL (AcpiPurgeCachedObjects)
425
426
427
/*****************************************************************************
428
*
429
* FUNCTION: AcpiInstallInterface
430
*
431
* PARAMETERS: InterfaceName - The interface to install
432
*
433
* RETURN: Status
434
*
435
* DESCRIPTION: Install an _OSI interface to the global list
436
*
437
****************************************************************************/
438
439
ACPI_STATUS
440
AcpiInstallInterface (
441
ACPI_STRING InterfaceName)
442
{
443
ACPI_STATUS Status;
444
ACPI_INTERFACE_INFO *InterfaceInfo;
445
446
447
/* Parameter validation */
448
449
if (!InterfaceName || (strlen (InterfaceName) == 0))
450
{
451
return (AE_BAD_PARAMETER);
452
}
453
454
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
455
if (ACPI_FAILURE (Status))
456
{
457
return (Status);
458
}
459
460
/* Check if the interface name is already in the global list */
461
462
InterfaceInfo = AcpiUtGetInterface (InterfaceName);
463
if (InterfaceInfo)
464
{
465
/*
466
* The interface already exists in the list. This is OK if the
467
* interface has been marked invalid -- just clear the bit.
468
*/
469
if (InterfaceInfo->Flags & ACPI_OSI_INVALID)
470
{
471
InterfaceInfo->Flags &= ~ACPI_OSI_INVALID;
472
Status = AE_OK;
473
}
474
else
475
{
476
Status = AE_ALREADY_EXISTS;
477
}
478
}
479
else
480
{
481
/* New interface name, install into the global list */
482
483
Status = AcpiUtInstallInterface (InterfaceName);
484
}
485
486
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
487
return (Status);
488
}
489
490
ACPI_EXPORT_SYMBOL (AcpiInstallInterface)
491
492
493
/*****************************************************************************
494
*
495
* FUNCTION: AcpiRemoveInterface
496
*
497
* PARAMETERS: InterfaceName - The interface to remove
498
*
499
* RETURN: Status
500
*
501
* DESCRIPTION: Remove an _OSI interface from the global list
502
*
503
****************************************************************************/
504
505
ACPI_STATUS
506
AcpiRemoveInterface (
507
ACPI_STRING InterfaceName)
508
{
509
ACPI_STATUS Status;
510
511
512
/* Parameter validation */
513
514
if (!InterfaceName || (strlen (InterfaceName) == 0))
515
{
516
return (AE_BAD_PARAMETER);
517
}
518
519
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
520
if (ACPI_FAILURE (Status))
521
{
522
return (Status);
523
}
524
525
Status = AcpiUtRemoveInterface (InterfaceName);
526
527
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
528
return (Status);
529
}
530
531
ACPI_EXPORT_SYMBOL (AcpiRemoveInterface)
532
533
534
/*****************************************************************************
535
*
536
* FUNCTION: AcpiInstallInterfaceHandler
537
*
538
* PARAMETERS: Handler - The _OSI interface handler to install
539
* NULL means "remove existing handler"
540
*
541
* RETURN: Status
542
*
543
* DESCRIPTION: Install a handler for the predefined _OSI ACPI method.
544
* invoked during execution of the internal implementation of
545
* _OSI. A NULL handler simply removes any existing handler.
546
*
547
****************************************************************************/
548
549
ACPI_STATUS
550
AcpiInstallInterfaceHandler (
551
ACPI_INTERFACE_HANDLER Handler)
552
{
553
ACPI_STATUS Status;
554
555
556
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
557
if (ACPI_FAILURE (Status))
558
{
559
return (Status);
560
}
561
562
if (Handler && AcpiGbl_InterfaceHandler)
563
{
564
Status = AE_ALREADY_EXISTS;
565
}
566
else
567
{
568
AcpiGbl_InterfaceHandler = Handler;
569
}
570
571
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
572
return (Status);
573
}
574
575
ACPI_EXPORT_SYMBOL (AcpiInstallInterfaceHandler)
576
577
578
/*****************************************************************************
579
*
580
* FUNCTION: AcpiUpdateInterfaces
581
*
582
* PARAMETERS: Action - Actions to be performed during the
583
* update
584
*
585
* RETURN: Status
586
*
587
* DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor
588
* string or/and feature group strings.
589
*
590
****************************************************************************/
591
592
ACPI_STATUS
593
AcpiUpdateInterfaces (
594
UINT8 Action)
595
{
596
ACPI_STATUS Status;
597
598
599
Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
600
if (ACPI_FAILURE (Status))
601
{
602
return (Status);
603
}
604
605
Status = AcpiUtUpdateInterfaces (Action);
606
607
AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
608
return (Status);
609
}
610
611
612
/*****************************************************************************
613
*
614
* FUNCTION: AcpiCheckAddressRange
615
*
616
* PARAMETERS: SpaceId - Address space ID
617
* Address - Start address
618
* Length - Length
619
* Warn - TRUE if warning on overlap desired
620
*
621
* RETURN: Count of the number of conflicts detected.
622
*
623
* DESCRIPTION: Check if the input address range overlaps any of the
624
* ASL operation region address ranges.
625
*
626
****************************************************************************/
627
628
UINT32
629
AcpiCheckAddressRange (
630
ACPI_ADR_SPACE_TYPE SpaceId,
631
ACPI_PHYSICAL_ADDRESS Address,
632
ACPI_SIZE Length,
633
BOOLEAN Warn)
634
{
635
UINT32 Overlaps;
636
ACPI_STATUS Status;
637
638
639
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
640
if (ACPI_FAILURE (Status))
641
{
642
return (0);
643
}
644
645
Overlaps = AcpiUtCheckAddressRange (SpaceId, Address,
646
(UINT32) Length, Warn);
647
648
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
649
return (Overlaps);
650
}
651
652
ACPI_EXPORT_SYMBOL (AcpiCheckAddressRange)
653
654
#endif /* !ACPI_ASL_COMPILER */
655
656
657
/*******************************************************************************
658
*
659
* FUNCTION: AcpiDecodePldBuffer
660
*
661
* PARAMETERS: InBuffer - Buffer returned by _PLD method
662
* Length - Length of the InBuffer
663
* ReturnBuffer - Where the decode buffer is returned
664
*
665
* RETURN: Status and the decoded _PLD buffer. User must deallocate
666
* the buffer via ACPI_FREE.
667
*
668
* DESCRIPTION: Decode the bit-packed buffer returned by the _PLD method into
669
* a local struct that is much more useful to an ACPI driver.
670
*
671
******************************************************************************/
672
673
ACPI_STATUS
674
AcpiDecodePldBuffer (
675
UINT8 *InBuffer,
676
ACPI_SIZE Length,
677
ACPI_PLD_INFO **ReturnBuffer)
678
{
679
ACPI_PLD_INFO *PldInfo;
680
UINT32 *Buffer = ACPI_CAST_PTR (UINT32, InBuffer);
681
UINT32 Dword;
682
683
684
/* Parameter validation */
685
686
if (!InBuffer || !ReturnBuffer || (Length < ACPI_PLD_REV1_BUFFER_SIZE))
687
{
688
return (AE_BAD_PARAMETER);
689
}
690
691
PldInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PLD_INFO));
692
if (!PldInfo)
693
{
694
return (AE_NO_MEMORY);
695
}
696
697
/* First 32-bit DWord */
698
699
ACPI_MOVE_32_TO_32 (&Dword, &Buffer[0]);
700
PldInfo->Revision = ACPI_PLD_GET_REVISION (&Dword);
701
PldInfo->IgnoreColor = ACPI_PLD_GET_IGNORE_COLOR (&Dword);
702
PldInfo->Red = ACPI_PLD_GET_RED (&Dword);
703
PldInfo->Green = ACPI_PLD_GET_GREEN (&Dword);
704
PldInfo->Blue = ACPI_PLD_GET_BLUE (&Dword);
705
706
/* Second 32-bit DWord */
707
708
ACPI_MOVE_32_TO_32 (&Dword, &Buffer[1]);
709
PldInfo->Width = ACPI_PLD_GET_WIDTH (&Dword);
710
PldInfo->Height = ACPI_PLD_GET_HEIGHT(&Dword);
711
712
/* Third 32-bit DWord */
713
714
ACPI_MOVE_32_TO_32 (&Dword, &Buffer[2]);
715
PldInfo->UserVisible = ACPI_PLD_GET_USER_VISIBLE (&Dword);
716
PldInfo->Dock = ACPI_PLD_GET_DOCK (&Dword);
717
PldInfo->Lid = ACPI_PLD_GET_LID (&Dword);
718
PldInfo->Panel = ACPI_PLD_GET_PANEL (&Dword);
719
PldInfo->VerticalPosition = ACPI_PLD_GET_VERTICAL (&Dword);
720
PldInfo->HorizontalPosition = ACPI_PLD_GET_HORIZONTAL (&Dword);
721
PldInfo->Shape = ACPI_PLD_GET_SHAPE (&Dword);
722
PldInfo->GroupOrientation = ACPI_PLD_GET_ORIENTATION (&Dword);
723
PldInfo->GroupToken = ACPI_PLD_GET_TOKEN (&Dword);
724
PldInfo->GroupPosition = ACPI_PLD_GET_POSITION (&Dword);
725
PldInfo->Bay = ACPI_PLD_GET_BAY (&Dword);
726
727
/* Fourth 32-bit DWord */
728
729
ACPI_MOVE_32_TO_32 (&Dword, &Buffer[3]);
730
PldInfo->Ejectable = ACPI_PLD_GET_EJECTABLE (&Dword);
731
PldInfo->OspmEjectRequired = ACPI_PLD_GET_OSPM_EJECT (&Dword);
732
PldInfo->CabinetNumber = ACPI_PLD_GET_CABINET (&Dword);
733
PldInfo->CardCageNumber = ACPI_PLD_GET_CARD_CAGE (&Dword);
734
PldInfo->Reference = ACPI_PLD_GET_REFERENCE (&Dword);
735
PldInfo->Rotation = ACPI_PLD_GET_ROTATION (&Dword);
736
PldInfo->Order = ACPI_PLD_GET_ORDER (&Dword);
737
738
if (Length >= ACPI_PLD_REV2_BUFFER_SIZE)
739
{
740
/* Fifth 32-bit DWord (Revision 2 of _PLD) */
741
742
ACPI_MOVE_32_TO_32 (&Dword, &Buffer[4]);
743
PldInfo->VerticalOffset = ACPI_PLD_GET_VERT_OFFSET (&Dword);
744
PldInfo->HorizontalOffset = ACPI_PLD_GET_HORIZ_OFFSET (&Dword);
745
}
746
747
*ReturnBuffer = PldInfo;
748
return (AE_OK);
749
}
750
751
ACPI_EXPORT_SYMBOL (AcpiDecodePldBuffer)
752
753