blob: 193cc6506c9bb6d67f8730e4db3c1be60ef38db8 [file] [log] [blame]
/* $NoKeywords:$ */
/**
* @file
*
* PSP directory related functions Prototype definition
*
*
* @xrefitem bom "File Content Label" "Release Content"
* @e project: AGESA
* @e sub-project: PSP
* @e \$Revision: 309090 $ @e \$Date: 2014-12-09 12:28:05 -0600 (Tue, 09 Dec 2014) $
*/
/*****************************************************************************
*
* Copyright (c) 2008 - 2015, 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 _PSP_DIRECTORY_H_
#define _PSP_DIRECTORY_H_
#define FIRMWARE_TABLE_SIGNATURE 0x55AA55AAul
/// Define the structure OEM signature table
typedef struct _FIRMWARE_ENTRY_TABLE {
UINT32 Signature; ///< Signature should be 0x55AA55AAul
UINT32 ImcRomBase; ///< Base Address for Imc Firmware
UINT32 GecRomBase; ///< Base Address for Gmc Firmware
UINT32 XHCRomBase; ///< Base Address for XHCI Firmware
UINT32 PspDirBase; ///< Base Address for PSP directory
} FIRMWARE_ENTRY_TABLE;
/// Define structure for PSP directory
typedef struct {
UINT32 PspCookie; ///< "$PSP"
UINT32 Checksum; ///< 32 bit CRC of header items below and the entire table
UINT32 TotalEntries; ///< Number of PSP Entries
UINT32 Reserved; ///< Unused
} PSP_DIRECTORY_HEADER;
/// define various enum type for PSP entry type
enum _PSP_DIRECTORY_ENTRY_TYPE {
AMD_PUBLIC_KEY = 0, ///< PSP entry pointer to AMD public key
PSP_FW_BOOT_LOADER = 1, ///< PSP entry points to PSP boot loader in SPI space
PSP_FW_TRUSTED_OS = 2, ///< PSP entry points to PSP Firmware region in SPI space
PSP_FW_RECOVERY_BOOT_LOADER = 3, ///< PSP entry point to PSP recovery region.
PSP_NV_DATA = 4, ///< PSP entry points to PSP data region in SPI space
BIOS_PUBLIC_KEY = 5, ///< PSP entry points to BIOS public key stored in SPI space
BIOS_RTM_FIRMWARE = 6, ///< PSP entry points to BIOS RTM code (PEI volume) in SPI space
BIOS_RTM_SIGNATURE = 7, ///< PSP entry points to signed BIOS RTM hash stored in SPI space
SMU_OFFCHIP_FW = 8 ///< PSP entry points to SMU image
};
typedef UINT32 PSP_DIRECTORY_ENTRY_TYPE;
/// Structure for PSP Entry
typedef struct {
PSP_DIRECTORY_ENTRY_TYPE Type; ///< Type of PSP entry; 32 bit long
UINT32 Size; ///< Size of PSP Entry in bytes
UINT64 Location; ///< Location of PSP Entry (byte offset from start of SPI-ROM)
} PSP_DIRECTORY_ENTRY;
/// Structure for PSP directory
typedef struct {
PSP_DIRECTORY_HEADER Header; ///< PSP directory header
PSP_DIRECTORY_ENTRY PspEntry[1]; ///< Array of PSP entries each pointing to a binary in SPI flash
///< The actual size of this array comes from the
///< header (PSP_DIRECTORY.Header.TotalEntries)
} PSP_DIRECTORY;
#endif //_PSP_DIRECTORY_H_