change a readable way to fix SB800 CIMX "multi-character constant warning".
[coreboot.git] / src / vendorcode / amd / cimx / sb800 / ACPILIB.c
1 /*\r
2  *****************************************************************************\r
3  *\r
4  * This file is part of the coreboot project.\r
5  *\r
6  * Copyright (C) 2010 Advanced Micro Devices, Inc.\r
7  *\r
8  * This program is free software; you can redistribute it and/or modify\r
9  * it under the terms of the GNU General Public License as published by\r
10  * the Free Software Foundation; version 2 of the License.\r
11  *\r
12  * This program is distributed in the hope that it will be useful,\r
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15  * GNU General Public License for more details.\r
16  *\r
17  * You should have received a copy of the GNU General Public License\r
18  * along with this program; if not, write to the Free Software\r
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA\r
20  * ***************************************************************************\r
21  *\r
22  */\r
23 \r
24 #include "SBPLATFORM.h"\r
25 \r
26 //\r
27 //\r
28 // Routine Description:\r
29 //\r
30 //  Locate ACPI table\r
31 //\r
32 // Arguments:\r
33 //\r
34 //  Signature - table signature\r
35 //\r
36 //Returns:\r
37 //\r
38 //  pointer to ACPI table\r
39 //\r
40 //\r
41 VOID*\r
42 ACPI_LocateTable (\r
43   IN       UINT32 Signature\r
44   )\r
45 {\r
46   UINT32  i;\r
47   UINT32* RsdPtr;\r
48   UINT32* Rsdt;\r
49   UINTN   tableOffset;\r
50   DESCRIPTION_HEADER* CurrentTable;\r
51 \r
52   RsdPtr = (UINT32*) (UINTN)0xe0000;\r
53   Rsdt = NULL;\r
54   do {\r
55     if ( *RsdPtr == Int32FromChar('R', 'S', 'D', ' ') && *(RsdPtr + 1) == Int32FromChar('P', 'T', 'R', ' ')) {\r
56       Rsdt = (UINT32*) (UINTN) ((RSDP*)RsdPtr)->RsdtAddress;\r
57       break;\r
58     }\r
59     RsdPtr += 4;\r
60   } while ( RsdPtr <= (UINT32*) (UINTN)0xffff0 );\r
61   if ( Rsdt != NULL && ACPI_GetTableChecksum (Rsdt) == 0 ) {\r
62     for ( i = 0; i < (((DESCRIPTION_HEADER*)Rsdt)->Length - sizeof (DESCRIPTION_HEADER)) / 4; i++ ) {\r
63       tableOffset = *(UINTN*) ((UINT8*)Rsdt + sizeof (DESCRIPTION_HEADER) + i * 4);\r
64       CurrentTable = (DESCRIPTION_HEADER*)tableOffset;\r
65       if ( CurrentTable->Signature == Signature ) {\r
66         return CurrentTable;\r
67       }\r
68     }\r
69   }\r
70   return NULL;\r
71 }\r
72 \r
73 //\r
74 //\r
75 //  Routine Description:\r
76 //\r
77 //  Update table checksum\r
78 //\r
79 //  Arguments:\r
80 //\r
81 //  TablePtr - table pointer\r
82 //\r
83 //  Returns:\r
84 //\r
85 //  none\r
86 //\r
87 //\r
88 VOID\r
89 ACPI_SetTableChecksum (\r
90   IN       VOID* TablePtr\r
91   )\r
92 {\r
93   UINT8 Checksum;\r
94   Checksum = 0;\r
95   ((DESCRIPTION_HEADER*)TablePtr)->Checksum = 0;\r
96   Checksum = ACPI_GetTableChecksum (TablePtr);\r
97   ((DESCRIPTION_HEADER*)TablePtr)->Checksum = (UINT8)(0x100 - Checksum);\r
98 }\r
99 \r
100 //\r
101 //\r
102 //  Routine Description:\r
103 //\r
104 //  Get table checksum\r
105 //\r
106 //  Arguments:\r
107 //\r
108 //  TablePtr - table pointer\r
109 //\r
110 //  Returns:\r
111 //\r
112 //  none\r
113 //\r
114 //\r
115 UINT8\r
116 ACPI_GetTableChecksum (\r
117   IN       VOID* TablePtr\r
118   )\r
119 {\r
120   return GetByteSum (TablePtr, ((DESCRIPTION_HEADER*)TablePtr)->Length);\r
121 }\r
122 \r
123 \r
124 UINT8\r
125 GetByteSum (\r
126   IN       VOID* pData,\r
127   IN       UINT32 Length\r
128   )\r
129 {\r
130   UINT32  i;\r
131   UINT8 Checksum;\r
132   Checksum = 0;\r
133   for ( i = 0; i < Length; i++ ) {\r
134     Checksum = Checksum + (*((UINT8*)pData + i));\r
135   }\r
136   return Checksum;\r
137 }\r
138 VOID\r
139 GetSbAcpiMmioBase (\r
140   OUT     UINT32*    AcpiMmioBase\r
141   )\r
142 {\r
143   UINT32    Value16;\r
144 \r
145   ReadPMIO (SB_PMIOA_REG24 + 2, AccWidthUint16, &Value16);\r
146   *AcpiMmioBase = Value16 << 16;\r
147 }\r
148 \r
149 VOID\r
150 GetSbAcpiPmBase (\r
151   OUT     UINT16*    AcpiPmBase\r
152   )\r
153 {\r
154   ReadPMIO (SB_PMIOA_REG60, AccWidthUint16, AcpiPmBase);\r
155 }\r
156 \r