/* $NoKeywords */ /** * @file * * Wtf_Reg.h * * Contains Where's-The-Firmware (WTF) definitions and Macros. * * @xrefitem bom "File Content Label" "Release Content" * @e project: FDK * @e sub-project: UEFI * @e version: $Revision: 334098 $ @e date: $Date: 2016-01-08 14:21:15 -0600 (Fri, 08 Jan 2016) $ * */ /***************************************************************************** * * Copyright 2013 - 2016 ADVANCED MICRO DEVICES, INC. All Rights Reserved. * * This program and the accompanying materials are licensed and made available * under the terms and conditions of the BSD License which accompanies this * distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR * IMPLIED. * ***************************************************************************/ #ifndef __WTF_REG__H_ #define __WTF_REG__H_ #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------------------- * D E F I N I T I O N S A N D M A C R O S *---------------------------------------------------------------------------------------- */ #define WTF_STATUS_REG 0xE0000000 // "Where's The Firmware" Register #define WTF_STATUS_REG_SIZE 32 #define WTF_STATUS_ERROR_SIZE 12 #define WTF_STATUS_POST_SIZE 10 #define WTF_STATUS_FW_INDICATOR_SIZE 2 #define WTF_STATUS_BT_CHKSUMFAIL_SIZE 1 #define WTF_STATUS_ERROR_SHIFT 0 #define WTF_STATUS_POST_SHIFT 12 #define WTF_STATUS_FW_INDICATOR_SHIFT 22 #define WTF_STATUS_BT_CHKSUMFAIL_SHIFT 31 #define WTF_STATUS_ERROR_MASK 0x00000FFF #define WTF_STATUS_POST_MASK 0x003FF000 #define WTF_STATUS_FW_INDICATOR_MASK 0x00C00000 #define WTF_STATUS_BT_CHKSUMFAIL_MASK 0x80000000 #define WTF_STATUS_MASK \ (WTF_STATUS_ERROR_MASK | \ WTF_STATUS_POST_MASK | \ WTF_STATUS_FW_INDICATOR_MASK | \ WTF_STATUS_BT_CHKSUMFAIL_MASK) #define WTF_STATUS_DEFAULT 0x00000000 #define WTF_STATUS_FW_INDICATOR_UEFI 0x2 #define WTF_STATUS_GET_ERROR(wtf_status) \ ((wtf_status & WTF_STATUS_ERROR_MASK) >> WTF_STATUS_ERROR_SHIFT) #define WTF_STATUS_GET_POST(wtf_status) \ ((wtf_status & WTF_STATUS_POST_MASK) >> WTF_STATUS_POST_SHIFT) #define WTF_STATUS_GET_FW_INDICATOR(wtf_status) \ ((wtf_status & WTF_STATUS_FW_INDICATOR_MASK) >> WTF_STATUS_FW_INDICATOR_SHIFT) #define WTF_STATUS_GET_BT_CHKSUMFAIL(wtf_status) \ ((wtf_status & WTF_STATUS_BT_CHECKSUMFAIL_MASK) >> WTF_STATUS_BT_CHECKSUMFAIL_SHIFT) #define WTF_STATUS_SET_ERROR(error) { \ UINT32 wtf_status_reg; \ wtf_status_reg = MmioRead32 (WTF_STATUS_REG); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_ERROR_MASK) | (error << WTF_STATUS_ERROR_SHIFT); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_FW_INDICATOR_MASK) | (WTF_STATUS_FW_INDICATOR_UEFI << WTF_STATUS_FW_INDICATOR_SHIFT); \ MmioWrite32 (WTF_STATUS_REG, wtf_status_reg); \ } #define WTF_STATUS_SET_POST(post) { \ UINT32 wtf_status_reg; \ wtf_status_reg = MmioRead32 (WTF_STATUS_REG); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_POST_MASK) | (post << WTF_STATUS_POST_SHIFT); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_FW_INDICATOR_MASK) | (WTF_STATUS_FW_INDICATOR_UEFI << WTF_STATUS_FW_INDICATOR_SHIFT); \ MmioWrite32 (WTF_STATUS_REG, wtf_status_reg); \ } #define WTF_STATUS_SET_FW_INDICATOR(fwindicator) { \ UINT32 wtf_status_reg; \ wtf_status_reg = MmioRead32 (WTF_STATUS_REG); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_FW_INDICATOR_MASK) | (fwindicator << WTF_STATUS_FW_INDICATOR_SHIFT); \ MmioWrite32 (WTF_STATUS_REG, wtf_status_reg); \ } #define WTF_STATUS_SET_BT_CHKSUMFAIL(btchksmfail) { \ UINT32 wtf_status_reg; \ wtf_status_reg = MmioRead32 (WTF_STATUS_REG); \ wtf_status_reg = (wtf_status_reg & ~WTF_STATUS_BT_CHKSUMFAIL_MASK) | (btchksmfail << WTF_STATUS_BT_CHKSUMFAIL_SHIFT); \ MmioWrite32 (WTF_STATUS_REG, wtf_status_reg); \ } /*---------------------------------------------------------------------------------------- * T Y P E D E F S A N D S T R U C T U R E S *---------------------------------------------------------------------------------------- */ /// WTF Status Structure typedef struct _WTF_STATUS_T { UINT64 error : WTF_STATUS_ERROR_SIZE; ///< WTF Status Error Size UINT64 post : WTF_STATUS_POST_SIZE; ///< WTF Status Post Size UINT64 fwindicator : WTF_STATUS_FW_INDICATOR_SIZE; ///< WTF Status Firmware Indicator Size UINT64 reserved : 7; ///< Reserved UINT64 btchksmfail : WTF_STATUS_BT_CHKSUMFAIL_SIZE; ///< WTF Status Bit Checksum Fail Size } WTF_STATUS_T; /// WTF Status Union typedef union { UINT32 val : 32; ///< Value WTF_STATUS_T f; ///< WTF Status Structure } WTF_STATUS_U; /****** DO NOT WRITE BELOW THIS LINE *******/ #ifdef __cplusplus } #endif #endif