blob: 736edabf870f4ef26718bc9911c57dee074221c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/* $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
|