/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (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 2006 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_SBBCREG_H
#define	_SYS_SBBCREG_H

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

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * Register definitions for SBBC, a PCI device.
 */
#define	SBBC_SC_MODE	0x00000020

typedef struct pad12 {
	uint32_t pad[3];
}pad12_t;

/*
 * SBBC registers.
 */
struct sbbc_regs_map {
	uint32_t devid;			/* 0x0.0000 All, device ID */
	pad12_t  pada;
	uint32_t devtemp;		/* 0x0.0010 All */
	pad12_t  padb;
	uint32_t incon_scratch;		/* 0x0.0020 All */
	pad12_t  padc;
	uint32_t incon_tstl1;		/* 0x0.0030 AR and SDC */
	pad12_t  padd;
	uint32_t incon_tsterr;		/* 0x0.0040 AR and SDC */
	pad12_t  pade;
	uint32_t device_conf;		/* 0x0.0050 All, device configuration */
	pad12_t  padf;
	uint32_t device_rstcntl;	/* 0x0.0060 SBBC,AR,dev reset control */
	pad12_t  padg;
	uint32_t device_rststat;	/* 0x0.0070 All, device reset status */
	pad12_t  padh;
	uint32_t device_errstat;	/* 0x0.0080 SBBC, device reset */
	pad12_t  padi;
	uint32_t device_errcntl;	/* 0x0.0090 SBBC,device error control */
	pad12_t  padj;
	uint32_t jtag_cntl;		/* 0x0.00a0 SBBC and SDC,JTAG control */
	pad12_t  padk;
	uint32_t jtag_cmd;		/* 0x0.00b0 SBBC and SDC,JTAG command */
	pad12_t  padl;
	uint32_t i2c_addrcmd;		/* 0x0.00c0 SBBC,I2C addr and command */
	pad12_t  padm;
	uint32_t i2c_data;		/* 0x0.00d0 SBBC, I2C data */
	pad12_t  padn;
	uint32_t pci_errstat;		/* 0x0.00e0 SBBC, PCI error status */
	pad12_t  pad2[45];
	uint32_t consbus_conf;		/* 0x0.0300 All */
	pad12_t  pado;
	uint32_t consbus_erraddr;	/* 0x0.0310 SBBC */
	pad12_t  padp;
	uint32_t consbus_errack;	/* 0x0.0320 SBBC */
	pad12_t  pad4[18];
	uint32_t pad5;
	uint32_t consbus_port0_err;	/* 0x0.0400 All */
	pad12_t  pad6[19];
	uint32_t pad7[2];
	uint32_t consbus_part_dom_err;	/* 0x0.04f0 SBBC and CBH */
	pad12_t  pad8[235];
	uint32_t pad8a[2];
	uint32_t sbbc_synch;		/* 0x0.1000 SBBC */
	pad12_t  padq[20];
	uint32_t padqa[3];
	uint32_t dev_access_tim0;	/* 0x0.1100 SBBC */
	pad12_t  padr;
	uint32_t dev_access_tim1;	/* 0x0.1110 SBBC */
	pad12_t  pads;
	uint32_t dev_access_tim2;	/* 0x0.1120 SBBC */
	pad12_t  padt;
	uint32_t dev_access_tim3;	/* 0x0.1130 SBBC */
	pad12_t  padu;
	uint32_t dev_access_tim4;	/* 0x0.1140 SBBC */
	pad12_t  padv;
	uint32_t dev_access_tim5;	/* 0x0.1150 SBBC */
	pad12_t  pad9[14];
	uint32_t pad9a[1];
	uint32_t spare_in_out;		/* 0x0.1200 SBBC */
	pad12_t  pad10[127];
	uint32_t pad10a[2];
	uint32_t monitor_cntl;		/* 0x0.1800 SBBC */
	pad12_t  pad11[170];
	uint32_t pad11a[1];
	uint32_t port_intr_gen0;	/* 0x0.2000 SBBC */
	pad12_t  padw;
	uint32_t port_intr_gen1;	/* 0x0.2010 SBBC */
	pad12_t  padx;
	uint32_t syscntlr_intr_gen;	/* 0x0.2020 SBBC */
	pad12_t  pad12[61];
	uint32_t sys_intr_status;	/* 0x0.2300 SBBC */
	pad12_t  pady;
	uint32_t sys_intr_enable;	/* 0x0.2310 SBBC */
	pad12_t  padz;
	uint32_t pci_intr_status;	/* 0x0.2320 SBBC */
	pad12_t  padaa;
	uint32_t pci_intr_enable;	/* 0x0.2330 SBBC */
	pad12_t  pad13[614];
	uint32_t pad13a[1];
	uint32_t pci_to_consbus_map;	/* 0x0.4000 SBBC */
	pad12_t  padab;
	uint32_t consbus_to_pci_map;	/* 0x0.4010 SBBC */
	uint32_t pad14[2247];
					/* 0x0.6330 SBBC */
};


/*
 * SSC DEV presence registers
 */
struct ssc_devpresence_regs_map {
	uint8_t devpres_reg0;
	uint8_t devpres_reg1;
	uint8_t devpres_reg2;
	uint8_t devpres_reg3;
	uint8_t devpres_reg4;
	uint8_t devpres_reg5;
	uint8_t devpres_reg6;
	uint8_t devpres_reg7;
	uint8_t devpres_reg8;
	uint8_t devpres_reg9;
	uint8_t devpres_rega;
	uint8_t devpres_regb;
};

/*
 * EChip
 * 0088.0000 - 0089.FFFF
 */
struct ssc_echip_regs {
	uint8_t offset[0x20000];
};

/*
 * Device Presence
 * 008A.0000 - 008B.FFFF
 */
struct ssc_devpresence_regs {
	uint8_t offset[0x20000];
};

/*
 * I2C Mux
 * 008C.0000 - 008D.FFFF
 */
struct ssc_i2cmux_regs {
	uint8_t offset[0x20000];
};

/*
 * Error Interrupts Status and Control
 * 008E.0000 - 008F.FFFF
 */
struct ssc_errintr_statcntl_regs {
	uint8_t offset[0x20000];
};

/*
 * Console Bus Window
 * 0400.0000 - 07FF.FFFF
 */
struct ssc_console_bus {
	uint8_t offset[0x4000000];
};

/*
 * SSC EILD registers
 */
struct ssc_eild_reg_map {
	uint8_t darb_intr;
	uint8_t darb_intr_mask;
	uint8_t sbbc_cons_err;
	uint8_t sbbc_cons_err_mask;
	uint8_t pwr_supply;
};

/*
 * PCI SBBC slave mapping
 */
struct pci_sbbc {
	uint8_t fprom[0x800000];	/* FPROM */
	struct sbbc_regs_map sbbc_internal_regs;	/* sbbc registers */
	uint8_t dontcare[0x79CD0];	/* reserved sbbc registers */
	struct ssc_echip_regs echip_regs;
	struct ssc_devpresence_regs devpres_regs;
	struct ssc_i2cmux_regs i2cmux_regs;
	struct ssc_errintr_statcntl_regs errintr_scntl_regs;
	uint8_t sram[0x100000];
	uint8_t reserved[0x3600000];
	struct ssc_console_bus consbus;
};


/*
 * SBBC registers.
 */
struct sbbc_common_devregs {
	uint32_t devid;			/* All, device ID */
	uint32_t devtemp;		/* All */
	uint32_t incon_scratch;		/* All */
	uint32_t incon_tstl1;		/* AR and SDC */
	uint32_t incon_tsterr;		/* AR and SDC */
	uint32_t device_conf;		/* All, device configuration */
	uint32_t device_rstcntl;	/* SBBC and AR, dev reset control */
	uint32_t device_rststat;	/* All, device reset status */
	uint32_t device_errstat;	/* SBBC, device reset */
	uint32_t device_errcntl;	/* SBBC, device error control */
	uint32_t jtag_cntl;		/* SBBC and SDC, JTAG control */
	uint32_t jtag_cmd;		/* SBBC and SDC, JTAG command */
	uint32_t i2c_addrcmd;		/* SBBC, I2C address and command */
	uint32_t i2c_data;		/* SBBC, I2C data */
	uint32_t pci_errstat;		/* SBBC, PCI error status */
	uint32_t domain_conf;		/* CBH */
	uint32_t safari_port0_conf;	/* AR and SDC */
	uint32_t safari_port1_conf;	/* AR and SDC */
	uint32_t safari_port2_conf;	/* AR and SDC */
	uint32_t safari_port3_conf;	/* AR and SDC */
	uint32_t safari_port4_conf;	/* AR and SDC */
	uint32_t safari_port5_conf;	/* AR and SDC */
	uint32_t safari_port6_conf;	/* AR and SDC */
	uint32_t safari_port7_conf;	/* AR and SDC */
	uint32_t safari_port8_conf;	/* AR and SDC */
	uint32_t safari_port9_conf;	/* AR and SDC */
	uint32_t safari_port0_err;	/* AR and SDC */
	uint32_t safari_port1_err;	/* AR and SDC */
	uint32_t safari_port2_err;	/* AR and SDC */
	uint32_t safari_port3_err;	/* AR and SDC */
	uint32_t safari_port4_err;	/* AR and SDC */
	uint32_t safari_port5_err;	/* AR and SDC */
	uint32_t safari_port6_err;	/* AR and SDC */
	uint32_t safari_port7_err;	/* AR and SDC */
	uint32_t safari_port8_err;	/* AR and SDC */
	uint32_t safari_port9_err;	/* AR and SDC */
	uint32_t consbus_conf;		/* All */
	uint32_t consbus_erraddr;	/* SBBC */
	uint32_t consbus_errack;	/* SBBC */
	uint32_t consbus_errinj0;	/* CBH */
	uint32_t consbus_errinj1;	/* CBH */
	uint32_t consbus_port0_err;	/* All */
	uint32_t consbus_port1_err;	/* SDC and CBH */
	uint32_t consbus_port2_err;	/* SDC and CBH */
	uint32_t consbus_port3_err;	/* SDC and CBH */
	uint32_t consbus_port4_err;	/* SDC and CBH */
	uint32_t consbus_port5_err;	/* CBH */
	uint32_t consbus_port6_err;	/* CBH */
	uint32_t consbus_port7_err;	/* CBH */
	uint32_t consbus_port8_err;	/* CBH */
	uint32_t consbus_port9_err;	/* CBH */
	uint32_t consbus_porta_err;	/* CBH */
	uint32_t consbus_portb_err;	/* CBH */
	uint32_t consbus_portc_err;	/* CBH */
	uint32_t consbus_portd_err;	/* CBH */
	uint32_t consbus_porte_err;	/* CBH */
	uint32_t consbus_part_dom_err;	/* SBBC and CBH */
	uint32_t sbbc_synch;		/* SBBC */
	uint32_t dev_access_tim0;	/* SBBC */
	uint32_t dev_access_tim1;	/* SBBC */
	uint32_t dev_access_tim2;	/* SBBC */
	uint32_t dev_access_tim3;	/* SBBC */
	uint32_t dev_access_tim4;	/* SBBC */
	uint32_t dev_access_tim5;	/* SBBC */
	uint32_t spare_in_out;		/* SBBC */
	uint32_t monitor_cntl;		/* SBBC */
	uint32_t port_intr_gen0;	/* SBBC */
	uint32_t port_intr_gen1;	/* SBBC */
	uint32_t syscntlr_intr_gen;	/* SBBC */
	uint32_t sys_intr_status;	/* SBBC */
	uint32_t sys_intr_enable;	/* SBBC */
	uint32_t pci_intr_status;	/* SBBC */
	uint32_t pci_intr_enable;	/* SBBC */
	uint32_t pci_to_consbus_map;	/* SBBC */
	uint32_t consbus_to_pci_map;	/* SBBC */
	uint32_t scm_consbus_addrmap;	/* CBH */
	uint32_t ar_slot0_trans_cnt;	/* AR */
	uint32_t ar_slot1_trans_cnt;	/* AR */
	uint32_t ar_slot2_trans_cnt;	/* AR */
	uint32_t ar_slot3_trans_cnt;	/* AR */
	uint32_t ar_slot4_trans_cnt;	/* AR */
	uint32_t ar_slot5_trans_cnt;	/* AR */
	uint32_t ar_slot6_trans_cnt;	/* AR */
	uint32_t ar_slot7_trans_cnt;	/* AR */
	uint32_t ar_slot8_trans_cnt;	/* AR */
	uint32_t ar_slot9_trans_cnt;	/* AR */
	uint32_t ar_trans_cnt_oflow;	/* AR */
	uint32_t ar_trans_cnt_uflow;	/* AR */
	uint32_t ar_l1l1_conf;		/* AR */
	uint32_t lock_step_err;		/* AR and SDC */
	uint32_t l2_check_err;		/* AR and SDC */
	uint32_t incon_tstl1_slave;	/* AR */
	uint32_t incon_tstl2_slave;	/* AR and SDC */
	uint32_t ecc_status;		/* SDC */
	uint32_t event_counter0;	/* SDC */
	uint32_t event_counter1;	/* SDC */
	uint32_t event_counter2;	/* SDC */
	uint32_t monitor_counter_cntl;	/* AR and SDC */
	uint32_t ar_transid_match;	/* AR */
};


#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_SBBCREG_H */