AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Include / IdsHt.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * AMD IDS HyperTransport Definitions
6  *
7  * Contains AMD AGESA Integrated Debug HT related items.
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project:      AGESA
11  * @e sub-project:  IDS
12  * @e \$Revision: 44324 $   @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
13  */
14 /*****************************************************************************
15  *
16  * Copyright (C) 2012 Advanced Micro Devices, Inc.
17  * All rights reserved.
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions are met:
21  *     * Redistributions of source code must retain the above copyright
22  *       notice, this list of conditions and the following disclaimer.
23  *     * Redistributions in binary form must reproduce the above copyright
24  *       notice, this list of conditions and the following disclaimer in the
25  *       documentation and/or other materials provided with the distribution.
26  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
27  *       its contributors may be used to endorse or promote products derived
28  *       from this software without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
31  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
34  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  *
42  ***************************************************************************/
43
44 #ifndef _IDS_HT_H_
45 #define _IDS_HT_H_
46
47 // Frequency equates for call backs which take an actual frequency setting
48 #define HT_FREQUENCY_200M            0
49 #define HT_FREQUENCY_400M            2
50 #define HT_FREQUENCY_600M            4
51 #define HT_FREQUENCY_800M            5
52 #define HT_FREQUENCY_1000M           6
53 #define HT_FREQUENCY_1200M           7
54 #define HT_FREQUENCY_1400M           8
55 #define HT_FREQUENCY_1600M           9
56 #define HT_FREQUENCY_1800M           10
57 #define HT_FREQUENCY_2000M           11
58 #define HT_FREQUENCY_2200M           12
59 #define HT_FREQUENCY_2400M           13
60 #define HT_FREQUENCY_2600M           14
61 #define HT_FREQUENCY_2800M           17
62 #define HT_FREQUENCY_3000M           18
63 #define HT_FREQUENCY_3200M           19
64 #define HT_FREQUENCY_3600M           20
65
66 /**
67  * HT IDS: HT Link Port Override params.
68  *
69  * Provide an absolute override of HT Link Port settings.  No checking is done that
70  * the settings obey limits or capabilities, this responsibility rests with the user.
71  *
72  * Rules for values of structure items:
73  * - Socket
74  *   - HT_LIST_TERMINAL == end of port override list, rest of item is not accessed
75  *   - HT_LIST_MATCH_ANY == Match Any Socket
76  *   - 0 .. 7 == The matching socket
77  * - Link
78  *   - HT_LIST_MATCH_ANY == Match Any package link (that is not the internal links)
79  *   - HT_LIST_MATCH_INTERNAL_LINK == Match the internal links
80  *   - 0 .. 7 == The matching package link.  0 .. 3 are the ganged links or sublink 0's, 4 .. 7 are the sublink1's.
81  * - Frequency
82  *   - HT_LIST_TERMINAL == Do not override the frequency, AUTO setting
83  *   - HT_FREQUENCY_200M .. HT_FREQUENCY_3600M = The frequency value to use
84  * - Widthin
85  *   - HT_LIST_TERMINAL == Do not override the width, AUTO setting
86  *   - 2, 4, 8, 16, 32 == The width value to use
87  * - Widthout
88  *   - HT_LIST_TERMINAL == Do not override the width, AUTO setting
89  *   - 2, 4, 8, 16, 32 == The width value to use
90  */
91 typedef struct {
92   // Match Fields
93   UINT8       Socket;      ///< The Socket which this port is on.
94   UINT8       Link;        ///< The port for this package link on that socket.
95   // Override fields
96   UINT8       Frequency;   ///< Absolutely override the port's frequency.
97   UINT8       WidthIn;     ///< Absolutely override the port's width.
98   UINT8       WidthOut;    ///< Absolutely override the port's width.
99 } HTIDS_PORT_OVERRIDE;
100
101 /**
102  * A list of port overrides to search.
103  */
104 typedef HTIDS_PORT_OVERRIDE *HTIDS_PORT_OVERRIDE_LIST;
105 VOID
106 HtIdsGetPortOverride (
107   IN       BOOLEAN                    IsSourcePort,
108   IN OUT   PORT_DESCRIPTOR            *Port0,
109   IN OUT   PORT_DESCRIPTOR            *Port1,
110   IN OUT   HTIDS_PORT_OVERRIDE_LIST   *PortOverrideList,
111   IN       STATE_DATA                 *State
112   );
113
114 typedef
115 VOID
116 F_HtIdsGetPortOverride (
117   IN       BOOLEAN                    IsSourcePort,
118   IN OUT   PORT_DESCRIPTOR            *Port0,
119   IN OUT   PORT_DESCRIPTOR            *Port1,
120   IN OUT   HTIDS_PORT_OVERRIDE_LIST   *PortOverrideList,
121   IN       STATE_DATA                 *State
122   );
123 typedef F_HtIdsGetPortOverride* PF_HtIdsGetPortOverride;
124 #endif // _IDS_HT_H