linker script: hax :/
[coreboot.git] / src / vendorcode / amd / cimx / sb900 / SbDef.h
1 /*;********************************************************************************
2 ;
3 ; Copyright (c) 2011, Advanced Micro Devices, Inc.
4 ; All rights reserved.
5
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.
16
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.
27
28 ;*********************************************************************************/
29
30
31 //AMD Library Routines (AMDLIB.C)
32 void  InitSerialOut (void);
33 unsigned char getNumberOfCpuCores (OUT void);
34 unsigned int  readAlink (IN unsigned int Index);
35 void  writeAlink (IN unsigned int Index, IN unsigned int Data);
36 void  rwAlink (IN unsigned int Index, IN unsigned int AndMask, IN unsigned int OrMask);
37
38 //AMD Library Routines (LEGACY.C)
39 unsigned int   GetFixUp (OUT void);
40
41 //AMD Library Routines (IOLIB.C)
42 void  ReadIO (IN unsigned short  Address, IN unsigned char OpFlag, IN void *Value);
43 void  WriteIO (IN unsigned short Address, IN unsigned char OpFlag, IN void *Value);
44 void  RWIO (IN unsigned short Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int Data);
45
46 /// CPUID data received registers format
47 typedef struct _SB_CPUID_DATA {
48   IN OUT   unsigned int          EAX_Reg;                ///< CPUID instruction result in EAX
49   IN OUT   unsigned int          EBX_Reg;                ///< CPUID instruction result in EBX
50   IN OUT   unsigned int          ECX_Reg;                ///< CPUID instruction result in ECX
51   IN OUT   unsigned int          EDX_Reg;                ///< CPUID instruction result in EDX
52 } SB_CPUID_DATA;
53
54 //AMD Library Routines (AMDLIB32.ASM)
55 unsigned char ReadIo8 (IN unsigned short Address);
56 unsigned short ReadIo16 (IN unsigned short Address);
57 unsigned int ReadIo32 (IN unsigned short Address);
58 void WriteIo8 (IN unsigned short Address, IN unsigned char Data);
59 void WriteIo16 (IN unsigned short Address, IN unsigned short Data);
60 void WriteIo32 (IN unsigned short Address, IN unsigned int Data);
61 unsigned char ReadNumberOfCpuCores (void);
62 unsigned long long  ReadTSC (void);
63 void CpuidRead (IN unsigned int CpuidFcnAddress, OUT SB_CPUID_DATA  *Value);
64
65
66 //AMD Library Routines (MEMLIB.C)
67 void  ReadMEM (IN unsigned int Address, IN unsigned char OpFlag, IN void* Value);
68 void  WriteMEM (IN unsigned int Address, IN unsigned char OpFlag, IN void* Value);
69 void  RWMEM (IN unsigned int Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int Data);
70 void
71 MemoryCopy (
72   IN       unsigned char *Dest,
73   IN       unsigned char *Source,
74   IN       unsigned int Size
75   );
76
77 //AMD Library Routines (PCILIB.C)
78 void  ReadPCI (IN unsigned int Address, IN unsigned char OpFlag, IN void *Value);
79 void  WritePCI (IN unsigned int Address, IN unsigned char OpFlag, IN void *Value);
80 void  RWPCI (IN unsigned int Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int  Data);
81
82 //AMD Library Routines (SBPELIB.C)
83 /**
84  * Read Southbridge Revision ID cie Base
85  *
86  *
87  * @retval  0xXXXXXXXX   Revision ID
88  *
89  */
90 unsigned char getRevisionID (OUT void);
91
92 //AMD Library Routines (SBPELIB.C)
93 /**
94  * Is SB A11?
95  *
96  *
97  * @retval  TRUE or FALSE
98  *
99  */
100 unsigned char IsSbA11 (OUT void);
101
102 //AMD Library Routines (SBPELIB.C)
103 /**
104  * Is SB A12?
105  *
106  *
107  * @retval  TRUE or FALSE
108  *
109  */
110 unsigned char IsSbA12 (OUT void);
111
112 //AMD Library Routines (SBPELIB.C)
113 /**
114  * Is SB A12 Plus?
115  *
116  *
117  * @retval  TRUE or FALSE
118  *
119  */
120 unsigned char IsSbA12Plus (OUT void);
121
122 //AMD Library Routines (SBPELIB.C)
123 /**
124  * Is SB A13 Plus?
125  *
126  *
127  * @retval  TRUE or FALSE
128  *
129  */
130 unsigned char IsSbA13Plus (OUT void);
131
132 /**
133  * Is LPC Rom?
134  *
135  *
136  * @retval  TRUE or FALSE
137  *
138  */
139 unsigned char IsExternalClockMode (OUT void);
140
141 /**
142  * Is External Clock Mode?
143  *
144  *
145  * @retval  TRUE or FALSE
146  *
147  */
148 unsigned char IsLpcRom (OUT void);
149
150 /**
151  * Is GCPU?
152  *
153  *
154  * @retval  TRUE or FALSE
155  *
156  */
157 unsigned char
158 IsGCPU (
159   OUT void
160   );
161
162 //AMD Library Routines (SBPELIB.C)
163 /**
164  * Assert/deassert Hudson-2 pins used to toggle SB GPP reset or NB PCIE reset
165  *
166  *
167  * @param[in] ResetBlock - PCIE reset for SB GPP or NB PCIE
168  * @param[in] ResetOp    - Assert or deassert PCIE reset
169  *
170  */
171 void SbResetPcie (IN RESET_BLOCK  ResetBlock, IN RESET_OP ResetOp);
172
173 /**
174  * sbGppTogglePcieReset - Toggle PCIE_RST2#
175  *
176  *
177  * @param[in] pConfig
178  *
179  */
180 void sbGppTogglePcieReset (IN AMDSBCFG* pConfig);
181
182 /**
183  * sbSpiUnlock - Sb SPI Unlock
184  *
185  *
186  * @param[in] pConfig
187  *
188  */
189 void sbSpiUnlock (IN AMDSBCFG* pConfig);
190
191 /**
192  * sbSpilock - Sb SPI lock
193  *
194  *
195  * @param[in] pConfig
196  *
197  */
198 void sbSpilock (IN AMDSBCFG* pConfig);
199
200 /**
201  * programPciByteTable - Program PCI register by table (8 bits data)
202  *
203  *
204  *
205  * @param[in] pPciByteTable    - Table data pointer
206  * @param[in] dwTableSize      - Table length
207  *
208  */
209 void  programPciByteTable (IN REG8MASK* pPciByteTable, IN unsigned short dwTableSize);
210
211 /**
212  * programSbAcpiMmioTbl - Program SB ACPI MMIO register by table (8 bits data)
213  *
214  *
215  *
216  * @param[in] pAcpiTbl   - Table data pointer
217  *
218  */
219 void  programSbAcpiMmioTbl (IN AcpiRegWrite  *pAcpiTbl);
220
221 /**
222  * getChipSysMode - Get Chip status
223  *
224  *
225  * @param[in] Value - Return Chip strap status
226  *   StrapStatus [15.0] - Hudson-2 chip Strap Status
227  *    @li <b>0001</b> - Not USED FWH
228  *    @li <b>0002</b> - Not USED LPC ROM
229  *    @li <b>0004</b> - EC enabled
230  *    @li <b>0008</b> - Reserved
231  *    @li <b>0010</b> - Internal Clock mode
232  *
233  */
234 void getChipSysMode (IN void* Value);
235
236 /**
237  * isImcEnabled - Is IMC Enabled
238  * @retval  TRUE for IMC Enabled; FALSE for IMC Disabled
239  */
240 unsigned char isImcEnabled (void);
241
242 /**
243  * Read Southbridge CIMx configuration structure pointer
244  *
245  *
246  *
247  * @retval  0xXXXXXXXX   CIMx configuration structure pointer.
248  *
249  */
250 AMDSBCFG* getConfigPointer (OUT void);
251
252 //AMD Library Routines (PMIOLIB.C)
253 /**
254  * Read PMIO
255  *
256  *
257  *
258  * @param[in] Address  - PMIO Offset value
259  * @param[in] OpFlag   - Access sizes
260  * @param[in] Value    - Read Data Buffer
261  *
262  */
263 void  ReadPMIO (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
264
265 /**
266  * Write PMIO
267  *
268  *
269  *
270  * @param[in] Address  - PMIO Offset value
271  * @param[in] OpFlag   - Access sizes
272  * @param[in] Value    - Write Data Buffer
273  *
274  */
275 void  WritePMIO (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
276
277 /**
278  * RWPMIO - Read/Write PMIO
279  *
280  *
281  *
282  * @param[in] Address    - PMIO Offset value
283  * @param[in] OpFlag     - Access sizes
284  * @param[in] AndMask    - Data And Mask 32 bits
285  * @param[in] OrMask     - Data OR Mask 32 bits
286  *
287  */
288 void  RWPMIO (IN unsigned char Address, IN unsigned char OpFlag, IN unsigned int AndMask, IN unsigned int OrMask);
289
290 //AMD Library Routines (PMIO2LIB.C)
291
292 /**
293  * Read PMIO2
294  *
295  *
296  *
297  * @param[in] Address  - PMIO2 Offset value
298  * @param[in] OpFlag   - Access sizes
299  * @param[in] Value    - Read Data Buffer
300  *
301  */
302 void  ReadPMIO2 (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
303
304 /**
305  * Write PMIO 2
306  *
307  *
308  *
309  * @param[in] Address  - PMIO2 Offset value
310  * @param[in] OpFlag   - Access sizes
311  * @param[in] Value    - Write Data Buffer
312  *
313  */
314 void  WritePMIO2 (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
315
316 /**
317  * RWPMIO2 - Read/Write PMIO2
318  *
319  *
320  *
321  * @param[in] Address    - PMIO2 Offset value
322  * @param[in] OpFlag     - Access sizes
323  * @param[in] AndMask    - Data And Mask 32 bits
324  * @param[in] OrMask     - Data OR Mask 32 bits
325  *
326  */
327 void  RWPMIO2 (IN unsigned char Address, IN unsigned char  OpFlag, IN unsigned int AndMask, IN unsigned int OrMask);
328 //AMD Library Routines (ECLIB.C)
329 // ECLIB Routines
330
331 // #ifndef NO_EC_SUPPORT
332
333 /**
334  * EnterEcConfig - Force EC into Config mode
335  *
336  *
337  *
338  *
339  */
340 void  EnterEcConfig (void);
341
342 /**
343  * ExitEcConfig - Force EC exit Config mode
344  *
345  *
346  *
347  *
348  */
349 void  ExitEcConfig (void);
350
351 /**
352  * ReadEC8 - Read EC register data
353  *
354  *
355  *
356  * @param[in] Address  - EC Register Offset Value
357  * @param[in] Value    - Read Data Buffer
358  *
359  */
360 void  ReadEC8 (IN unsigned char Address, IN unsigned char* Value);
361
362 /**
363  * WriteEC8 - Write date into EC register
364  *
365  *
366  *
367  * @param[in] Address  - EC Register Offset Value
368  * @param[in] Value    - Write Data Buffer
369  *
370  */
371 void  WriteEC8 (IN unsigned char Address, IN unsigned char* Value);
372
373 /**
374  * RWEC8 - Read/Write EC register
375  *
376  *
377  *
378  * @param[in] Address    - EC Register Offset Value
379  * @param[in] AndMask    - Data And Mask 8 bits
380  * @param[in] OrMask     - Data OR Mask 8 bits
381  *
382  */
383 void  RWEC8 (IN unsigned char Address, IN unsigned char AndMask, IN unsigned char OrMask);
384
385 unsigned char IsZoneFuncEnable (IN unsigned short Flag, IN unsigned char func, IN unsigned char Zone);
386 void sbECfancontrolservice (IN AMDSBCFG* pConfig);
387 void hwmImcInit (IN AMDSBCFG* pConfig);
388 void GetSbAcpiMmioBase (OUT unsigned int* AcpiMmioBase);
389 void GetSbAcpiPmBase (OUT  unsigned short* AcpiPmBase);
390 void SetAcpiPma (IN  unsigned char pmaControl);
391 void imcEnableSurebootTimer (IN AMDSBCFG* pConfig);
392 void imcDisableSurebootTimer (IN AMDSBCFG* pConfig);
393 void imcDisarmSurebootTimer (IN AMDSBCFG* pConfig);
394 void hwmSbtsiAutoPolling (IN AMDSBCFG* pConfig);
395 void hwmSbtsiAutoPollingOff (IN AMDSBCFG* pConfig);
396 void hwmSbtsiAutoPollingPause (IN AMDSBCFG* pConfig);
397 void imcSleep (IN AMDSBCFG* pConfig);
398 void imcWakeup (IN AMDSBCFG* pConfig);
399 void imcIdle (IN AMDSBCFG* pConfig);
400 void imcThermalZoneEnable (IN AMDSBCFG* pConfig);
401 void ValidateFchVariant (IN AMDSBCFG* pConfig);
402 void CheckEfuse (IN AMDSBCFG* pConfig);
403
404 /**
405  * Is UMI One Lane GEN1 Mode?
406  *
407  *
408  * @retval  TRUE or FALSE
409  *
410  */
411 unsigned char IsUmiOneLaneGen1Mode ( OUT void );
412
413 /**
414  * Record SMI Status
415  *
416  *
417  * @retval  Nothing
418  *
419  */
420 void RecordSmiStatus ( OUT void );
421 // #endif
422