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