AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / HT / htGraph.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * Topology Interface.
6  *
7  * Contains interface to the topology data.
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project:      AGESA
11  * @e sub-project:  HyperTransport
12  * @e \$Revision: 44324 $   @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
13  *
14  */
15 /*
16  *****************************************************************************
17  *
18  * Copyright (C) 2012 Advanced Micro Devices, Inc.
19  * All rights reserved.
20  *
21  * Redistribution and use in source and binary forms, with or without
22  * modification, are permitted provided that the following conditions are met:
23  *     * Redistributions of source code must retain the above copyright
24  *       notice, this list of conditions and the following disclaimer.
25  *     * Redistributions in binary form must reproduce the above copyright
26  *       notice, this list of conditions and the following disclaimer in the
27  *       documentation and/or other materials provided with the distribution.
28  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
29  *       its contributors may be used to endorse or promote products derived
30  *       from this software without specific prior written permission.
31  *
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
36  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
39  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * ***************************************************************************
44  *
45  */
46
47 #ifndef _HT_GRAPH_H_
48 #define _HT_GRAPH_H_
49
50 /**
51  * @page htgraphdesign Graph Support routines
52  *
53  * These routines provide support for dealing with the graph representation
54  * of the topologies, along with the routing table information for that topology.
55  * The routing information is compressed and these routines currently decompress
56  * 'on the fly'.  A graph is represented as a set of routes. All the edges in the
57  * graph are routes; a direct route from Node i to Node j exists in the graph IFF
58  * there is an edge directly connecting Node i to Node j.  All other routes designate
59  * the edge which the route to that Node initially takes, by designating a Node
60  * to which a direct connection exists.  That is, the route to non-adjacent Node j
61  * from Node i specifies Node k where Node i directly connects to Node k.
62  *
63  *@code
64  * pseudo definition of compressed graph:
65  * typedef struct
66  * {
67  *     // First byte
68  *     UINT8 broadcast[8]:1;   // that is, 8 1-bit values
69  *     // Second byte
70  *     UINT8 requestRoute:4;   // [3:0]
71  *     UINT8 responseRoute:4;  // [7:4]
72  * } sRoute;
73  * typedef struct
74  * {
75  *     UINT8 size;
76  *     sRoute graph[size][size];
77  * } sGraph;
78  *@endcode
79  */
80
81 /*----------------------------------------------------------------------------
82  *   Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS)
83  *
84  *----------------------------------------------------------------------------
85  */
86
87 /*-----------------------------------------------------------------------------
88  *                         DEFINITIONS AND MACROS
89  *
90  *-----------------------------------------------------------------------------
91  */
92
93 /*----------------------------------------------------------------------------
94  *                         TYPEDEFS, STRUCTURES, ENUMS
95  *
96  *----------------------------------------------------------------------------
97  */
98
99
100 /*----------------------------------------------------------------------------
101  *                           FUNCTIONS PROTOTYPE
102  *
103  *----------------------------------------------------------------------------
104  */
105 VOID
106 GetAmdTopolist (
107   OUT   UINT8    ***List
108   );
109
110 UINT8
111 GraphHowManyNodes (
112   IN       UINT8    *Graph
113   );
114
115 BOOLEAN
116 GraphIsAdjacent (
117   IN       UINT8    *Graph,
118   IN       UINT8    NodeA,
119   IN       UINT8    NodeB
120   );
121
122 UINT8
123 GraphGetRsp (
124   IN       UINT8    *Graph,
125   IN       UINT8    NodeA,
126   IN       UINT8    NodeB
127   );
128
129 UINT8
130 GraphGetReq (
131   IN       UINT8    *Graph,
132   IN       UINT8    NodeA,
133   IN       UINT8    NodeB
134   );
135
136 UINT8
137 GraphGetBc (
138   IN       UINT8    *Graph,
139   IN       UINT8    NodeA,
140   IN       UINT8    NodeB
141   );
142
143 #endif  /* _HT_GRAPH_H_ */
144