summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4u/sys/pci/db21554_config.h
blob: 66c6edbfec2ebc4ad46c698f35c161e18b25f0b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 1999 by Sun Microsystems, Inc.
 * All rights reserved.
 */

#ifndef	_SYS_DB21554_CONFIG_H
#define	_SYS_DB21554_CONFIG_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <sys/pci.h>

#define	DB_PCONF_PRI_HDR_OFF		0x00 /* primary offset on primary */
#define	DB_PCONF_SEC_HDR_OFF		0x40 /* secondary offset on sec */
#define	DB_SCONF_PRI_HDR_OFF		0x40 /* primary offset on sec */
#define	DB_SCONF_SEC_HDR_OFF		0x00 /* secondary offset on sec */
#define	DB_CONF_REGS			0x80 /* configuration regs after hdrs */
#define	DB_SCONF_HDR_OFF		0x40 /* second config hdr offset */

/*
 * Some register definitions for configuration header.
 */
#define	DB_PCONF_MEM_CSR		PCI_CONF_BASE0
#define	DB_PCONF_IO_CSR			PCI_CONF_BASE1
#define	DB_PCONF_DS_IO_MEM1		PCI_CONF_BASE2
#define	DB_PCONF_DS_MEM2		PCI_CONF_BASE3
#define	DB_PCONF_DS_MEM3		PCI_CONF_BASE4
#define	DB_PCONF_DS_UMEM3		PCI_CONF_BASE5
#define	DB_PCONF_EXP_ROM		PCI_CONF_ROM
#define	DB_PCONF_US_IO_MEM0		DB_PCONF_SEC_HDR_OFF+PCI_CONF_BASE2
#define	DB_PCONF_US_MEM1		DB_PCONF_SEC_HDR_OFF+PCI_CONF_BASE3
#define	DB_PCONF_US_MEM2		DB_PCONF_SEC_HDR_OFF+PCI_CONF_BASE4

#define	DB_SCONF_MEM_CSR		PCI_CONF_BASE0
#define	DB_SCONF_IO_CSR			PCI_CONF_BASE1
#define	DB_SCONF_US_IO_MEM0		PCI_CONF_BASE2
#define	DB_SCONF_US_MEM1		PCI_CONF_BASE3
#define	DB_SCONF_US_MEM2		PCI_CONF_BASE4
#define	DB_SCONF_DS_IO_MEM1		DB_SCONF_PRI_HDR_OFF+PCI_CONF_BASE2
#define	DB_SCONF_DS_MEM2		DB_SCONF_PRI_HDR_OFF+PCI_CONF_BASE3
#define	DB_SCONF_DS_MEM3		DB_PCONF_PRI_HDR_OFF+PCI_CONF_BASE4
#define	DB_SCONF_DS_UMEM3		DB_PCONF_PRI_HDR_OFF+PCI_CONF_BASE5

#define	DB_IO_BIT			0x00000001

/* register definitions in configuration space after primary/sec. header */

#define	DB_CONF_DS_CONF_ADDR		0x80 /* downstream config address */
#define	DB_CONF_DS_CONF_DATA		0x84 /* downstream config data */
#define	DB_CONF_US_CONF_ADDR		0x88 /* upstream config address */
#define	DB_CONF_US_CONF_DATA		0x8C /* upstream config data */
#define	DB_CONF_CONF_OWN		0x90 /* config own bits - word reg */
#define	DB_CONF8_DS_CONF_OWN		0x90 /* config own bits - byte reg */
#define	DB_CONF8_US_CONF_OWN		0x91 /* config own bits - byte reg */
#define	DB_CONF_CONF_CSR		0x92 /* config control status - word */
#define	DB_CONF8_DS_CONF_CSR		0x92 /* config DS CSR - byte reg */
#define	DB_CONF8_US_CONF_CSR		0x93 /* config US CSR - byte reg */
#define	DB_CONF_DS_MEM0_TR_BASE		0x94 /* DS memory 0 translated base */
#define	DB_CONF_DS_IO_MEM1_TR_BASE	0x98 /* DS IO or mem 1 trans base */
#define	DB_CONF_DS_MEM2_TR_BASE		0x9C /* DS memory 2 translated base */
#define	DB_CONF_DS_MEM3_TR_BASE		0xA0 /* DS memory 3 translated base */
#define	DB_CONF_US_IO_MEM0_TR_BASE	0xA4 /* DS IO or mem0 trans base */
#define	DB_CONF_US_MEM1_TR_BASE		0xA8 /* US memory 1 translated base */
#define	DB_CONF_DS_MEM0_SETUP		0xAC /* DS memory 0 setup */
#define	DB_CONF_DS_IO_MEM1_SETUP	0xB0 /* DS IO or memory 1 setup */
#define	DB_CONF_DS_MEM2_SETUP		0xB4 /* DS memory 2 setup */
#define	DB_CONF_DS_MEM3_SETUP		0xB8 /* DS memory 3 setup */
#define	DB_CONF_DS_UP32_MEM3_SETUP	0xBC /* Upper 32bits DS mem3 setup */
#define	DB_CONF_PRIM_EXP_ROM_SETUP	0xC0 /* Primary Expansion ROM setup */
#define	DB_CONF_US_IO_MEM0_SETUP	0xC4 /* Upstream IO or memory 0 setup */
#define	DB_CONF_US_MEM1_SETUP		0xC8 /* upstream memory 1 setup */
#define	DB_CONF_CHIP_CTRL0		0xCC /* chip control 0 */
#define	DB_CONF_CHIP_CTRL1		0xCE /* chip control 1 */
#define	DB_CONF_STATUS			0xD0 /* chip status */
#define	DB_CONF_ARBITER_CTRL		0xD2 /* Arbiter control */
#define	DB_CONF_PRIM_SERR_DISABLES	0xD4 /* primary SERR# disables */
#define	DB_CONF_SEC_SERR_DISABLES	0xD5 /* Secondary SERR# disables */
#define	DB_CONF_RESET_CTRL		0xD8 /* Reset Control */
#define	DB_CONF_CAP_ID_1		0xDC /* Capabilities ID */
#define	DB_CONF_NEXT_ITEM_PTR_1		0xDD /* Next Item Pointer */
#define	DB_CONF_PM_CAP			0xDE /* Power Management Capabilities */
#define	DB_CONF_PM_CSR			0xE0 /* Power Management CSR */
#define	DB_CONF_PM_CSR_BSE		0xE2 /* PMCSR Bridge Support Exts */
#define	DB_CONF_PM_DATA			0xE3 /* Power Management data */
#define	DB_CONF_CAP_ID_2		0xE4 /* Capabilities ID */
#define	DB_CONF_NEXT_ITEM_PTR_2		0xE5 /* Next Item Pointer */
#define	DB_CONF_VPD_ADDRESS		0xE6 /* VPD Address */
#define	DB_CONF_VPD_DATA		0xE8 /* VPD Data */
#define	DB_CONF_CAP_ID_3		0xEC /* Capabilities ID */
#define	DB_CONF_NEXT_ITEM_PTR_3		0xED /* Next Item Pointer */
#define	DB_CONF_HS_CSR			0xEE /* Hotswap control status */

#define	DB_VENDOR_ID		0x1011
#define	DB_DEVICE_ID		0x46
#define	DB_INVAL_VEND		0xffff

/* configuration own register bits : Register offset 0x90-91 */
#define	DS_CONF_OWN		0x0001 /* master owns DSconfig address/data */
#define	US_CONF_OWN		0x0100 /* master owns USconfig address/data */
/* the following is a 8-bit register version definition. */
#define	DS8_CONF_OWN		0x01
#define	US8_CONF_OWN		0x01

/* configuration control status register bits: Register offset 0x92-93 */
#define	DS_OWN_STAT		0x0001 /* downstream config own status */
#define	DS_ENABLE		0x0002 /* enable downstream config cycles */
#define	US_OWN_STAT		0x0100 /* upstream config own status */
#define	US_ENABLE		0x0200 /* enable upstream config cycles */

/* chip control 0 register bits: Register Offset 0xcc-cd */
#define	DELAYED_TRANS_ORDER	0x0040 /* delayed transaction order control */
#define	SERR_FWD		0x0080 /* forward SERR# from sec to prim */
#define	PLOCKOUT		0x0400 /* primary lockout set */
#define	SEC_CLK_DIS		0x0800 /* disable secondary clock */

/* chip control 1 register bits: Register Offset 0xce-cf */
#define	P_PW_THRESHOLD		0x0001
#define	S_PW_THRESHOLD		0x0002
#define	P_DREAD_THRESHOLD_MASK	0x000C
#define	S_DREAD_THRESHOLD_MASK	0x0030
#define	DREAD_THRESHOLD_VALBITS	0x3

#define	US_MEM2_DISABLE		0x0000 /* disable USmem2 BAR */
#define	PAGESIZE_256		0x0100
#define	PAGESIZE_512		0x0200
#define	PAGESIZE_1K		0x0300
#define	PAGESIZE_2K		0x0400
#define	PAGESIZE_4K		0x0500
#define	PAGESIZE_8K		0x0600
#define	PAGESIZE_16K		0x0700
#define	PAGESIZE_32K		0x0800
#define	PAGESIZE_64K		0x0900
#define	PAGESIZE_128K		0x0A00
#define	PAGESIZE_256K		0x0B00
#define	PAGESIZE_512K		0x0C00
#define	PAGESIZE_1M		0x0D00
#define	PAGESIZE_2M		0x0E00
#define	PAGESIZE_4M		0x0F00

#define	GET_PAGESIZE(chip_ctrl1)	(((chip_ctrl1) & 0x0F00) >> 8)

/* chip reset control register bits : Register Offset 0xd8-db */
#define	RESET_CTRL_RST_SEC	0x01 /* reset secondary */
#define	RESET_CTRL_RST		0x02 /* reset chip */
#define	RESET_CTRL_LSTAT	0x08 /* when set, l_stat is high */

/* chip status register bits : Register Offset 0xd0-d1 */
#define	DS_DEL_MTO		0x0001 /* DS delayed master TO */
#define	DS_DEL_RD_DISCARD	0x0002 /* DS delayed read discard */
#define	DS_DEL_WR_DISCARD	0x0004 /* DS delayed write discard */
#define	DS_POST_WRDATA_DISCA	0x0008
#define	US_DEL_MTO		0x0100 /* US delayed trans master TO */
#define	US_DEL_RD_DISCARD	0x0200 /* US delayed trans.read disc */
#define	US_DEL_WR_DISCARD	0x0400 /* US delayed trans.writ disc */
#define	US_POST_WRDATA_DISCA	0x0800

#define	DB_PCI_REG_ADDR(bus, device, function, reg) \
	(((bus) & 0xff) << 16) | (((device & 0x1f)) << 11) \
		    | (((function) & 0x7) << 8) | ((reg) & 0xff)

/* form a type 0 configuration address */
#define	DB_PCI_REG_ADDR_TYPE0(bus, device, function, reg) \
	(((1 << (device & 0x1f)) << 11) \
		    | (((function) & 0x7) << 8) | \
		    ((reg) & 0xfc))

/* form a type 1 configuration address */
#define	DB_PCI_REG_ADDR_TYPE1(bus, device, function, reg) \
	((((bus) & 0xff) << 16) | (((device & 0x1f)) << 11) \
		    | (((function) & 0x7) << 8) | ((reg) & 0xfc))


#define	DB_ENABLE_PCI_CONF_CYCLE_TYPE0	0
#define	DB_ENABLE_PCI_CONF_CYCLE_TYPE1	1

/*
 * add local address offsets and get the right config address double
 * word aligned type 0 format addresses.
 */
#define	DB_PCI_CONF_CYCLE_TYPE0_ADDR(conf_addr) \
	(((conf_addr) & 0xfffffffc) | DB_ENABLE_PCI_CONF_CYCLE_TYPE0)

/*
 * add local address offsets and get the right config address double
 * word aligned type 1 format addresses.
 */
#define	DB_PCI_CONF_CYCLE_TYPE1_ADDR(conf_addr) \
	(((conf_addr)  & 0xfffffffc) | DB_ENABLE_PCI_CONF_CYCLE_TYPE1)

#define	PCI_HDR_SIZE	64

typedef struct db_pci_header {
	uint16_t 	venid;
	uint16_t	devid;
	uint16_t	command;
	uint16_t	status;
	uint8_t		revid;
	uint8_t		pif;
	uint8_t		subclass;
	uint8_t		class;
	uint8_t		cacheline;
	uint8_t		lat;
	uint8_t		hdr_type;
	uint8_t		bist;
	uint32_t	bar0;
	uint32_t	bar1;
	uint32_t	bar2;
	uint32_t	bar3;
	uint32_t	bar4;
	uint32_t	bar5;
	uint32_t	cardbus_cisp;
	uint16_t 	sub_venid;
	uint16_t 	sub_devid;
	uint32_t	exprom_bar;
	uint32_t	res1;
	uint32_t	res2;
	uint8_t		int_line;
	uint8_t		int_pin;
	uint8_t		min_gnt;
	uint8_t		max_lat;
} db_pci_header_t;

typedef struct db_conf_regs {
	uint32_t	ds_mem0_tr_base; /* DS memory 0 translated base */
	uint32_t	ds_io_mem1_tr_base; /* DS IO or memory1 trans base */
	uint32_t	ds_mem2_tr_base; /* DS memory 2 trans base */
	uint32_t	ds_mem3_tr_base; /* DS memory 3 trans base */
	uint32_t	us_io_mem0_tr_base; /* US IO or memory0 trans base */
	uint32_t	us_mem1_tr_base; /* US memory 1 translated base */
	uint32_t	ds_mem0_setup_reg; /* DS memory 0 setup reg */
	uint32_t	ds_io_mem1_setup_reg; /* DS IO or memory1 setup reg */
	uint32_t	ds_mem2_setup_reg; /* DS memory 2 setup reg */
	uint64_t	ds_mem3_setup_reg; /* DS memory 3 setup reg */
	uint32_t	p_exp_rom_setup; /* primary expansion ROM setup reg */
	uint32_t	us_io_mem0_setup_reg; /* US IO or memory 0 setup reg */
	uint32_t	us_mem1_setup_reg; /* US memory 1 setup reg */
	ushort_t	chip_control0;	/* chip control 0 */
	ushort_t	chip_control1;	/* chip control 1 */
	ushort_t	chip_status;	/* chip status */
	ushort_t	arb_control;	/* arbiter control */
	uchar_t		p_serr_disables; /* primary SERR# disables */
	uchar_t		s_serr_disables; /* secondary SERR# disables */
	ushort_t	config_csr;	/* configuration control and status */
	uint32_t	reset_control;	/* reset control */
	ushort_t	pm_cap;		/* power management capabilities reg */
	ushort_t	pm_csr;		/* power management control status */
	uint8_t		hs_csr;		/* hotswap control status */
} db_conf_regs_t;

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_DB21554_CONFIG_H */