blob: af10946b9a934c7bb10150eaac46c49ec6bd620c [file] [log] [blame]
/**
* @file
*
* CNB Library function
*
*
*
* @xrefitem bom "File Content Label" "Release Content"
* @e project: CIMx-NB
* @e sub-project:
* @e \$Revision:$ @e \$Date:$
*
*/
/*****************************************************************************
*
* Copyright (C) 2012 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.
*
*
***************************************************************************/
#ifndef _NBLIB_H_
#define _NBLIB_H_
#pragma pack(push, 1)
/// NB_MCU_MODE
typedef enum {
AssertReset, ///< Assert reset
DeAssertReset ///< Deassert reset
} NB_MCU_MODE;
/// SMU Firmware revision
typedef struct {
UINT16 MajorRev; ///< Major revision
UINT16 MinorRev; ///< Minor revision
} SMU_FIRMWARE_REV;
/// Firmware block
typedef struct {
UINT16 Address; ///< Block Address
UINT16 Length; ///< Block length in DWORD
UINT32 *Data; ///< Pointer to data array
} SMU_FIRMWARE_BLOCK;
/// Firmware header
typedef struct {
SMU_FIRMWARE_REV Revision; ///< Revision info
UINT16 NumberOfBlock; ///< Number of blocks
SMU_FIRMWARE_BLOCK *BlockArray; ///< Pointer to block definition array
} SMU_FIRMWARE_HEADER;
NB_INFO
LibNbGetRevisionInfo (
IN AMD_NB_CONFIG *NbConfigPtr
);
AGESA_STATUS
LibNbCallBack (
IN UINT32 CallBackId,
IN OUT UINTN Data,
IN OUT AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciWrite (
IN UINT32 Address,
IN ACCESS_WIDTH Width,
IN VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciRead (
IN UINT32 Address,
IN ACCESS_WIDTH Width,
OUT VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciRMW (
IN UINT32 Address,
IN ACCESS_WIDTH Width,
IN UINT32 Mask,
IN UINT32 Data,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciIndexRead (
IN UINT32 Address,
IN UINT32 Index,
IN ACCESS_WIDTH Width,
OUT UINT32 *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciIndexWrite (
IN UINT32 Address,
IN UINT32 Index,
IN ACCESS_WIDTH Width,
IN UINT32 *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbPciIndexRMW (
IN UINT32 Address,
IN UINT32 Index,
IN ACCESS_WIDTH Width,
IN UINT32 Mask,
IN UINT32 Data,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbIndirectTableInit (
IN UINT32 Address,
IN UINT32 Index,
IN INDIRECT_REG_ENTRY *pTable,
IN UINTN Length,
IN AMD_NB_CONFIG *NbConfigPtr
);
UINT8
LibNbFindPciCapability (
IN UINT32 Address,
IN UINT8 CapabilityId,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbIoRMW (
IN UINT16 Address,
IN ACCESS_WIDTH Width,
IN UINT32 Mask,
IN UINT32 Data,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbCpuHTLinkPhyRead (
IN UINT8 Node,
IN UINT8 Link,
IN UINT16 Register,
OUT UINT32 *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbCpuHTLinkPhyWrite (
IN UINT8 Node,
IN UINT8 Link,
IN UINT16 Register,
IN UINT32 *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbCpuHTLinkPhyRMW (
IN UINT8 Node,
IN UINT8 Link,
IN UINT16 Register,
IN UINT32 Mask,
IN UINT32 Data,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbEnableClkConfig (
IN AMD_NB_CONFIG *pConfig
);
VOID
LibNbDisableClkConfig (
IN AMD_NB_CONFIG *pConfig
);
BOOLEAN
LibNbIsDevicePresent (
IN PCI_ADDR Device,
IN AMD_NB_CONFIG *NbConfigPtr
);
UINT32
LibNbBitReverse (
IN UINT32 Data,
IN UINT8 StartBit,
IN UINT8 StopBit
);
UINT32
LibNbGetCpuFamily (
VOID
);
VOID
LibNbIoWrite (
IN UINT16 Address,
IN ACCESS_WIDTH Width,
IN VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbIoRead (
IN UINT16 Address,
IN ACCESS_WIDTH Width,
OUT VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbLoadMcuFirmwareBlock (
IN UINT16 Address,
IN UINT16 Size,
IN UINT32 *FirmwareBlockPtr,
IN AMD_NB_CONFIG *NbConfigPtr
);
UINT32
LibNbReadMcuRam (
IN UINT16 Address,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbMcuControl (
IN NB_MCU_MODE Operation,
IN AMD_NB_CONFIG *NbConfigPtr
);
AGESA_STATUS
LibSystemApiCall (
IN SYSTEM_API SystemApi,
IN OUT AMD_NB_CONFIG_BLOCK *ConfigPtr
);
AGESA_STATUS
LibNbApiCall (
IN NB_API NbApi,
IN OUT AMD_NB_CONFIG_BLOCK *ConfigPtr
);
VOID
LibNbMemRMW (
IN UINT64 Address,
IN ACCESS_WIDTH Width,
IN UINT32 Mask,
IN UINT32 Data,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbMemRead (
IN UINT64 Address,
IN ACCESS_WIDTH Width,
IN VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
VOID
LibNbMemWrite (
IN UINT64 Address,
IN ACCESS_WIDTH Width,
OUT VOID *Value,
IN AMD_NB_CONFIG *NbConfigPtr
);
struct _PCI_SCAN_PROTOCOL;
typedef struct _PCI_SCAN_PROTOCOL PCI_SCAN_PROTOCOL;
typedef UINT32 SCAN_STATUS;
typedef SCAN_STATUS (*SCAN_ENTRY) (PCI_SCAN_PROTOCOL *This, PCI_ADDR Device);
#define SCAN_FINISHED 0x0
#define SCAN_STOP_DEVICE_ENUMERATION 0x1
#define SCAN_STOP_BUS_ENUMERATION 0x2
/// PCI topology scan protocol
struct _PCI_SCAN_PROTOCOL {
SCAN_ENTRY ScanBus; ///< Pointer to function to scan device on PCI bus.
SCAN_ENTRY ScanDevice; ///< Pointer to function to scan function on PCI device.
SCAN_ENTRY ScanFunction; ///< Pointer to scan PCI function.
AMD_NB_CONFIG *pConfig; ///< NB configuration info.
};
SCAN_STATUS
LibNbScanPciBus (
IN PCI_SCAN_PROTOCOL *This,
IN PCI_ADDR Device
);
SCAN_STATUS
LibNbScanPciDevice (
IN PCI_SCAN_PROTOCOL *This,
IN PCI_ADDR Device
);
SCAN_STATUS
LibNbScanPciBridgeBuses (
IN PCI_SCAN_PROTOCOL *This,
IN PCI_ADDR Bridge
);
VOID
LibNbSetDefaultIndexes (
IN AMD_NB_CONFIG *NbConfigPtr
);
UINT16
LibNbFindPcieExtendedCapability (
IN UINT32 Address,
IN UINT16 ExtendedCapabilityId,
IN AMD_NB_CONFIG *NbConfigPtr
);
BOOLEAN
LibNbIsIommuEnabled (
IN AMD_NB_CONFIG *NbConfigPtr
);
#pragma pack(pop)
#endif