/*;********************************************************************************
;
; Copyright (c) 2011, Advanced Micro Devices, Inc.
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
; * Neither the name of Advanced Micro Devices, Inc. nor the names of
; its contributors may be used to endorse or promote products derived
; from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
;*********************************************************************************/
//AMD Library Routines (AMDLIB.C)
void InitSerialOut (void);
unsigned char getNumberOfCpuCores (OUT void);
unsigned int readAlink (IN unsigned int Index);
void writeAlink (IN unsigned int Index, IN unsigned int Data);
void rwAlink (IN unsigned int Index, IN unsigned int AndMask, IN unsigned int OrMask);
//AMD Library Routines (LEGACY.C)
unsigned int GetFixUp (OUT void);
//AMD Library Routines (IOLIB.C)
void ReadIO (IN unsigned short Address, IN unsigned char OpFlag, IN void *Value);
void WriteIO (IN unsigned short Address, IN unsigned char OpFlag, IN void *Value);
void RWIO (IN unsigned short Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int Data);
/// CPUID data received registers format
typedef struct _SB_CPUID_DATA {
IN OUT unsigned int EAX_Reg; ///< CPUID instruction result in EAX
IN OUT unsigned int EBX_Reg; ///< CPUID instruction result in EBX
IN OUT unsigned int ECX_Reg; ///< CPUID instruction result in ECX
IN OUT unsigned int EDX_Reg; ///< CPUID instruction result in EDX
} SB_CPUID_DATA;
//AMD Library Routines (AMDLIB32.ASM)
unsigned char ReadIo8 (IN unsigned short Address);
unsigned short ReadIo16 (IN unsigned short Address);
unsigned int ReadIo32 (IN unsigned short Address);
void WriteIo8 (IN unsigned short Address, IN unsigned char Data);
void WriteIo16 (IN unsigned short Address, IN unsigned short Data);
void WriteIo32 (IN unsigned short Address, IN unsigned int Data);
unsigned char ReadNumberOfCpuCores (void);
unsigned long long ReadTSC (void);
void CpuidRead (IN unsigned int CpuidFcnAddress, OUT SB_CPUID_DATA *Value);
//AMD Library Routines (MEMLIB.C)
void ReadMEM (IN unsigned int Address, IN unsigned char OpFlag, IN void* Value);
void WriteMEM (IN unsigned int Address, IN unsigned char OpFlag, IN void* Value);
void RWMEM (IN unsigned int Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int Data);
void
MemoryCopy (
IN unsigned char *Dest,
IN unsigned char *Source,
IN unsigned long Size
);
//AMD Library Routines (PCILIB.C)
void ReadPCI (IN unsigned int Address, IN unsigned char OpFlag, IN void *Value);
void WritePCI (IN unsigned int Address, IN unsigned char OpFlag, IN void *Value);
void RWPCI (IN unsigned int Address, IN unsigned char OpFlag, IN unsigned int Mask, IN unsigned int Data);
//AMD Library Routines (SBPELIB.C)
/**
* Read Southbridge Revision ID cie Base
*
*
* @retval 0xXXXXXXXX Revision ID
*
*/
unsigned char getRevisionID (OUT void);
//AMD Library Routines (SBPELIB.C)
/**
* Is SB A11?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsSbA11 (OUT void);
//AMD Library Routines (SBPELIB.C)
/**
* Is SB A12?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsSbA12 (OUT void);
//AMD Library Routines (SBPELIB.C)
/**
* Is SB A12 Plus?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsSbA12Plus (OUT void);
//AMD Library Routines (SBPELIB.C)
/**
* Is SB A13 Plus?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsSbA13Plus (OUT void);
/**
* Is LPC Rom?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsExternalClockMode (OUT void);
/**
* Is External Clock Mode?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsLpcRom (OUT void);
/**
* Is GCPU?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char
IsGCPU (
OUT void
);
//AMD Library Routines (SBPELIB.C)
/**
* Assert/deassert Hudson-2 pins used to toggle SB GPP reset or NB PCIE reset
*
*
* @param[in] ResetBlock - PCIE reset for SB GPP or NB PCIE
* @param[in] ResetOp - Assert or deassert PCIE reset
*
*/
void SbResetPcie (IN RESET_BLOCK ResetBlock, IN RESET_OP ResetOp);
/**
* sbGppTogglePcieReset - Toggle PCIE_RST2#
*
*
* @param[in] pConfig
*
*/
void sbGppTogglePcieReset (IN AMDSBCFG* pConfig);
/**
* sbSpiUnlock - Sb SPI Unlock
*
*
* @param[in] pConfig
*
*/
void sbSpiUnlock (IN AMDSBCFG* pConfig);
/**
* sbSpilock - Sb SPI lock
*
*
* @param[in] pConfig
*
*/
void sbSpilock (IN AMDSBCFG* pConfig);
/**
* programPciByteTable - Program PCI register by table (8 bits data)
*
*
*
* @param[in] pPciByteTable - Table data pointer
* @param[in] dwTableSize - Table length
*
*/
void programPciByteTable (IN REG8MASK* pPciByteTable, IN unsigned short dwTableSize);
/**
* programSbAcpiMmioTbl - Program SB ACPI MMIO register by table (8 bits data)
*
*
*
* @param[in] pAcpiTbl - Table data pointer
*
*/
void programSbAcpiMmioTbl (IN AcpiRegWrite *pAcpiTbl);
/**
* getChipSysMode - Get Chip status
*
*
* @param[in] Value - Return Chip strap status
* StrapStatus [15.0] - Hudson-2 chip Strap Status
* @li 0001 - Not USED FWH
* @li 0002 - Not USED LPC ROM
* @li 0004 - EC enabled
* @li 0008 - Reserved
* @li 0010 - Internal Clock mode
*
*/
void getChipSysMode (IN void* Value);
/**
* isImcEnabled - Is IMC Enabled
* @retval TRUE for IMC Enabled; FALSE for IMC Disabled
*/
unsigned char isImcEnabled (void);
/**
* Read Southbridge CIMx configuration structure pointer
*
*
*
* @retval 0xXXXXXXXX CIMx configuration structure pointer.
*
*/
AMDSBCFG* getConfigPointer (OUT void);
//AMD Library Routines (PMIOLIB.C)
/**
* Read PMIO
*
*
*
* @param[in] Address - PMIO Offset value
* @param[in] OpFlag - Access sizes
* @param[in] Value - Read Data Buffer
*
*/
void ReadPMIO (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
/**
* Write PMIO
*
*
*
* @param[in] Address - PMIO Offset value
* @param[in] OpFlag - Access sizes
* @param[in] Value - Write Data Buffer
*
*/
void WritePMIO (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
/**
* RWPMIO - Read/Write PMIO
*
*
*
* @param[in] Address - PMIO Offset value
* @param[in] OpFlag - Access sizes
* @param[in] AndMask - Data And Mask 32 bits
* @param[in] OrMask - Data OR Mask 32 bits
*
*/
void RWPMIO (IN unsigned char Address, IN unsigned char OpFlag, IN unsigned int AndMask, IN unsigned int OrMask);
//AMD Library Routines (PMIO2LIB.C)
/**
* Read PMIO2
*
*
*
* @param[in] Address - PMIO2 Offset value
* @param[in] OpFlag - Access sizes
* @param[in] Value - Read Data Buffer
*
*/
void ReadPMIO2 (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
/**
* Write PMIO 2
*
*
*
* @param[in] Address - PMIO2 Offset value
* @param[in] OpFlag - Access sizes
* @param[in] Value - Write Data Buffer
*
*/
void WritePMIO2 (IN unsigned char Address, IN unsigned char OpFlag, IN void* Value);
/**
* RWPMIO2 - Read/Write PMIO2
*
*
*
* @param[in] Address - PMIO2 Offset value
* @param[in] OpFlag - Access sizes
* @param[in] AndMask - Data And Mask 32 bits
* @param[in] OrMask - Data OR Mask 32 bits
*
*/
void RWPMIO2 (IN unsigned char Address, IN unsigned char OpFlag, IN unsigned int AndMask, IN unsigned int OrMask);
//AMD Library Routines (ECLIB.C)
// ECLIB Routines
// #ifndef NO_EC_SUPPORT
/**
* EnterEcConfig - Force EC into Config mode
*
*
*
*
*/
void EnterEcConfig (void);
/**
* ExitEcConfig - Force EC exit Config mode
*
*
*
*
*/
void ExitEcConfig (void);
/**
* ReadEC8 - Read EC register data
*
*
*
* @param[in] Address - EC Register Offset Value
* @param[in] Value - Read Data Buffer
*
*/
void ReadEC8 (IN unsigned char Address, IN unsigned char* Value);
/**
* WriteEC8 - Write date into EC register
*
*
*
* @param[in] Address - EC Register Offset Value
* @param[in] Value - Write Data Buffer
*
*/
void WriteEC8 (IN unsigned char Address, IN unsigned char* Value);
/**
* RWEC8 - Read/Write EC register
*
*
*
* @param[in] Address - EC Register Offset Value
* @param[in] AndMask - Data And Mask 8 bits
* @param[in] OrMask - Data OR Mask 8 bits
*
*/
void RWEC8 (IN unsigned char Address, IN unsigned char AndMask, IN unsigned char OrMask);
unsigned char IsZoneFuncEnable (IN unsigned short Flag, IN unsigned char func, IN unsigned char Zone);
void sbECfancontrolservice (IN AMDSBCFG* pConfig);
void hwmImcInit (IN AMDSBCFG* pConfig);
void GetSbAcpiMmioBase (OUT unsigned int* AcpiMmioBase);
void GetSbAcpiPmBase (OUT unsigned short* AcpiPmBase);
void SetAcpiPma (IN unsigned char pmaControl);
void imcEnableSurebootTimer (IN AMDSBCFG* pConfig);
void imcDisableSurebootTimer (IN AMDSBCFG* pConfig);
void imcDisarmSurebootTimer (IN AMDSBCFG* pConfig);
void hwmSbtsiAutoPolling (IN AMDSBCFG* pConfig);
void hwmSbtsiAutoPollingOff (IN AMDSBCFG* pConfig);
void hwmSbtsiAutoPollingPause (IN AMDSBCFG* pConfig);
void imcSleep (IN AMDSBCFG* pConfig);
void imcWakeup (IN AMDSBCFG* pConfig);
void imcIdle (IN AMDSBCFG* pConfig);
void imcThermalZoneEnable (IN AMDSBCFG* pConfig);
void ValidateFchVariant (IN AMDSBCFG* pConfig);
void CheckEfuse (IN AMDSBCFG* pConfig);
/**
* Is UMI One Lane GEN1 Mode?
*
*
* @retval TRUE or FALSE
*
*/
unsigned char IsUmiOneLaneGen1Mode ( OUT void );
/**
* Record SMI Status
*
*
* @retval Nothing
*
*/
void RecordSmiStatus ( OUT void );
// #endif