AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Include / OptionDmiInstall.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * Install of build option: DMI
6  *
7  * Contains AMD AGESA install macros and test conditions. Output is the
8  * defaults tables reflecting the User's build options selection.
9  *
10  * @xrefitem bom "File Content Label" "Release Content"
11  * @e project:      AGESA
12  * @e sub-project:  Options
13  * @e \$Revision: 44324 $   @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
14  */
15 /*****************************************************************************
16  *
17  * Copyright (C) 2012 Advanced Micro Devices, Inc.
18  * All rights reserved.
19  *
20  * Redistribution and use in source and binary forms, with or without
21  * modification, are permitted provided that the following conditions are met:
22  *     * Redistributions of source code must retain the above copyright
23  *       notice, this list of conditions and the following disclaimer.
24  *     * Redistributions in binary form must reproduce the above copyright
25  *       notice, this list of conditions and the following disclaimer in the
26  *       documentation and/or other materials provided with the distribution.
27  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
28  *       its contributors may be used to endorse or promote products derived
29  *       from this software without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
32  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
33  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
34  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
38  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  *
42  *
43  ***************************************************************************/
44
45 #ifndef _OPTION_DMI_INSTALL_H_
46 #define _OPTION_DMI_INSTALL_H_
47
48 #include "cpuLateInit.h"
49
50 /*  This option is designed to be included into the platform solution install
51  *  file. The platform solution install file will define the options status.
52  *  Check to validate the definition
53  */
54 #if AGESA_ENTRY_INIT_LATE == TRUE
55   #ifndef OPTION_DMI
56     #error  BLDOPT: Option not defined: "OPTION_DMI"
57   #endif
58   #if OPTION_DMI == TRUE
59     OPTION_DMI_FEATURE          GetDmiInfoMain;
60     OPTION_DMI_RELEASE_BUFFER   ReleaseDmiBuffer;
61     #define USER_DMI_OPTION     &GetDmiInfoMain
62     #define USER_DMI_RELEASE_BUFFER &ReleaseDmiBuffer
63
64     // This additional check keeps AP launch routines from being unnecessarily included
65     // in single socket systems.
66     #if OPTION_MULTISOCKET == TRUE
67       #undef AGESA_ENTRY_LATE_RUN_AP_TASK
68       #define AGESA_ENTRY_LATE_RUN_AP_TASK TRUE
69       #define CPU_DMI_AP_GET_TYPE4_TYPE7 {AP_LATE_TASK_GET_TYPE4_TYPE7, (IMAGE_ENTRY) GetType4Type7Info},
70     #else
71       #define CPU_DMI_AP_GET_TYPE4_TYPE7
72     #endif
73
74     // Family 10
75     #ifdef OPTION_FAMILY10H
76       #if OPTION_FAMILY10H == TRUE
77         extern PROC_FAMILY_TABLE ProcFamily10DmiTable;
78         #define FAM10_DMI_SUPPORT FAM10_ENABLED,
79         #define FAM10_DMI_TABLE &ProcFamily10DmiTable,
80       #else
81         #define FAM10_DMI_SUPPORT
82         #define FAM10_DMI_TABLE
83       #endif
84     #else
85       #define FAM10_DMI_SUPPORT
86       #define FAM10_DMI_TABLE
87     #endif
88
89     // Family 12
90     #ifdef OPTION_FAMILY12H
91       #if OPTION_FAMILY12H == TRUE
92         extern PROC_FAMILY_TABLE ProcFamily12DmiTable;
93         #define FAM12_DMI_SUPPORT FAM12_ENABLED,
94         #define FAM12_DMI_TABLE &ProcFamily12DmiTable,
95       #else
96         #define FAM12_DMI_SUPPORT
97         #define FAM12_DMI_TABLE
98       #endif
99     #else
100       #define FAM12_DMI_SUPPORT
101       #define FAM12_DMI_TABLE
102     #endif
103
104     // Family 14
105     #ifdef OPTION_FAMILY14H
106       #if OPTION_FAMILY14H == TRUE
107         extern PROC_FAMILY_TABLE ProcFamily14DmiTable;
108         #define FAM14_DMI_SUPPORT FAM14_ENABLED,
109         #define FAM14_DMI_TABLE &ProcFamily14DmiTable,
110       #else
111         #define FAM14_DMI_SUPPORT
112         #define FAM14_DMI_TABLE
113       #endif
114     #else
115       #define FAM14_DMI_SUPPORT
116       #define FAM14_DMI_TABLE
117     #endif
118
119     // Family 15
120     #ifdef OPTION_FAMILY15H
121       #if OPTION_FAMILY15H == TRUE
122         #if OPTION_FAMILY15H_OR == TRUE
123           extern PROC_FAMILY_TABLE ProcFamily15OrDmiTable;
124           #define FAM15_OR_DMI_SUPPORT FAM15_OR_ENABLED,
125           #define FAM15_OR_DMI_TABLE &ProcFamily15OrDmiTable,
126         #else
127           #define FAM15_OR_DMI_SUPPORT
128           #define FAM15_OR_DMI_TABLE
129         #endif
130         #if OPTION_FAMILY15H_TN == TRUE
131           extern PROC_FAMILY_TABLE ProcFamily15TnDmiTable;
132           #define FAM15_TN_DMI_SUPPORT FAM15_TN_ENABLED,
133           #define FAM15_TN_DMI_TABLE &ProcFamily15TnDmiTable,
134         #else
135           #define FAM15_TN_DMI_SUPPORT
136           #define FAM15_TN_DMI_TABLE
137         #endif
138       #else
139         #define FAM15_OR_DMI_SUPPORT
140         #define FAM15_OR_DMI_TABLE
141         #define FAM15_TN_DMI_SUPPORT
142         #define FAM15_TN_DMI_TABLE
143       #endif
144     #else
145       #define FAM15_OR_DMI_SUPPORT
146       #define FAM15_OR_DMI_TABLE
147       #define FAM15_TN_DMI_SUPPORT
148       #define FAM15_TN_DMI_TABLE
149     #endif
150
151   #else
152     OPTION_DMI_FEATURE          GetDmiInfoStub;
153     OPTION_DMI_RELEASE_BUFFER   ReleaseDmiBufferStub;
154     #define USER_DMI_OPTION     GetDmiInfoStub
155     #define USER_DMI_RELEASE_BUFFER ReleaseDmiBufferStub
156     #define FAM10_DMI_SUPPORT
157     #define FAM10_DMI_TABLE
158     #define FAM12_DMI_SUPPORT
159     #define FAM12_DMI_TABLE
160     #define FAM14_DMI_SUPPORT
161     #define FAM14_DMI_TABLE
162     #define FAM15_OR_DMI_SUPPORT
163     #define FAM15_OR_DMI_TABLE
164     #define FAM15_TN_DMI_SUPPORT
165     #define FAM15_TN_DMI_TABLE
166     #define CPU_DMI_AP_GET_TYPE4_TYPE7
167   #endif
168 #else
169   OPTION_DMI_FEATURE          GetDmiInfoStub;
170   OPTION_DMI_RELEASE_BUFFER   ReleaseDmiBufferStub;
171   #define USER_DMI_OPTION     GetDmiInfoStub
172   #define USER_DMI_RELEASE_BUFFER ReleaseDmiBufferStub
173   #define FAM10_DMI_SUPPORT
174   #define FAM10_DMI_TABLE
175   #define FAM12_DMI_SUPPORT
176   #define FAM12_DMI_TABLE
177   #define FAM14_DMI_SUPPORT
178   #define FAM14_DMI_TABLE
179   #define FAM15_OR_DMI_SUPPORT
180   #define FAM15_OR_DMI_TABLE
181   #define FAM15_TN_DMI_SUPPORT
182   #define FAM15_TN_DMI_TABLE
183   #define CPU_DMI_AP_GET_TYPE4_TYPE7
184 #endif
185
186 /// DMI supported families enum
187 typedef enum {
188   FAM10_DMI_SUPPORT                   ///< Conditionally define F10 support
189   FAM12_DMI_SUPPORT                   ///< Conditionally define F12 support
190   FAM14_DMI_SUPPORT                   ///< Conditionally define F14 support
191   FAM15_OR_DMI_SUPPORT                ///< Conditionally define F15 OR support
192   FAM15_TN_DMI_SUPPORT                ///< Conditionally define F15 TN support
193   NUM_DMI_FAMILIES                    ///< Number of installed families
194 } AGESA_DMI_SUPPORTED_FAM;
195
196 /*  Declare the Family List. An array of pointers to tables that each describe a family  */
197 CONST PROC_FAMILY_TABLE ROMDATA *ProcTables[] = {
198   FAM10_DMI_TABLE
199   FAM12_DMI_TABLE
200   FAM14_DMI_TABLE
201   FAM15_OR_DMI_TABLE
202   FAM15_TN_DMI_TABLE
203   NULL
204 };
205
206 /*  Declare the instance of the DMI option configuration structure  */
207 CONST OPTION_DMI_CONFIGURATION ROMDATA OptionDmiConfiguration = {
208   DMI_STRUCT_VERSION,
209   USER_DMI_OPTION,
210   USER_DMI_RELEASE_BUFFER,
211   NUM_DMI_FAMILIES,
212   (VOID *((*)[])) &ProcTables           // Compiler says array size must match struct decl
213 };
214
215 #endif  // _OPTION_DMI_INSTALL_H_