| /* | 
 |  * amd8111_edac.h, EDAC defs for AMD8111 hypertransport chip | 
 |  * | 
 |  * Copyright (c) 2008 Wind River Systems, Inc. | 
 |  * | 
 |  * Authors:	Cao Qingtao <qingtao.cao@windriver.com> | 
 |  * 		Benjamin Walsh <benjamin.walsh@windriver.com> | 
 |  * 		Hu Yongqi <yongqi.hu@windriver.com> | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or modify | 
 |  * it under the terms of the GNU General Public License version 2 as | 
 |  * published by the Free Software Foundation. | 
 |  * | 
 |  * This program is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
 |  * See the GNU General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU General Public License | 
 |  * along with this program; if not, write to the Free Software | 
 |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 
 |  */ | 
 |  | 
 | #ifndef _AMD8111_EDAC_H_ | 
 | #define _AMD8111_EDAC_H_ | 
 |  | 
 | /************************************************************ | 
 |  *	PCI Bridge Status and Command Register, DevA:0x04 | 
 |  ************************************************************/ | 
 | #define REG_PCI_STSCMD	0x04 | 
 | enum pci_stscmd_bits { | 
 | 	PCI_STSCMD_SSE		= BIT(30), | 
 | 	PCI_STSCMD_RMA		= BIT(29), | 
 | 	PCI_STSCMD_RTA		= BIT(28), | 
 | 	PCI_STSCMD_SERREN	= BIT(8), | 
 | 	PCI_STSCMD_CLEAR_MASK	= (PCI_STSCMD_SSE | | 
 | 				   PCI_STSCMD_RMA | | 
 | 				   PCI_STSCMD_RTA) | 
 | }; | 
 |  | 
 | /************************************************************ | 
 |  *	PCI Bridge Memory Base-Limit Register, DevA:0x1c | 
 |  ************************************************************/ | 
 | #define REG_MEM_LIM     0x1c | 
 | enum mem_limit_bits { | 
 | 	MEM_LIMIT_DPE   = BIT(31), | 
 | 	MEM_LIMIT_RSE   = BIT(30), | 
 | 	MEM_LIMIT_RMA   = BIT(29), | 
 | 	MEM_LIMIT_RTA   = BIT(28), | 
 | 	MEM_LIMIT_STA   = BIT(27), | 
 | 	MEM_LIMIT_MDPE  = BIT(24), | 
 | 	MEM_LIMIT_CLEAR_MASK  = (MEM_LIMIT_DPE | | 
 | 				 MEM_LIMIT_RSE | | 
 | 				 MEM_LIMIT_RMA | | 
 | 				 MEM_LIMIT_RTA | | 
 | 				 MEM_LIMIT_STA | | 
 | 				 MEM_LIMIT_MDPE) | 
 | }; | 
 |  | 
 | /************************************************************ | 
 |  *	HyperTransport Link Control Register, DevA:0xc4 | 
 |  ************************************************************/ | 
 | #define REG_HT_LINK	0xc4 | 
 | enum ht_link_bits { | 
 | 	HT_LINK_LKFAIL	= BIT(4), | 
 | 	HT_LINK_CRCFEN	= BIT(1), | 
 | 	HT_LINK_CLEAR_MASK = (HT_LINK_LKFAIL) | 
 | }; | 
 |  | 
 | /************************************************************ | 
 |  *	PCI Bridge Interrupt and Bridge Control, DevA:0x3c | 
 |  ************************************************************/ | 
 | #define REG_PCI_INTBRG_CTRL	0x3c | 
 | enum pci_intbrg_ctrl_bits { | 
 | 	PCI_INTBRG_CTRL_DTSERREN	= BIT(27), | 
 | 	PCI_INTBRG_CTRL_DTSTAT		= BIT(26), | 
 | 	PCI_INTBRG_CTRL_MARSP		= BIT(21), | 
 | 	PCI_INTBRG_CTRL_SERREN		= BIT(17), | 
 | 	PCI_INTBRG_CTRL_PEREN		= BIT(16), | 
 | 	PCI_INTBRG_CTRL_CLEAR_MASK	= (PCI_INTBRG_CTRL_DTSTAT), | 
 | 	PCI_INTBRG_CTRL_POLL_MASK	= (PCI_INTBRG_CTRL_DTSERREN | | 
 | 					   PCI_INTBRG_CTRL_MARSP | | 
 | 					   PCI_INTBRG_CTRL_SERREN) | 
 | }; | 
 |  | 
 | /************************************************************ | 
 |  *		I/O Control 1 Register, DevB:0x40 | 
 |  ************************************************************/ | 
 | #define REG_IO_CTRL_1 0x40 | 
 | enum io_ctrl_1_bits { | 
 | 	IO_CTRL_1_NMIONERR	= BIT(7), | 
 | 	IO_CTRL_1_LPC_ERR	= BIT(6), | 
 | 	IO_CTRL_1_PW2LPC	= BIT(1), | 
 | 	IO_CTRL_1_CLEAR_MASK	= (IO_CTRL_1_LPC_ERR | IO_CTRL_1_PW2LPC) | 
 | }; | 
 |  | 
 | /************************************************************ | 
 |  *		Legacy I/O Space Registers | 
 |  ************************************************************/ | 
 | #define REG_AT_COMPAT 0x61 | 
 | enum at_compat_bits { | 
 | 	AT_COMPAT_SERR		= BIT(7), | 
 | 	AT_COMPAT_IOCHK		= BIT(6), | 
 | 	AT_COMPAT_CLRIOCHK	= BIT(3), | 
 | 	AT_COMPAT_CLRSERR	= BIT(2), | 
 | }; | 
 |  | 
 | struct amd8111_dev_info { | 
 | 	u16 err_dev;	/* PCI Device ID */ | 
 | 	struct pci_dev *dev; | 
 | 	int edac_idx;	/* device index */ | 
 | 	char *ctl_name; | 
 | 	struct edac_device_ctl_info *edac_dev; | 
 | 	void (*init)(struct amd8111_dev_info *dev_info); | 
 | 	void (*exit)(struct amd8111_dev_info *dev_info); | 
 | 	void (*check)(struct edac_device_ctl_info *edac_dev); | 
 | }; | 
 |  | 
 | struct amd8111_pci_info { | 
 | 	u16 err_dev;	/* PCI Device ID */ | 
 | 	struct pci_dev *dev; | 
 | 	int edac_idx;	/* pci index */ | 
 | 	const char *ctl_name; | 
 | 	struct edac_pci_ctl_info *edac_dev; | 
 | 	void (*init)(struct amd8111_pci_info *dev_info); | 
 | 	void (*exit)(struct amd8111_pci_info *dev_info); | 
 | 	void (*check)(struct edac_pci_ctl_info *edac_dev); | 
 | }; | 
 |  | 
 | #endif /* _AMD8111_EDAC_H_ */ |