1 /*;********************************************************************************
3 ; Copyright (c) 2011, Advanced Micro Devices, Inc.
6 ; Redistribution and use in source and binary forms, with or without
7 ; modification, are permitted provided that the following conditions are met:
8 ; * Redistributions of source code must retain the above copyright
9 ; notice, this list of conditions and the following disclaimer.
10 ; * Redistributions in binary form must reproduce the above copyright
11 ; notice, this list of conditions and the following disclaimer in the
12 ; documentation and/or other materials provided with the distribution.
13 ; * Neither the name of Advanced Micro Devices, Inc. nor the names of
14 ; its contributors may be used to endorse or promote products derived
15 ; from this software without specific prior written permission.
17 ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 ; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 ; DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
21 ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 ;*********************************************************************************/
30 #include "SbPlatform.h"
35 // Routine Description:
41 // Signature - table signature
45 // pointer to ACPI table
50 IN unsigned int Signature
57 DESCRIPTION_HEADER* CurrentTable;
58 RsdPtr = (UINT32*) (UINTN)0xe0000;
61 // if ( *RsdPtr == ' DSR' && *(RsdPtr + 1) == ' RTP' ) {
62 // if ( (*RsdPtr == 0x52534420) && (*(RsdPtr + 1) == 0x50545220) ) {
63 if ( (*RsdPtr == 0x20445352) && (*(RsdPtr + 1) == 0x20525450) ) {
64 Rsdt = (UINT32*) (UINTN) ((RSDP*)RsdPtr)->RsdtAddress;
68 } while ( RsdPtr <= (UINT32*) (UINTN)0xffff0 );
69 if ( Rsdt != NULL && ACPI_GetTableChecksum (Rsdt) == 0 ) {
70 for ( i = 0; i < (((DESCRIPTION_HEADER*)Rsdt)->Length - sizeof (DESCRIPTION_HEADER)) / 4; i++ ) {
71 tableOffset = *(UINTN*) ((UINT8*)Rsdt + sizeof (DESCRIPTION_HEADER) + i * 4);
72 CurrentTable = (DESCRIPTION_HEADER*)tableOffset;
73 if ( CurrentTable->Signature == Signature ) {
83 // Routine Description:
85 // Update table checksum
89 // TablePtr - table pointer
97 ACPI_SetTableChecksum (
103 ((DESCRIPTION_HEADER*)TablePtr)->Checksum = 0;
104 Checksum = ACPI_GetTableChecksum (TablePtr);
105 ((DESCRIPTION_HEADER*)TablePtr)->Checksum = (UINT8) (0x100 - Checksum);
110 // Routine Description:
112 // Get table checksum
116 // TablePtr - table pointer
124 ACPI_GetTableChecksum (
128 return GetByteSum (TablePtr, ((DESCRIPTION_HEADER*)TablePtr)->Length);
141 for ( i = 0; i < Length; i++ ) {
142 Checksum = Checksum + (*((UINT8*)pData + i));
148 OUT UINT32* AcpiMmioBase
153 ReadPMIO (SB_PMIOA_REG24 + 2, AccWidthUint16, &Value16);
154 *AcpiMmioBase = Value16 << 16;
159 OUT UINT16* AcpiPmBase
162 ReadPMIO (SB_PMIOA_REG60, AccWidthUint16, AcpiPmBase);
172 ReadMEM (ACPI_MMIO_BASE + PMIO_BASE + SB_PMIOA_REG74, AccWidthUint16, &dwValue);
174 WriteMEM (ACPI_MMIO_BASE + PMIO_BASE + SB_PMIOA_REG74, AccWidthUint16, &dwValue);
175 ReadMEM (ACPI_MMIO_BASE + PMIO_BASE + SB_PMIOA_REG6E, AccWidthUint16, &pmaBase);
176 WriteIo8 (pmaBase, pmaControl);
177 RWMEM (ACPI_MMIO_BASE + SMI_BASE + SB_PMIOA_REG98 + 3, AccWidthUint8, ~BIT7, pmaControl << 7);