Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / devices / schizo / include / safari_interface.h
CommitLineData
920dae64
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: safari_interface.h
5* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
6* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
7*
8* The above named program is free software; you can redistribute it and/or
9* modify it under the terms of the GNU General Public
10* License version 2 as published by the Free Software Foundation.
11*
12* The above named program is distributed in the hope that it will be
13* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15* General Public License for more details.
16*
17* You should have received a copy of the GNU General Public
18* License along with this work; if not, write to the Free Software
19* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
20*
21* ========== Copyright Header End ============================================
22*/
23/*
24 * Copyright (C) 1991, Sun Microsystems, Inc.
25 */
26
27#ifndef _SAFARI_INTERFACE_H_
28#define _SAFARI_INTERFACE_H_
29
30#pragma ident "@(#)1.1 01/08/23 safari_interface.h"
31
32#include "types.h"
33
34
35/* the page numbers (e.g., pp 122) are corresponding to Excalibur
36 * Architecture Manual, revision 1.0, January 10, 2000 */
37
38/* pp 122 */
39#define SAFARI_DEVICE_ID_REG 0x000000
40#define UPA0_ADDR_MATCH_REG 0x400000
41#define UPA0_ADDR_MASK_REG 0x400008
42#define UPA1_ADDRESS_MATCH_REG 0x400010
43#define UPA1_ADDR_MASK_REG 0x400018
44#define NEWLINK_ADDR_MATCH_REG 0x400020
45#define NEWLINK_ADDR_MASK_REG 0x400028
46#define NEWLINKALT_ADDR_MATCH_REG 0x400030
47#define NEWLINKALT_ADDR_MASK_REG 0x400038
48#define PCI_A_MEM_ADDR_MATCH_REG 0x400040
49#define PCI_A_MEM_ADDR_MASK_REG 0x400048
50#define PCI_A_CONFIG_ADDR_MATCH_REG 0x400050
51#define PCI_A_CONFIG_ADDR_MASK_REG 0x400058
52#define PCI_B_MEM_ADDR_MATCH_REG 0x400060
53#define PCI_B_MEM_ADDR_MASK_REG 0x400068
54#define PCI_B_CONFIG_ADDR_MATCH_REG 0x400070
55#define PCI_B_CONFIG_ADDR_MASK_REG 0x400078
56#define SCHIZO_CSR_REG 0x410000
57#define ECC_CONTROL_REG 0x410020
58#define UE_AFSR 0x410030
59#define UE_AFAR 0x410038
60#define CE_AFSR 0x410040
61#define CE_AFAR 0x410048
62#define FFB0_CONFIG_REG 0x480000 // UPA0, pp 125
63#define FFB1_CONFIG_REG 0x480008 // UPA1
64
65/*
66 * This file contains definitions of the safari interace block registers
67 */
68
69/* to play it safe, don't let bit field cross 32bit boundary,
70 * uint64_t bit-field can only be used in 64bit mode */
71
72typedef struct s_safari_dev_id { /* pp 142 */
73 Word cookie:8; /* [63:56] -r 0xfc */
74 Word rsvd1:24; /* [55:27] -r 0x0 */
75 Word rsvd2:5;
76 Word node_id:5; /* [26:22] -r 0x0 */
77 Word agent_id:5; /* [21:17] -r 0x8 */
78 Word m_s:1; /* [16] -r 0x1 */
79 Word mid:6; /* [15:10] -r */
80 Word mt:6; /* [9:4] -r */
81 Word mr:4; /* [3:0] -r 0x0 */
82} s_safari_dev_id;
83
84typedef union u_safari_dev_id {
85 s_safari_dev_id s;
86 LWord l;
87} u_safari_dev_id;
88
89/* UPA64S, PCI A, and PCI B use the same address mask register format and
90 * address match register format. pp 144 */
91
92typedef struct s_Addr_Match_Reg {
93 unsigned v:1; /* 63, -rw, 0 */
94 unsigned rsvd1:20; /* 62:43, -r, 0x00000 */
95 unsigned match1:11; /* 42:24, -rw */
96 unsigned match2:8;
97 unsigned rsvd2:24; /* 23:0, -r, 0x000000 */
98} s_Addr_Match_Reg;
99
100union u_Addr_Match_Reg {
101 s_Addr_Match_Reg s;
102 uint64_t l;
103} u_Addr_Match_Reg;
104
105typedef struct s_Addr_Mask_Reg {
106 unsigned rsvd1:21; /* 63:43, -r, 0x000000 */
107 unsigned mask1:7; /* 42:36, -r, 0x7f */
108 unsigned mask2:4; /* 35:24, -rw */
109 unsigned mask3:8;
110 unsigned rsvd2:24; /* 23:0, -r, 0x000000 */
111} s_Addr_Mask_Reg;
112
113union u_Addr_Mask_Reg {
114 s_Addr_Mask_Reg s;
115 uint64_t l;
116} u_Addr_Mask_Reg;
117
118/* NewLink is not used in Excalibur */
119
120typedef struct s_NewLinkBase_addr_match {
121 Word v:1; /*[63] -rw */
122 Word rsvd:20; /*[62:43]-r0 */
123 Word MatchAddr1:10; /*[42:33]-rw */
124 Word MatchAddr2:1; /*[32]-r0 */
125 Word MatchAddr3:32; /*[31:0]-r0 */
126} s_NewLinkBase_addr_match;
127
128union u_NewLinkBase_addr_match {
129 s_NewLinkBase_addr_match s;
130 LWord l;
131} u_NewLinkBase_addr_match;
132
133typedef struct s_NewLinkAltBase_addr_match {
134 Word v:1; /*[63] -rw */
135 Word rsvd:20; /*[62:43]-r0 */
136 Word MatchAddr1:11; /*[42:32]-rw */
137 Word MatchAddr2:8; /*[31-24]-rw */
138 Word MatchAddr3:24; /*[23:0]-r0 */
139} s_NewLinkAltBase_addr_match;
140
141union u_NewLinkAltBase_addr_match {
142 s_NewLinkAltBase_addr_match s;
143 LWord l;
144} u_NewLinkAltBase_addr_match;
145
146typedef struct s_PCI_A_ConfigBase_addr_match {
147 Word v:1; /*[63] -rw */
148 Word rsvd:20; /*[62:43]-r0 */
149 Word MatchAddr1:11; /*[42:32]-rw */
150 Word MatchAddr2:8; /*[31-24]-rw */
151 Word MatchAddr3:24; /*[23:0]-r0 */
152} s_PCI_A_ConfigBase_addr_match;
153
154union u_PCI_A_ConfigBase_addr_match {
155 s_PCI_A_ConfigBase_addr_match s;
156 LWord l;
157} u_PCI_A_ConfigBase_addr_match;
158
159typedef struct s_PCI_B_ConfigBase_addr_match {
160 Word v:1; /*[63] -rw */
161 Word rsvd:20; /*[62:43]-r0 */
162 Word MatchAddr1:11; /*[42:32]-rw */
163 Word MatchAddr2:8; /*[31-24]-rw */
164 Word MatchAddr3:24; /*[23:0]-r0 */
165} s_PCI_B_ConfigBase_addr_match;
166
167union u_PCI_B_ConfigBase_addr_match {
168 s_PCI_B_ConfigBase_addr_match s;
169 LWord l;
170} u_PCI_B_ConfigBase_addr_match;
171
172typedef struct s_NewLinkBase_addr_mask {
173 Word rsvd:21; /* [63:43] -r0 */
174 Word AddrMask1:7; /* [42:36] -r1 */
175 Word AddrMask2:3; /* [35:33] -rw */
176 Word AddrMask3_1:1; /* [32:1] -r0 */
177 Word AddrMask3_2:31;
178 Word AddrMask4:1; /* [0] -r0 */
179} s_NewLinkBase_addr_mask;
180
181union u_NewLinkBase_addr_mask {
182 s_NewLinkBase_addr_mask s;
183 LWord l;
184} u_NewLinkBase_addr_mask;
185
186typedef struct s_NewLinkAltBase_addr_mask {
187 Word rsvd:21; /* [63:43] -r0 */
188 Word AddrMask1_1:11; /* [42:24]-r */
189 Word AddrMask1_2:8;
190 Word AddrMask3:24; /* [23:0] -r */
191} s_NewLinkAltBase_addr_mask;
192
193union u_NewLinkAltBase_addr_mask {
194 s_NewLinkAltBase_addr_mask s;
195 LWord l;
196} u_NewLinkAltBase_addr_mask;
197
198typedef struct s_PCI_A_ConfigBase_addr_mask {
199 Word rsvd:21; /*[63:43] -r0 */
200 Word AddrMask1:11; /*[42:32]-r */
201 Word AddrMask2:8; /*[31:24]-r */
202 Word AddrMask3:24; /*[23:0] -r */
203} s_PCI_A_ConfigBase_addr_mask;
204
205union u_PCI_A_ConfigBase_addr_mask {
206 s_PCI_A_ConfigBase_addr_mask s;
207 LWord l;
208} u_PCI_A_ConfigBase_addr_mask;
209
210typedef struct s_PCI_B_ConfigBase_addr_mask {
211 Word rsvd:21; /*[63:43] -r0 */
212 Word AddrMask1:11; /*[42:32]-r */
213 Word AddrMask2:8; /*[31:24]-r */
214 Word AddrMask3:24; /*[23:0] -r */
215} s_PCI_B_ConfigBase_addr_mask;
216
217union u_PCI_B_ConfigBase_addr_mask {
218 s_PCI_B_ConfigBase_addr_mask s;
219 LWord l;
220} u_PCI_B_ConfigBase_addr_mask;
221
222typedef struct s_ffb_config_register {
223 Word rsv1:32; /*[63:32]-r0 */
224 Word rsvd2:1; /*[31]-r1 */
225 Word rsvd3:3; /*[30:28]-r0 */
226 Word sprqs:4; /*[27:24 -rw */
227 Word spdqs:6; /*[23:18]-rw */
228 Word rsvd4:2; /*[17:16]-r0 */
229 Word squen:1; /*[15] */
230 Word oneread:1; /*[15] */
231 Word rsvd5:14; /*[13:0]-r0 */
232} s_ffb_config_register;
233
234union u_ffb_config_register {
235 s_ffb_config_register s;
236 LWord l;
237} u_ffb_config_register;
238
239#endif