/*;******************************************************************************** ; ; 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