Please bear with me - another rename checkin. This qualifies as trivial, no
[coreboot.git] / src / northbridge / amd / amdht / h3gtopo.h
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2007 Advanced Micro Devices, Inc.
5  *
6  * This program is free software * you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation * version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY * without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program * if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
18  */
19
20 #ifndef HTTOPO_H
21 #define HTTOPO_H
22
23 /*----------------------------------------------------------------------------
24  *   Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS)
25  *
26  *----------------------------------------------------------------------------
27  */
28
29 /*-----------------------------------------------------------------------------
30  *                      DEFINITIONS AND MACROS
31  *
32  *-----------------------------------------------------------------------------
33  */
34
35 /*----------------------------------------------------------------------------
36  *                      TYPEDEFS, STRUCTURES, ENUMS
37  *
38  *----------------------------------------------------------------------------
39  */
40
41 /*
42  *   0
43  */
44 static u8 const amdHtTopologySingleNode[] = {
45         0x01,
46         0x00, 0xFF      // Node 0
47 };
48
49 /*
50  *   0---1
51  */
52 static u8 const amdHtTopologyDualNode[] = {
53         0x02,
54         0x02, 0xFF, 0x00, 0x11, // Node 0
55         0x00, 0x00, 0x01, 0xFF  // Node 1
56 };
57
58 /*
59  *   2
60  *   |
61  *   |
62  *   0---1
63  */
64 static u8 const amdHtTopologyThreeLine[] = {
65         0x03,
66         0x06, 0xFF, 0x04, 0x11, 0x02, 0x22,     // Node 0
67         0x00, 0x00, 0x01, 0xFF, 0x00, 0x00,     // Node 1
68         0x00, 0x00, 0x00, 0x00, 0x01, 0xFF      // Node 2
69 };
70
71 /*
72  *   2
73  *   |\
74  *   |  \
75  *   0---1
76  */
77 static u8 const amdHtTopologyTriangle[] = {
78         0x03,
79         0x06, 0xFF, 0x00, 0x11, 0x00, 0x22,     // Node 0
80         0x00, 0x00, 0x05, 0xFF, 0x00, 0x22,     // Node 1
81         0x00, 0x00, 0x00, 0x11, 0x03, 0xFF      // Node 2
82 };
83
84 /*
85  *   2   3
86  *   |\  |
87  *   |  \|
88  *   0---1
89  */
90 static u8 const amdHtTopologyFourDegenerate[] = {
91         0x04,
92         0x06, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x11, // Node 0
93         0x08, 0x00, 0x0D, 0xFF, 0x08, 0x22, 0x05, 0x33, // Node 1
94         0x00, 0x00, 0x00, 0x11, 0x03, 0xFF, 0x00, 0x11, // Node 2
95         0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x02, 0xFF  // Node 3
96 };
97
98 /*
99  *   2---3
100  *   |\ /|
101  *   |/ \|
102  *   0---1
103  */
104 static u8 const amdHtTopologyFourFully[] = {
105         0x04,
106         0x0E, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, // Node 0
107         0x00, 0x00, 0x0D, 0xFF, 0x00, 0x22, 0x00, 0x33, // Node 1
108         0x00, 0x00, 0x00, 0x11, 0x0B, 0xFF, 0x00, 0x33, // Node 2
109         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x07, 0xFF  // Node 3
110 };
111
112
113 /*
114  *   2---3
115  *   |\  |
116  *   |  \|
117  *   0---1
118  */
119 static u8 const amdHtTopologyFourKite[] = {
120         0x04,
121         0x06, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x11, // Node 0
122         0x08, 0x00, 0x0D, 0xFF, 0x00, 0x22, 0x00, 0x33, // Node 1
123         0x00, 0x00, 0x00, 0x11, 0x0B, 0xFF, 0x01, 0x33, // Node 2
124         0x00, 0x22, 0x00, 0x11, 0x00, 0x22, 0x06, 0xFF  // Node 3
125 };
126
127
128 /*
129  *   2   3
130  *   |   |
131  *   |   |
132  *   0---1
133  */
134 static u8 const amdHtTopologyFourLine[] = {
135         0x04,
136         0x06, 0xFF, 0x04, 0x11, 0x02, 0x22, 0x04, 0x11, // Node 0
137         0x08, 0x00, 0x09, 0xFF, 0x08, 0x00, 0x01, 0x33, // Node 1
138         0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, // Node 2
139         0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x02, 0xFF  // Node 3
140 };
141
142
143 /*
144  *   2---3
145  *   |   |
146  *   |   |
147  *   0---1
148  */
149 static u8 const amdHtTopologyFourSquare[] = {
150         0x04,
151         0x06, 0xFF, 0x00, 0x11, 0x02, 0x22, 0x00, 0x22, // Node 0
152         0x00, 0x00, 0x09, 0xFF, 0x00, 0x33, 0x01, 0x33, // Node 1
153         0x08, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x00, 0x33, // Node 2
154         0x00, 0x11, 0x04, 0x11, 0x00, 0x22, 0x06, 0xFF, // Node 3
155 };
156
157
158 /*
159  *   2---3
160  *   |\
161  *   |  \
162  *   0   1
163  */
164 static u8 const amdHtTopologyFourStar[] = {
165         0x04,
166         0x04, 0xFF, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, // Node 0
167         0x00, 0x22, 0x04, 0xFF, 0x00, 0x22, 0x00, 0x22, // Node 1
168         0x0A, 0x00, 0x09, 0x11, 0x0B, 0xFF, 0x03, 0x33, // Node 2
169         0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x04, 0xFF, // Node 3
170 };
171
172
173 static u8 const amdHtTopologyFiveFully[] = {
174         0x05,
175         0x1E, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44,     // Node 0
176         0x00, 0x00, 0x1D, 0xFF, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44,     // Node 1
177         0x00, 0x00, 0x00, 0x11, 0x1B, 0xFF, 0x00, 0x33, 0x00, 0x44,     // Node 2
178         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x17, 0xFF, 0x00, 0x44,     // Node 3
179         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x0F, 0xFF      // Node 4
180 };
181
182
183 /*
184  *
185  *  4
186  *  |\
187  *  |  \
188  *  2   3
189  *  |   |
190  *  0---1
191  */
192 static u8 const amdHtTopologyFiveTwistedLadder[] = {
193         0x05,
194         0x06, 0xFF, 0x04, 0x11, 0x02, 0x22, 0x00, 0x11, 0x00, 0x22,     // Node0
195         0x08, 0x00, 0x09, 0xFF, 0x08, 0x00, 0x01, 0x33, 0x00, 0x30,     // Node1
196         0x10, 0x00, 0x10, 0x00, 0x11, 0xFF, 0x00, 0x40, 0x01, 0x44,     // Node2
197         0x00, 0x11, 0x00, 0x11, 0x00, 0x14, 0x12, 0xFF, 0x02, 0x44,     // Node3
198         0x00, 0x22, 0x00, 0x23, 0x00, 0x22, 0x04, 0x33, 0x0C, 0xFF      // Node4
199 };
200
201
202 static u8 const amdHtTopologySixFully[] = {
203         0x06,
204         0x3E, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, // Node 0
205         0x00, 0x00, 0x3D, 0xFF, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, // Node 1
206         0x00, 0x00, 0x00, 0x11, 0x3B, 0xFF, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, // Node 2
207         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x37, 0xFF, 0x00, 0x44, 0x00, 0x55, // Node 3
208         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x2F, 0xFF, 0x00, 0x55, // Node 4
209         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x1F, 0xFF  // Node 5
210 };
211
212 /*
213  *
214  *  4   5
215  *  |\ /|
216  *  |/ \|
217  *  2   3
218  *  |   |
219  *  0---1
220  */
221 static u8 const amdHtTopologySixTwistedLadder[] = {
222         0x06,
223         0x06, 0xFF, 0x04, 0x11, 0x02, 0x22, 0x00, 0x11, 0x02, 0x22, 0x00, 0x12, // Node0
224         0x08, 0x00, 0x09, 0xFF, 0x00, 0x00, 0x01, 0x33, 0x00, 0x03, 0x01, 0x33, // Node1
225         0x30, 0x00, 0x00, 0x00, 0x31, 0xFF, 0x00, 0x54, 0x21, 0x44, 0x00, 0x55, // Node2
226         0x00, 0x11, 0x30, 0x11, 0x00, 0x45, 0x32, 0xFF, 0x00, 0x44, 0x12, 0x55, // Node3
227         0x00, 0x22, 0x00, 0x32, 0x08, 0x22, 0x00, 0x33, 0x0C, 0xFF, 0x00, 0x32, // Node4
228         0x00, 0x23, 0x00, 0x33, 0x00, 0x22, 0x04, 0x33, 0x00, 0x23, 0x0C, 0xFF  // Node5
229 };
230
231
232 static u8 const amdHtTopologySevenFully[] = {
233         0x07,
234         0x7E, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66,     // Node 0
235         0x00, 0x00, 0x7D, 0xFF, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66,     // Node 1
236         0x00, 0x00, 0x00, 0x11, 0x7B, 0xFF, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66,     // Node 2
237         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x77, 0xFF, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66,     // Node 3
238         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x6F, 0xFF, 0x00, 0x55, 0x00, 0x66,     // Node 4
239         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x5F, 0xFF, 0x00, 0x66,     // Node 5
240         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x3F, 0xFF,     // Node 6
241 };
242
243
244 /*  6
245  *  |
246  *  4   5
247  *  |\ /|
248  *  |/ \|
249  *  2   3
250  *  |   |
251  *  0---1
252  */
253 static u8 const amdHtTopologySevenTwistedLadder[] = {
254         0x07,
255         0x06, 0xFF, 0x00, 0x11, 0x02, 0x22, 0x00, 0x12, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22,     // Node0
256         0x00, 0x00, 0x09, 0xFF, 0x00, 0x03, 0x01, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33,     // Node1
257         0x30, 0x00, 0x00, 0x50, 0x31, 0xFF, 0x00, 0x54, 0x21, 0x44, 0x01, 0x55, 0x21, 0x44,     // Node2
258         0x00, 0x41, 0x30, 0x11, 0x00, 0x45, 0x32, 0xFF, 0x02, 0x44, 0x12, 0x55, 0x02, 0x44,     // Node3
259         0x48, 0x22, 0x40, 0x33, 0x48, 0x22, 0x40, 0x33, 0x4C, 0xFF, 0x40, 0x32, 0x0C, 0x66,     // Node4
260         0x00, 0x22, 0x04, 0x33, 0x00, 0x22, 0x04, 0x33, 0x00, 0x23, 0x0C, 0xFF, 0x00, 0x23,     // Node5
261         0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x10, 0xFF      // Node6
262 };
263
264
265 /*
266  *   5--4
267  *  /####\
268  * 6######3
269  * |######|
270  * 7######2
271  *  \####/
272  *   0--1
273  */
274 static u8 const amdHtTopologyEightFully [] = {
275         0x08,
276         0xFE, 0xFF, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66, 0x00, 0x77, // Node 0
277         0x00, 0x00, 0xFD, 0xFF, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66, 0x00, 0x77, // Node 1
278         0x00, 0x00, 0x00, 0x11, 0xFB, 0xFF, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66, 0x00, 0x77, // Node 2
279         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0xF7, 0xFF, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66, 0x00, 0x77, // Node 3
280         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0xEF, 0xFF, 0x00, 0x55, 0x00, 0x66, 0x00, 0x77, // Node 4
281         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0xDF, 0xFF, 0x00, 0x66, 0x00, 0x77, // Node 5
282         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0xBF, 0xFF, 0x00, 0x77, // Node 6
283         0x00, 0x00, 0x00, 0x11, 0x00, 0x22, 0x00, 0x33, 0x00, 0x44, 0x00, 0x55, 0x00, 0x66, 0x7F, 0xFF  // Node 7
284 };
285
286
287 /*  6---7
288  *  |   |
289  *  4---5
290  *  |   |
291  *  2---3
292  *  |   |
293  *  0---1
294  */
295 static u8 const amdHtTopologyEightStraightLadder[] = {
296         0x08,
297         0x06, 0xFF, 0x00, 0x11, 0x02, 0x22, 0x00, 0x22, 0x02, 0x22, 0x00, 0x22, 0x02, 0x22, 0x00, 0x22, // Node0
298         0x00, 0x00, 0x09, 0xFF, 0x00, 0x33, 0x01, 0x33, 0x00, 0x33, 0x01, 0x33, 0x00, 0x33, 0x01, 0x33, // Node1
299         0x18, 0x00, 0x00, 0x00, 0x19, 0xFF, 0x00, 0x33, 0x09, 0x44, 0x00, 0x44, 0x09, 0x44, 0x00, 0x44, // Node2
300         0x00, 0x11, 0x24, 0x11, 0x00, 0x22, 0x26, 0xFF, 0x00, 0x55, 0x06, 0x55, 0x00, 0x55, 0x06, 0x55, // Node3
301         0x60, 0x22, 0x00, 0x22, 0x60, 0x22, 0x00, 0x22, 0x64, 0xFF, 0x00, 0x55, 0x24, 0x66, 0x00, 0x66, // Node4
302         0x00, 0x33, 0x90, 0x33, 0x00, 0x33, 0x90, 0x33, 0x00, 0x44, 0x98, 0xFF, 0x00, 0x77, 0x18, 0x77, // Node5
303         0x80, 0x44, 0x00, 0x44, 0x80, 0x44, 0x00, 0x44, 0x80, 0x44, 0x00, 0x44, 0x90, 0xFF, 0x00, 0x77, // Node6
304         0x00, 0x55, 0x40, 0x55, 0x00, 0x55, 0x40, 0x55, 0x00, 0x55, 0x40, 0x55, 0x00, 0x66, 0x60, 0xFF  // Node7
305 };
306
307
308 /*  6---7
309  *  |   |
310  *  4   5
311  *  |\ /|
312  *  |/ \|
313  *  2   3
314  *  |   |
315  *  0---1
316  */
317 static u8 const amdHtTopologyEightTwistedLadder[] = {
318         0x08,
319         0x06, 0xFF, 0x00, 0x11, 0x02, 0x22, 0x00, 0x12, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, // Node0
320         0x00, 0x00, 0x09, 0xFF, 0x00, 0x03, 0x01, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, // Node1
321         0x30, 0x00, 0x00, 0x50, 0x31, 0xFF, 0x00, 0x54, 0x21, 0x44, 0x01, 0x55, 0x21, 0x44, 0x01, 0x55, // Node2
322         0x00, 0x41, 0x30, 0x11, 0x00, 0x45, 0x32, 0xFF, 0x02, 0x44, 0x12, 0x55, 0x02, 0x44, 0x12, 0x55, // Node3
323         0x48, 0x22, 0x40, 0x33, 0x48, 0x22, 0x40, 0x33, 0x4C, 0xFF, 0x00, 0x32, 0x0C, 0x66, 0x00, 0x36, // Node4
324         0x80, 0x22, 0x84, 0x33, 0x80, 0x22, 0x84, 0x33, 0x00, 0x23, 0x8C, 0xFF, 0x00, 0x27, 0x0C, 0x77, // Node5
325         0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x80, 0x44, 0x00, 0x74, 0x90, 0xFF, 0x00, 0x77, // Node6
326         0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x65, 0x40, 0x55, 0x00, 0x66, 0x60, 0xFF  // Node7
327 };
328
329 static const u8 * const amd_topo_list[] = {
330         amdHtTopologySingleNode,
331         amdHtTopologyDualNode,
332         amdHtTopologyThreeLine,
333         amdHtTopologyTriangle,
334         amdHtTopologyFourLine,
335         amdHtTopologyFourStar,
336         amdHtTopologyFourDegenerate,
337         amdHtTopologyFourSquare,
338         amdHtTopologyFourKite,
339         amdHtTopologyFourFully,
340         amdHtTopologyFiveFully,
341         amdHtTopologySixFully,
342         amdHtTopologySevenFully,
343         amdHtTopologyEightFully,
344         amdHtTopologyEightTwistedLadder,
345         amdHtTopologyEightStraightLadder,
346         NULL                    // NULL to mark end of list
347 };
348
349 /*----------------------------------------------------------------------------
350  *                      FUNCTIONS PROTOTYPE
351  *
352  *----------------------------------------------------------------------------
353  */
354 void getAmdTopolist(u8 ***p);
355
356
357 #endif   /* HTTOPO_H */
358