Home | History | Annotate | Line # | Download | only in include
      1  1.1  cherry /*	$NetBSD: mca_machdep.h,v 1.1 2006/04/07 14:21:18 cherry Exp $	*/
      2  1.1  cherry 
      3  1.1  cherry /*-
      4  1.1  cherry  * Copyright (c) 2002 Marcel Moolenaar
      5  1.1  cherry  * All rights reserved.
      6  1.1  cherry  *
      7  1.1  cherry  * Redistribution and use in source and binary forms, with or without
      8  1.1  cherry  * modification, are permitted provided that the following conditions
      9  1.1  cherry  * are met:
     10  1.1  cherry  *
     11  1.1  cherry  * 1. Redistributions of source code must retain the above copyright
     12  1.1  cherry  *    notice, this list of conditions and the following disclaimer.
     13  1.1  cherry  * 2. Redistributions in binary form must reproduce the above copyright
     14  1.1  cherry  *    notice, this list of conditions and the following disclaimer in the
     15  1.1  cherry  *    documentation and/or other materials provided with the distribution.
     16  1.1  cherry  *
     17  1.1  cherry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18  1.1  cherry  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19  1.1  cherry  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20  1.1  cherry  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21  1.1  cherry  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22  1.1  cherry  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23  1.1  cherry  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  1.1  cherry  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  1.1  cherry  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  1.1  cherry  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  1.1  cherry  *
     28  1.1  cherry  * $FreeBSD$
     29  1.1  cherry  */
     30  1.1  cherry 
     31  1.1  cherry #ifndef _MACHINE_MCA_H_
     32  1.1  cherry #define _MACHINE_MCA_H_
     33  1.1  cherry 
     34  1.1  cherry struct mca_record_header {
     35  1.1  cherry 	uint64_t	rh_seqnr;		/* Record id. */
     36  1.1  cherry 	uint8_t		rh_major;		/* BCD (=02). */
     37  1.1  cherry 	uint8_t		rh_minor;		/* BCD (=00). */
     38  1.1  cherry 	uint8_t		rh_error;		/* Error severity. */
     39  1.1  cherry #define	MCA_RH_ERROR_RECOVERABLE	0
     40  1.1  cherry #define	MCA_RH_ERROR_FATAL		1
     41  1.1  cherry #define	MCA_RH_ERROR_CORRECTED		2
     42  1.1  cherry 	uint8_t		rh_flags;
     43  1.1  cherry #define	MCA_RH_FLAGS_PLATFORM_ID	0x01	/* Platform_id present. */
     44  1.1  cherry 	uint32_t	rh_length;		/* Size including header. */
     45  1.1  cherry 	uint8_t		rh_time[8];
     46  1.1  cherry #define	MCA_RH_TIME_SEC		0
     47  1.1  cherry #define	MCA_RH_TIME_MIN		1
     48  1.1  cherry #define	MCA_RH_TIME_HOUR	2
     49  1.1  cherry #define	MCA_RH_TIME_MDAY	4
     50  1.1  cherry #define	MCA_RH_TIME_MON		5
     51  1.1  cherry #define	MCA_RH_TIME_YEAR	6
     52  1.1  cherry #define	MCA_RH_TIME_CENT	7
     53  1.1  cherry 	struct uuid	rh_platform;
     54  1.1  cherry };
     55  1.1  cherry 
     56  1.1  cherry struct mca_section_header {
     57  1.1  cherry 	struct uuid	sh_uuid;
     58  1.1  cherry 	uint8_t		sh_major;		/* BCD (=02). */
     59  1.1  cherry 	uint8_t		sh_minor;		/* BCD (=00). */
     60  1.1  cherry 	uint8_t		sh_flags;
     61  1.1  cherry #define	MCA_SH_FLAGS_CORRECTED	0x01		/* Error has been corrected. */
     62  1.1  cherry #define	MCA_SH_FLAGS_PROPAGATE	0x02		/* Possible propagation. */
     63  1.1  cherry #define	MCA_SH_FLAGS_RESET	0x04		/* Reset device before use. */
     64  1.1  cherry #define	MCA_SH_FLAGS_VALID	0x80		/* Flags are valid. */
     65  1.1  cherry 	uint8_t		__reserved;
     66  1.1  cherry 	uint32_t	sh_length;		/* Size including header. */
     67  1.1  cherry };
     68  1.1  cherry 
     69  1.1  cherry struct mca_cpu_record {
     70  1.1  cherry 	uint64_t	cpu_flags;
     71  1.1  cherry #define	MCA_CPU_FLAGS_ERRMAP		(1ULL << 0)
     72  1.1  cherry #define	MCA_CPU_FLAGS_STATE		(1ULL << 1)
     73  1.1  cherry #define	MCA_CPU_FLAGS_CR_LID		(1ULL << 2)
     74  1.1  cherry #define	MCA_CPU_FLAGS_PSI_STRUCT	(1ULL << 3)
     75  1.1  cherry #define	MCA_CPU_FLAGS_CACHE(x)		(((x) >> 4) & 15)
     76  1.1  cherry #define	MCA_CPU_FLAGS_TLB(x)		(((x) >> 8) & 15)
     77  1.1  cherry #define	MCA_CPU_FLAGS_BUS(x)		(((x) >> 12) & 15)
     78  1.1  cherry #define	MCA_CPU_FLAGS_REG(x)		(((x) >> 16) & 15)
     79  1.1  cherry #define	MCA_CPU_FLAGS_MS(x)		(((x) >> 20) & 15)
     80  1.1  cherry #define	MCA_CPU_FLAGS_CPUID		(1ULL << 24)
     81  1.1  cherry 	uint64_t	cpu_errmap;
     82  1.1  cherry 	uint64_t	cpu_state;
     83  1.1  cherry 	uint64_t	cpu_cr_lid;
     84  1.1  cherry 	/* Nx cpu_mod (cache). */
     85  1.1  cherry 	/* Nx cpu_mod (TLB). */
     86  1.1  cherry 	/* Nx cpu_mod (bus). */
     87  1.1  cherry 	/* Nx cpu_mod (reg). */
     88  1.1  cherry 	/* Nx cpu_mod (MS). */
     89  1.1  cherry 	/* cpu_cpuid. */
     90  1.1  cherry 	/* cpu_psi. */
     91  1.1  cherry };
     92  1.1  cherry 
     93  1.1  cherry struct mca_cpu_cpuid {
     94  1.1  cherry 	uint64_t	cpuid[6];
     95  1.1  cherry };
     96  1.1  cherry 
     97  1.1  cherry struct mca_cpu_mod {
     98  1.1  cherry 	uint64_t	cpu_mod_flags;
     99  1.1  cherry #define	MCA_CPU_MOD_FLAGS_INFO	(1ULL << 0)
    100  1.1  cherry #define	MCA_CPU_MOD_FLAGS_REQID	(1ULL << 1)
    101  1.1  cherry #define	MCA_CPU_MOD_FLAGS_RSPID	(1ULL << 2)
    102  1.1  cherry #define	MCA_CPU_MOD_FLAGS_TGTID	(1ULL << 3)
    103  1.1  cherry #define	MCA_CPU_MOD_FLAGS_IP	(1ULL << 4)
    104  1.1  cherry 	uint64_t	cpu_mod_info;
    105  1.1  cherry 	uint64_t	cpu_mod_reqid;
    106  1.1  cherry 	uint64_t	cpu_mod_rspid;
    107  1.1  cherry 	uint64_t	cpu_mod_tgtid;
    108  1.1  cherry 	uint64_t	cpu_mod_ip;
    109  1.1  cherry };
    110  1.1  cherry 
    111  1.1  cherry struct mca_cpu_psi {
    112  1.1  cherry 	uint64_t	cpu_psi_flags;
    113  1.1  cherry #define	MCA_CPU_PSI_FLAGS_STATE	(1ULL << 0)
    114  1.1  cherry #define	MCA_CPU_PSI_FLAGS_BR	(1ULL << 1)
    115  1.1  cherry #define	MCA_CPU_PSI_FLAGS_CR	(1ULL << 2)
    116  1.1  cherry #define	MCA_CPU_PSI_FLAGS_AR	(1ULL << 3)
    117  1.1  cherry #define	MCA_CPU_PSI_FLAGS_RR	(1ULL << 4)
    118  1.1  cherry #define	MCA_CPU_PSI_FLAGS_FR	(1ULL << 5)
    119  1.1  cherry 	uint8_t		cpu_psi_state[1024];	/* XXX variable? */
    120  1.1  cherry 	uint64_t	cpu_psi_br[8];
    121  1.1  cherry 	uint64_t	cpu_psi_cr[128];	/* XXX variable? */
    122  1.1  cherry 	uint64_t	cpu_psi_ar[128];	/* XXX variable? */
    123  1.1  cherry 	uint64_t	cpu_psi_rr[8];
    124  1.1  cherry 	uint64_t	cpu_psi_fr[256];	/* 16 bytes per register! */
    125  1.1  cherry };
    126  1.1  cherry 
    127  1.1  cherry struct mca_mem_record {
    128  1.1  cherry 	uint64_t	mem_flags;
    129  1.1  cherry #define	MCA_MEM_FLAGS_STATUS		(1ULL << 0)
    130  1.1  cherry #define	MCA_MEM_FLAGS_ADDR		(1ULL << 1)
    131  1.1  cherry #define	MCA_MEM_FLAGS_ADDRMASK		(1ULL << 2)
    132  1.1  cherry #define	MCA_MEM_FLAGS_NODE		(1ULL << 3)
    133  1.1  cherry #define	MCA_MEM_FLAGS_CARD		(1ULL << 4)
    134  1.1  cherry #define	MCA_MEM_FLAGS_MODULE		(1ULL << 5)
    135  1.1  cherry #define	MCA_MEM_FLAGS_BANK		(1ULL << 6)
    136  1.1  cherry #define	MCA_MEM_FLAGS_DEVICE		(1ULL << 7)
    137  1.1  cherry #define	MCA_MEM_FLAGS_ROW		(1ULL << 8)
    138  1.1  cherry #define	MCA_MEM_FLAGS_COLUMN		(1ULL << 9)
    139  1.1  cherry #define	MCA_MEM_FLAGS_BITPOS		(1ULL << 10)
    140  1.1  cherry #define	MCA_MEM_FLAGS_REQID		(1ULL << 11)
    141  1.1  cherry #define	MCA_MEM_FLAGS_RSPID		(1ULL << 12)
    142  1.1  cherry #define	MCA_MEM_FLAGS_TGTID		(1ULL << 13)
    143  1.1  cherry #define	MCA_MEM_FLAGS_BUSDATA		(1ULL << 14)
    144  1.1  cherry #define	MCA_MEM_FLAGS_OEM_ID		(1ULL << 15)
    145  1.1  cherry #define	MCA_MEM_FLAGS_OEM_DATA		(1ULL << 16)
    146  1.1  cherry 	uint64_t	mem_status;
    147  1.1  cherry 	uint64_t	mem_addr;
    148  1.1  cherry 	uint64_t	mem_addrmask;
    149  1.1  cherry 	uint16_t	mem_node;
    150  1.1  cherry 	uint16_t	mem_card;
    151  1.1  cherry 	uint16_t	mem_module;
    152  1.1  cherry 	uint16_t	mem_bank;
    153  1.1  cherry 	uint16_t	mem_device;
    154  1.1  cherry 	uint16_t	mem_row;
    155  1.1  cherry 	uint16_t	mem_column;
    156  1.1  cherry 	uint16_t	mem_bitpos;
    157  1.1  cherry 	uint64_t	mem_reqid;
    158  1.1  cherry 	uint64_t	mem_rspid;
    159  1.1  cherry 	uint64_t	mem_tgtid;
    160  1.1  cherry 	uint64_t	mem_busdata;
    161  1.1  cherry 	struct uuid	mem_oem_id;
    162  1.1  cherry 	uint16_t	mem_oem_length;		/* Size of OEM data. */
    163  1.1  cherry 	/* N bytes of OEM platform data. */
    164  1.1  cherry };
    165  1.1  cherry 
    166  1.1  cherry struct mca_pcibus_record {
    167  1.1  cherry 	uint64_t	pcibus_flags;
    168  1.1  cherry #define	MCA_PCIBUS_FLAGS_STATUS		(1ULL << 0)
    169  1.1  cherry #define	MCA_PCIBUS_FLAGS_ERROR		(1ULL << 1)
    170  1.1  cherry #define	MCA_PCIBUS_FLAGS_BUS		(1ULL << 2)
    171  1.1  cherry #define	MCA_PCIBUS_FLAGS_ADDR		(1ULL << 3)
    172  1.1  cherry #define	MCA_PCIBUS_FLAGS_DATA		(1ULL << 4)
    173  1.1  cherry #define	MCA_PCIBUS_FLAGS_CMD		(1ULL << 5)
    174  1.1  cherry #define	MCA_PCIBUS_FLAGS_REQID		(1ULL << 6)
    175  1.1  cherry #define	MCA_PCIBUS_FLAGS_RSPID		(1ULL << 7)
    176  1.1  cherry #define	MCA_PCIBUS_FLAGS_TGTID		(1ULL << 8)
    177  1.1  cherry #define	MCA_PCIBUS_FLAGS_OEM_ID		(1ULL << 9)
    178  1.1  cherry #define	MCA_PCIBUS_FLAGS_OEM_DATA	(1ULL << 10)
    179  1.1  cherry 	uint64_t	pcibus_status;
    180  1.1  cherry 	uint16_t	pcibus_error;
    181  1.1  cherry 	uint16_t	pcibus_bus;
    182  1.1  cherry 	uint32_t	__reserved;
    183  1.1  cherry 	uint64_t	pcibus_addr;
    184  1.1  cherry 	uint64_t	pcibus_data;
    185  1.1  cherry 	uint64_t	pcibus_cmd;
    186  1.1  cherry 	uint64_t	pcibus_reqid;
    187  1.1  cherry 	uint64_t	pcibus_rspid;
    188  1.1  cherry 	uint64_t	pcibus_tgtid;
    189  1.1  cherry 	struct uuid	pcibus_oem_id;
    190  1.1  cherry 	uint16_t	pcibus_oem_length;	/* Size of OEM data. */
    191  1.1  cherry 	/* N bytes of OEM platform data. */
    192  1.1  cherry };
    193  1.1  cherry 
    194  1.1  cherry struct mca_pcidev_record {
    195  1.1  cherry 	uint64_t	pcidev_flags;
    196  1.1  cherry #define	MCA_PCIDEV_FLAGS_STATUS		(1ULL << 0)
    197  1.1  cherry #define	MCA_PCIDEV_FLAGS_INFO		(1ULL << 1)
    198  1.1  cherry #define	MCA_PCIDEV_FLAGS_REG_MEM	(1ULL << 2)
    199  1.1  cherry #define	MCA_PCIDEV_FLAGS_REG_IO		(1ULL << 3)
    200  1.1  cherry #define	MCA_PCIDEV_FLAGS_REG_DATA	(1ULL << 4)
    201  1.1  cherry #define	MCA_PCIDEV_FLAGS_OEM_DATA	(1ULL << 5)
    202  1.1  cherry 	uint64_t	pcidev_status;
    203  1.1  cherry 	struct {
    204  1.1  cherry 		uint16_t	info_vendor;
    205  1.1  cherry 		uint16_t	info_device;
    206  1.1  cherry 		uint32_t	info_ccfn;	/* Class code & funct. nr. */
    207  1.1  cherry #define	MCA_PCIDEV_INFO_CLASS(x)	((x) & 0xffffff)
    208  1.1  cherry #define	MCA_PCIDEV_INFO_FUNCTION(x)	(((x) >> 24) & 0xff)
    209  1.1  cherry 		uint8_t		info_slot;
    210  1.1  cherry 		uint8_t		info_bus;
    211  1.1  cherry 		uint8_t		info_segment;
    212  1.1  cherry 		uint8_t		__res0;
    213  1.1  cherry 		uint32_t	__res1;
    214  1.1  cherry 	} pcidev_info;
    215  1.1  cherry 	uint32_t	pcidev_reg_mem;
    216  1.1  cherry 	uint32_t	pcidev_reg_io;
    217  1.1  cherry 	/* Nx pcidev_reg. */
    218  1.1  cherry 	/* M bytes of OEM platform data. */
    219  1.1  cherry };
    220  1.1  cherry 
    221  1.1  cherry struct mca_pcidev_reg {
    222  1.1  cherry 	uint64_t	pcidev_reg_addr;
    223  1.1  cherry 	uint64_t	pcidev_reg_data;
    224  1.1  cherry };
    225  1.1  cherry 
    226  1.1  cherry #define	MCA_UUID_CPU		\
    227  1.1  cherry 	{0xe429faf1,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    228  1.1  cherry #define	MCA_UUID_MEMORY		\
    229  1.1  cherry 	{0xe429faf2,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    230  1.1  cherry #define	MCA_UUID_SEL		\
    231  1.1  cherry 	{0xe429faf3,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    232  1.1  cherry #define	MCA_UUID_PCI_BUS	\
    233  1.1  cherry 	{0xe429faf4,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    234  1.1  cherry #define	MCA_UUID_SMBIOS		\
    235  1.1  cherry 	{0xe429faf5,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    236  1.1  cherry #define	MCA_UUID_PCI_DEV	\
    237  1.1  cherry 	{0xe429faf6,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    238  1.1  cherry #define	MCA_UUID_GENERIC	\
    239  1.1  cherry 	{0xe429faf7,0x3cb7,0x11d4,0xbc,0xa7,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
    240  1.1  cherry 
    241  1.1  cherry #ifdef _KERNEL
    242  1.1  cherry 
    243  1.1  cherry void ia64_mca_init(void);
    244  1.1  cherry void ia64_mca_save_state(int);
    245  1.1  cherry 
    246  1.1  cherry #endif /* _KERNEL */
    247  1.1  cherry 
    248  1.1  cherry #endif /* _MACHINE_MCA_H_ */
    249