1 1.3 andvar /* $NetBSD: iplcb.h,v 1.3 2025/02/24 21:32:26 andvar Exp $ */ 2 1.1 garbled 3 1.1 garbled /* Structure for the IPL Control Block on RS/6000 machines */ 4 1.1 garbled 5 1.1 garbled #ifndef _IPLCB_H_ 6 1.1 garbled #define _IPLCB_H_ 7 1.1 garbled 8 1.1 garbled #define MAX_BUCS 32 9 1.1 garbled 10 1.1 garbled struct ipl_directory { 11 1.1 garbled char iplcb_id[8]; /* ascii string id */ 12 1.1 garbled uint32_t gpr_save_off; /* offset to gpr_save area */ 13 1.1 garbled uint32_t cb_bitmap_size; /* size of bitmap and CB */ 14 1.1 garbled uint32_t bitmap_off; /* offset to bitmap */ 15 1.1 garbled uint32_t bitmap_size; /* size of bitmap */ 16 1.1 garbled uint32_t iplinfo_off; 17 1.1 garbled uint32_t iplinfo_size; 18 1.1 garbled uint32_t iocc_post_off; 19 1.1 garbled uint32_t iocc_post_size; 20 1.1 garbled uint32_t nio_post_off; 21 1.1 garbled uint32_t nio_post_size; 22 1.1 garbled uint32_t sjl_post_off; 23 1.1 garbled uint32_t sjl_post_size; 24 1.1 garbled uint32_t scsi_post_off; 25 1.1 garbled uint32_t scsi_post_size; 26 1.1 garbled uint32_t eth_post_off; 27 1.1 garbled uint32_t eth_post_size; 28 1.1 garbled uint32_t tok_post_off; 29 1.1 garbled uint32_t tok_post_size; 30 1.1 garbled uint32_t ser_post_off; 31 1.1 garbled uint32_t ser_post_size; 32 1.1 garbled uint32_t par_post_off; 33 1.1 garbled uint32_t par_post_size; 34 1.1 garbled uint32_t rsc_post_off; 35 1.1 garbled uint32_t rsc_post_size; 36 1.1 garbled uint32_t lega_post_off; 37 1.1 garbled uint32_t lega_post_size; 38 1.1 garbled uint32_t kbd_post_off; 39 1.1 garbled uint32_t kbd_post_size; 40 1.1 garbled uint32_t ram_post_off; 41 1.1 garbled uint32_t ram_post_size; 42 1.1 garbled uint32_t sga_post_off; 43 1.1 garbled uint32_t sga_post_size; 44 1.1 garbled uint32_t fm2_post_off; 45 1.1 garbled uint32_t fm2_post_size; 46 1.1 garbled uint32_t net_boot_result_off; 47 1.1 garbled uint32_t net_boot_result_size; 48 1.1 garbled uint32_t csc_result_off; 49 1.1 garbled uint32_t csc_result_size; 50 1.1 garbled uint32_t menu_result_off; 51 1.1 garbled uint32_t menu_result_size; 52 1.1 garbled uint32_t cons_result_off; 53 1.1 garbled uint32_t cons_result_size; 54 1.1 garbled uint32_t diag_result_off; 55 1.1 garbled uint32_t diag_result_size; 56 1.1 garbled uint32_t rom_scan_off; /* pres of ROMSCAN adaptor */ 57 1.1 garbled uint32_t rom_scan_size; 58 1.1 garbled uint32_t sky_post_off; 59 1.1 garbled uint32_t sky_post_size; 60 1.1 garbled uint32_t global_off; 61 1.1 garbled uint32_t global_size; 62 1.1 garbled uint32_t mouse_off; 63 1.1 garbled uint32_t mouse_size; 64 1.1 garbled uint32_t vrs_off; 65 1.1 garbled uint32_t vrs_size; 66 1.1 garbled uint32_t taur_post_off; 67 1.1 garbled uint32_t taur_post_size; 68 1.1 garbled uint32_t ent_post_off; 69 1.1 garbled uint32_t ent_post_size; 70 1.1 garbled uint32_t vrs40_off; 71 1.1 garbled uint32_t vrs40_size; 72 1.1 garbled uint32_t gpr_save_area1[64]; 73 1.1 garbled uint32_t sysinfo_offset; 74 1.1 garbled uint32_t sysinfo_size; 75 1.1 garbled uint32_t bucinfo_off; 76 1.1 garbled uint32_t bucinfo_size; 77 1.1 garbled uint32_t procinfo_off; 78 1.1 garbled uint32_t procinfo_size; 79 1.1 garbled uint32_t fm2_ioinfo_off; 80 1.1 garbled uint32_t fm2_ioinfo_size; 81 1.1 garbled uint32_t proc_post_off; 82 1.1 garbled uint32_t proc_post_size; 83 1.1 garbled uint32_t sysvpd_off; 84 1.1 garbled uint32_t sysvpd_size; 85 1.1 garbled uint32_t memdata_off; 86 1.1 garbled uint32_t memdata_size; 87 1.1 garbled uint32_t l2data_off; 88 1.1 garbled uint32_t l2data_size; 89 1.1 garbled uint32_t fddi_post_off; 90 1.1 garbled uint32_t fddi_post_size; 91 1.1 garbled uint32_t golden_vpd_off; 92 1.1 garbled uint32_t golden_vpd_size; 93 1.1 garbled uint32_t nvram_cache_off; 94 1.1 garbled uint32_t nvram_cache_size; 95 1.1 garbled uint32_t user_struct_off; 96 1.1 garbled uint32_t user_struct_size; 97 1.1 garbled uint32_t residual_off; 98 1.1 garbled uint32_t residual_size; 99 1.1 garbled }; 100 1.1 garbled 101 1.1 garbled struct ipl_cb { 102 1.1 garbled uint32_t gpr_save[32]; 103 1.1 garbled struct ipl_directory dir; 104 1.1 garbled }; 105 1.1 garbled 106 1.1 garbled struct sys_info { 107 1.1 garbled int nrof_procs; 108 1.1 garbled int coherency_size; /* size of coherence block */ 109 1.1 garbled int resv_size; /* size of reservation granule */ 110 1.1 garbled u_char *arb_ctrl_addr; /* real addr of arbiter control reg */ 111 1.1 garbled u_char *phys_id_addr; /* real addr of phys id reg */ 112 1.1 garbled int nrof_bsrr; /* nrof 4 byte bos slot reset regs */ 113 1.1 garbled u_char *bssr_addr; /* real addr of bssr */ 114 1.1 garbled int tod_type; /* time of day type */ 115 1.1 garbled u_char *todr_addr; /* real address of todr regs */ 116 1.1 garbled u_char *rsr_addr; /* real address of reset status reg */ 117 1.1 garbled u_char *pksr_addr; /* RA of power/keylock status reg */ 118 1.1 garbled u_char *prcr_addr; /* RA of power/reset control reg */ 119 1.1 garbled u_char *sssr_addr; /* RA of system specific regs */ 120 1.1 garbled u_char *sir_addr; /* RA of system intr regs */ 121 1.1 garbled u_char *scr_addr; /* RA of standard conf reg */ 122 1.1 garbled u_char *dscr_addr; /* RA of dev spec. config reg */ 123 1.1 garbled int nvram_size; /* in bytes */ 124 1.1 garbled u_char *nvram_addr; /* RA of nvram */ 125 1.1 garbled u_char *vpd_rom_addr; /* RA of VPD ROM space */ 126 1.1 garbled int ipl_rom_size; /* in bytes */ 127 1.1 garbled u_char *ipl_rom_addr; /* RA of IPL ROM space */ 128 1.1 garbled u_char *g_mfrr_addr; /* RA of global mffr reg if != 0 */ 129 1.1 garbled u_char *g_tb_addr; /* RA of global timebase if != 0 */ 130 1.1 garbled int g_tb_type; /* global timebase type */ 131 1.1 garbled int g_tb_mult; /* global timebase multiplier */ 132 1.1 garbled int sp_errorlog_off;/* offset from BA of NVRAM to 133 1.1 garbled * service processor error log tbl */ 134 1.1 garbled u_char *pcccr_addr; /* RA of connectivity config reg */ 135 1.1 garbled u_char *spocr_addr; /* RA of software power off ctrl reg */ 136 1.1 garbled u_char *pfeivr_addr; /* RA of EPOW ext intr reg */ 137 1.1 garbled /* Available Processor Mask interface */ 138 1.1 garbled int access_id_waddr;/* type of access to loc_waddr */ 139 1.1 garbled u_char *loc_waddr; /* RA of APM space write */ 140 1.1 garbled int access_id_raddr;/* type of access to loc_raddr */ 141 1.1 garbled u_char *loc_raddr; /* RA of APM space read */ 142 1.3 andvar int architecture; /* Architecture of this box: 143 1.1 garbled * RS6K = 1 = rs/6000 old mca 144 1.1 garbled * RSPC = 2 = PReP */ 145 1.1 garbled int implementation; 146 1.1 garbled /* Implementation of this box: 147 1.1 garbled * RS6K_UP_MCA = 1 = POWER1, POWER2, RSC, PPC single proc 148 1.1 garbled * RS6K_SMP_MCA = 2 = PPC SMP 149 1.1 garbled * RSCP_UP_PCI = 3 = PPC/PReP single proc 150 1.1 garbled */ 151 1.1 garbled char pkg_desc[16]; /* NULL term ASCII string: */ 152 1.1 garbled /* "rs6k" POWER1, POWER2, RSC, PPC single proc 153 1.1 garbled * "rs6ksmp" PPC SMP 154 1.1 garbled * "rspc" PReP 155 1.1 garbled */ 156 1.1 garbled }; 157 1.1 garbled 158 1.1 garbled typedef struct buid_data { 159 1.1 garbled int buid_value; /* assigned BUID value. 160 1.1 garbled * values only have meaning if nrof_buids != 0. 161 1.1 garbled * assigned in order until nrof_buids is satisfied, unused 162 1.1 garbled * ones will be -1 163 1.1 garbled */ 164 1.1 garbled u_char *buid_sptr; /* pointer to buid's post structure */ 165 1.1 garbled } buid_data_t; 166 1.1 garbled 167 1.1 garbled struct buc_info { 168 1.1 garbled uint32_t nrof_structs; /* nrof bucs present */ 169 1.1 garbled uint32_t index; /* 0 <= index <= num_of_structs - 1 */ 170 1.1 garbled uint32_t struct_size; /* in bytes */ 171 1.1 garbled int bsrr_off; /* bus slot reset reg offset */ 172 1.1 garbled uint32_t bsrr_mask; /* bssr mask */ 173 1.1 garbled int bscr_val; /* config register value to enable */ 174 1.1 garbled int cfg_status; /* 0 buc not configured 175 1.1 garbled * 1 buc configd via config regs 176 1.1 garbled * 2 configd via hardware defaults 177 1.1 garbled * -1 config failed */ 178 1.1 garbled int dev_type; /* 1 buc is executable memory 179 1.1 garbled * 2 buc is a processor 180 1.1 garbled * 3 buc is an io type */ 181 1.1 garbled int nrof_buids; /* nrof buids needed by buc <=4 */ 182 1.1 garbled buid_data_t buid_data[4]; 183 1.1 garbled int mem_alloc1; /* 1st mem alloc required in MB */ 184 1.1 garbled u_char *mem_addr1; /* RA of mem_alloc1 area */ 185 1.1 garbled int mem_alloc2; /* 2nd mem alloc required */ 186 1.1 garbled u_char *mem_addr2; /* RA of mem_alloc2 area */ 187 1.1 garbled int vpd_rom_width; /* width of vpd interface in bytes */ 188 1.1 garbled int cfg_addr_incr; /* config addr increment in bytes */ 189 1.1 garbled int device_id_reg; /* std. config reg contents */ 190 1.1 garbled uint32_t aux_info_off; /* iplcb offset to the device specific 191 1.1 garbled * array for this buc. ie, if this is 192 1.1 garbled * a proc, offset is the 193 1.1 garbled * processor_info struct. 194 1.1 garbled */ 195 1.1 garbled uint32_t feature_rom_code; /* romscan post flag */ 196 1.1 garbled uint32_t IOCC_flag; /* 0 not IOCC 1 = IOCC */ 197 1.1 garbled char location[4]; /* location of the BUC */ 198 1.1 garbled }; 199 1.1 garbled 200 1.1 garbled struct proc_info { 201 1.1 garbled uint32_t nrof_structs; 202 1.1 garbled uint32_t index; 203 1.1 garbled uint32_t struct_size; 204 1.1 garbled uint32_t per_buc_info_off; /* iplcb offset to buc_info for me */ 205 1.1 garbled u_char *proc_int_area; 206 1.1 garbled /* Base Addr of this proc's intr presentation layer regs 207 1.1 garbled * BA+0 (CPPR||XISR without side effects) 208 1.1 garbled * BA+4 (CPPR||XISR with side effects) 209 1.1 garbled * BA+8 (DSIER) 210 1.1 garbled * BA+12 (MFRR) 211 1.1 garbled * BA+xx (Additional Optional MFRR's) 212 1.1 garbled */ 213 1.1 garbled uint32_t proc_int_area_size; /* size/4 == nrof intr pres regs */ 214 1.1 garbled int proc_present; /* 0 no, -1 dead, 1 running, 2 loop 215 1.1 garbled * 3 reset state */ 216 1.1 garbled uint32_t test_run; /* which tests were run on proc */ 217 1.1 garbled uint32_t test_stat; /* test status */ 218 1.1 garbled int link; /* 0 = loop until nonzero !=0 branch to 219 1.1 garbled * link addr */ 220 1.1 garbled u_char *lind_addr; /* see above */ 221 1.1 garbled union { 222 1.1 garbled uint32_t p_id; /* unique proc id */ 223 1.1 garbled struct { 224 1.1 garbled uint16_t p_nodeid; /* phys NUMA nodeid */ 225 1.1 garbled uint16_t p_cpuid; /* phys cpu id */ 226 1.1 garbled } s0; 227 1.1 garbled } u0; 228 1.1 garbled int architecture; /* proc arch */ 229 1.1 garbled int implementation; /* proc type */ 230 1.1 garbled int version; /* proc version */ 231 1.1 garbled int width; /* proc data word size */ 232 1.1 garbled int cache_attrib; /* bit 0 = cache not, cache is present 233 1.1 garbled * bit 1 = separate cache/combined */ 234 1.1 garbled int coherency_size; /* size of coherence block */ 235 1.1 garbled int resv_size; /* size of reservation granule */ 236 1.1 garbled int icache_block; /* L1 icache block size */ 237 1.1 garbled int dcache_block; /* L1 dcache block size */ 238 1.1 garbled int icache_size; /* L1 icache size */ 239 1.1 garbled int dcache_size; /* L1 dcache size */ 240 1.1 garbled int icache_line; /* L1 icache line size */ 241 1.1 garbled int dcache_line; /* L1 dcache line size */ 242 1.1 garbled int icache_asc; /* L1 icache associativity */ 243 1.1 garbled int dcache_asc; /* L1 dcache associativity */ 244 1.1 garbled int L2_cache_size; /* L2 cache size */ 245 1.1 garbled int L2_cach_asc; /* L2 cache associativity */ 246 1.1 garbled int tlb_attrib; /* tlb buffer attribute bitfield 247 1.1 garbled * 0 present/not present 248 1.1 garbled * 1 separate/combined i/d 249 1.1 garbled * 4 proc supports tlbia */ 250 1.1 garbled int itlb_size; /* entries */ 251 1.1 garbled int dtlb_size; 252 1.1 garbled int itlb_asc; 253 1.1 garbled int dtlb_asc; 254 1.1 garbled int slb_attrib; /* segment lookaside buffer bitfield 255 1.1 garbled * 0 slb not/present 256 1.1 garbled * 1 separate/combined i/d */ 257 1.1 garbled int islb_size; /* entries */ 258 1.1 garbled int dslb_size; 259 1.1 garbled int islb_asc; 260 1.1 garbled int dslb_asc; 261 1.1 garbled int priv_lck_cnt; /* spin lock count */ 262 1.1 garbled int rtc_type; /* RTC type */ 263 1.1 garbled int rtcXint; /* nanosec per timebase tick int mult*/ 264 1.1 garbled int rtcXfrac; /* same, but fraction multiplier */ 265 1.1 garbled int bus_freq; /* bus clock in Hz */ 266 1.1 garbled int tb_freq; /* time base clockfreq */ 267 1.1 garbled char proc_desc[16]; /* processor name ASCII string */ 268 1.1 garbled }; 269 1.1 garbled 270 1.1 garbled /* One SIMM is a nibble wide and will have the value of: 271 1.1 garbled * 0x0 == good or 0xf == bad 272 1.1 garbled */ 273 1.1 garbled struct simm_def { 274 1.1 garbled u_char simm_7and8; 275 1.1 garbled u_char simm_3and4; 276 1.1 garbled u_char simm_5and6; 277 1.1 garbled u_char simm_1and2; 278 1.1 garbled }; 279 1.1 garbled 280 1.1 garbled /* 281 1.1 garbled * The IPL Info structure is mostly good for telling us the cache sizes and 282 1.1 garbled * model codes. The whole thing is unreasonably large and verbose. 283 1.1 garbled */ 284 1.1 garbled 285 1.1 garbled struct ipl_info { 286 1.1 garbled /* IPL controller and device interface routine */ 287 1.1 garbled u_char *iplcnd_ptr; /* ROM Reserved */ 288 1.1 garbled uint32_t iplcnd_size; 289 1.1 garbled /* NVRAM expansion code */ 290 1.1 garbled u_char *nvram_exp_ptr; /* ROM Reserved */ 291 1.1 garbled uint32_t nvram_exp_size; 292 1.1 garbled /* IPL ROM stack high addr */ 293 1.1 garbled u_char *ipl_ros_stack_ptr; /* ROM Reserved */ 294 1.1 garbled uint32_t ipl_ros_stack_size; 295 1.1 garbled /* IPL Record */ 296 1.1 garbled u_char *ipl_rec_ptr; /* ROM Reserved */ 297 1.1 garbled uint32_t ipl_rec_size; 298 1.1 garbled /* Lowest addr needed by IPL ROM */ 299 1.1 garbled u_char *ros_workarea_lwm; /* ROM Reserved */ 300 1.1 garbled /* IPL ROM entry table. t=0, SR15 */ 301 1.1 garbled u_char *ros_entry_tbl_ptr; /* ROM Reserved */ 302 1.1 garbled uint32_t ros_entry_tbl_size; 303 1.1 garbled /* Memory bit maps nrof bytes per bit. 16K/bit */ 304 1.1 garbled uint32_t bit_map_bytes_per_bit; /* ROM Reserved */ 305 1.1 garbled /* Highest addressable real address byte + 1. */ 306 1.1 garbled uint32_t ram_size; /* ROM Reserved */ 307 1.1 garbled /* 308 1.1 garbled * Model Field: 309 1.1 garbled * 0xWWXXYYZZ 310 1.1 garbled * WW == 0x00. hardware is SGR ss32 or ss64. (ss is speed in MHz) 311 1.1 garbled * icache is 8k. 312 1.1 garbled * XX == reserved 313 1.1 garbled * YY == reserved 314 1.1 garbled * ZZ == model code: 315 1.1 garbled * bits 0,1 (low order) == style 316 1.1 garbled * 00=Tower 01=Desktop 10=Rack 11=Reserved 317 1.1 garbled * bits 2,3 == relative speed 318 1.1 garbled * 00=slow 01=Medium 10=High 11=Fast 319 1.1 garbled * bit 4 == number of combo chips 320 1.1 garbled * 0 = 2 chips. 1 = 1 chip. 321 1.1 garbled * bit 5 == Number of DCU's. 322 1.1 garbled * 0 = 4 DCU's cache is 64k. 323 1.1 garbled * 1 = 2 DCU's cache is 32K. 324 1.1 garbled * bits 6,7 = Reserved 325 1.1 garbled * WW != 0x00: 326 1.1 garbled * WW == 0x01. Hardware is SGR ss32 or ss64 RS1. (POWER) 327 1.1 garbled * WW == 0x02. RSC (RISC Single Chip) 328 1.1 garbled * WW == 0x04. POWER2/RS2 329 1.1 garbled * WW == 0x08. PowerPC 330 1.1 garbled * XX == Package type 331 1.1 garbled * bits 0,1 (low order) == style 332 1.1 garbled * 00=Tower 01=Desktop 10=Rack 11=Entry Server 333 1.1 garbled * bit 2 - AIX Hardware verification test supp (rspc) 334 1.1 garbled * bit 3 - AIX Hardware error log analysis supp (rspc) 335 1.1 garbled * bit 4-7 reserved 336 1.1 garbled * YY == Reserved 337 1.1 garbled * ZZ == Model code. (useless) 338 1.1 garbled * Icache K size is obtained from entry icache. 339 1.1 garbled * Dcache K size is obtained from entry dcache. 340 1.1 garbled */ 341 1.1 garbled uint32_t model; 342 1.1 garbled /* Power status and keylock register decode. IO Addr 0x4000E4. 343 1.1 garbled * 32bit reg: 344 1.1 garbled * Power Status bits 0-9 345 1.1 garbled * Reserved bits 10-27 346 1.1 garbled * Keylock decode bits 28-31: (X == don't care) 347 1.1 garbled * 28 29 30 31 348 1.1 garbled * 1 1 X X Workstation 349 1.1 garbled * 0 1 X X Supermini 350 1.1 garbled * 0 0 X X Expansion 351 1.1 garbled * X X 1 1 Normal mode 352 1.1 garbled * X X 1 0 Service mode 353 1.1 garbled * X X 0 1 Secure mode 354 1.1 garbled */ 355 1.1 garbled uint32_t powkey_reg; /* ROM Reserved */ 356 1.1 garbled /* Set to zero during power on, inc'd with each warm IPL */ 357 1.1 garbled int32_t soft_reboot_count; 358 1.1 garbled /* Set and used by IPL controller, all are ROM Reserved */ 359 1.1 garbled int32_t nvram_section1_valid; /* 0 if CRC bad */ 360 1.1 garbled int32_t nvram_exp_valid; /* 0 if CRC bad */ 361 1.1 garbled u_char prevboot_dev[36]; /* last normal mode ipl */ 362 1.1 garbled char reserved[28]; 363 1.1 garbled /* Pointer to the IPLCB in memory */ 364 1.1 garbled u_char *iplcb_ptr; /* ROM Reserved */ 365 1.1 garbled /* Pointer to compressed BIOS code */ 366 1.1 garbled u_char *bios_ptr; /* ROM Reserved */ 367 1.1 garbled uint32_t bios_size; 368 1.1 garbled uint32_t cre[16]; /* Storage Configuration Registers. */ 369 1.1 garbled uint32_t bscr[16]; /* Bit steering registers */ 370 1.1 garbled /* Unimplemented and ROM Reserved */ 371 1.1 garbled struct { 372 1.1 garbled uint32_t synd; 373 1.1 garbled uint32_t addr; 374 1.1 garbled uint32_t status; 375 1.1 garbled } single_bit_error[16]; 376 1.1 garbled uint32_t reserved_array[5*16]; 377 1.1 garbled /* Memory extent test indicators */ 378 1.1 garbled u_char extent_test_ind[16]; /* 0 = untested, 1 = tested */ 379 1.1 garbled /* Memory bit steering register settig conflict indicator */ 380 1.1 garbled u_char bit_steer_conflict[16]; /* 1 = conflict */ 381 1.1 garbled /* Set by IPL controller, ROM Reserved */ 382 1.1 garbled uint32_t ipl_ledval; /* IPL LED value */ 383 1.1 garbled uint32_t ipl_device; /* ??? */ 384 1.1 garbled char unused[18]; 385 1.1 garbled 386 1.1 garbled /* Copied from IPL Rom VPD area */ 387 1.1 garbled char vpd_planar_partno[8]; 388 1.1 garbled char vpd_planar_ecno[8]; 389 1.1 garbled char vpd_proc_serialno[8]; 390 1.1 garbled char vpd_ipl_ros_partno[8]; 391 1.1 garbled char vpd_ipl_ros_version[14]; 392 1.1 garbled char ipl_ros_copyright[49]; 393 1.1 garbled char ipl_ros_timestamp[10]; 394 1.1 garbled 395 1.1 garbled /* Copied from NVRAM */ 396 1.1 garbled union { 397 1.1 garbled uint32_t chip_signature; 398 1.1 garbled struct chip_sig { 399 1.1 garbled u_char cop_bus_addr; 400 1.1 garbled u_char obsolete_u_num; 401 1.1 garbled u_char dd_num; 402 1.1 garbled u_char partno; 403 1.1 garbled } chip_sig; 404 1.1 garbled } floating_point, fixed_point, instruction_cache_unit, 405 1.1 garbled storage_control_unit, combo_1, combo_2, data_control_unit_0, 406 1.1 garbled data_control_unit_1, data_control_unit_2, data_control_unit_3; 407 1.1 garbled 408 1.1 garbled /* Memory SIMM error information. 409 1.1 garbled * 8 cards (A-H) 8 simms per card (1-8). 410 1.1 garbled * Two cache line sizes. if 128 use memory_card_1n data, 411 1.1 garbled * otherwise use memory_card_9n or memory_card_Tn. 412 1.1 garbled */ 413 1.1 garbled union { 414 1.1 garbled char memcd_errinfo[32]; 415 1.1 garbled uint32_t slots_of_simm[8]; 416 1.1 garbled struct { /* cache line size 128 */ 417 1.1 garbled struct simm_def memory_card_1H; 418 1.1 garbled struct simm_def memory_card_1F; 419 1.1 garbled struct simm_def memory_card_1G; 420 1.1 garbled struct simm_def memory_card_1E; 421 1.1 garbled struct simm_def memory_card_1D; 422 1.1 garbled struct simm_def memory_card_1B; 423 1.1 garbled struct simm_def memory_card_1C; 424 1.1 garbled struct simm_def memory_card_1A; 425 1.1 garbled } simm_stuff_1; 426 1.1 garbled struct { /* cache line size 64 */ 427 1.1 garbled struct simm_def memory_card_9H; 428 1.1 garbled struct simm_def memory_card_9D; 429 1.1 garbled struct simm_def memory_card_9F; 430 1.1 garbled struct simm_def memory_card_9B; 431 1.1 garbled struct simm_def memory_card_9G; 432 1.1 garbled struct simm_def memory_card_9C; 433 1.1 garbled struct simm_def memory_card_9E; 434 1.1 garbled struct simm_def memory_card_9A; 435 1.1 garbled } simm_stuff_9; 436 1.1 garbled struct { /* cache line size 64 */ 437 1.1 garbled struct simm_def memory_card_TB; 438 1.1 garbled struct simm_def memory_card_TC; 439 1.1 garbled } simm_stuff_T; 440 1.1 garbled } simm_info; 441 1.1 garbled 442 1.1 garbled /* MESR error info at IPL ROM memory config time. 443 1.1 garbled * Two cache line sizes, similar to above. 444 1.1 garbled * find one of the following values in the word variable: 445 1.1 garbled * 0x00000000 no MESR error occurred when configuring this extent 446 1.1 garbled * 0xe0400000 timeout. no memcard is in the slot. 447 1.1 garbled * otherwise, an error occurred, so the card exists but will not 448 1.1 garbled * be used. 449 1.1 garbled */ 450 1.1 garbled union { 451 1.1 garbled char extent_errinfo[64]; 452 1.1 garbled struct { /* cacheline 128 */ 453 1.1 garbled uint32_t ext_0_slot_HandD; 454 1.1 garbled uint32_t ext_1_slot_HandD; 455 1.1 garbled uint32_t ext_2_slot_HandD; 456 1.1 garbled uint32_t ext_3_slot_HandD; 457 1.1 garbled uint32_t ext_4_slot_FandB; 458 1.1 garbled uint32_t ext_5_slot_FandB; 459 1.1 garbled uint32_t ext_6_slot_FandB; 460 1.1 garbled uint32_t ext_7_slot_FandB; 461 1.1 garbled uint32_t ext_8_slot_GandC; 462 1.1 garbled uint32_t ext_9_slot_GandC; 463 1.1 garbled uint32_t ext_10_slot_GandC; 464 1.1 garbled uint32_t ext_11_slot_GandC; 465 1.1 garbled uint32_t ext_12_slot_EandA; 466 1.1 garbled uint32_t ext_13_slot_EandA; 467 1.1 garbled uint32_t ext_14_slot_EandA; 468 1.1 garbled uint32_t ext_15_slot_EandA; 469 1.1 garbled } MESR_err_1; 470 1.1 garbled struct { /* cacheline of 64 */ 471 1.1 garbled uint32_t ext_0_slot_H; 472 1.1 garbled uint32_t ext_1_slot_H; 473 1.1 garbled uint32_t ext_2_slot_D; 474 1.1 garbled uint32_t ext_3_slot_D; 475 1.1 garbled uint32_t ext_4_slot_F; 476 1.1 garbled uint32_t ext_5_slot_F; 477 1.1 garbled uint32_t ext_6_slot_B; 478 1.1 garbled uint32_t ext_7_slot_B; 479 1.1 garbled uint32_t ext_8_slot_G; 480 1.1 garbled uint32_t ext_9_slot_G; 481 1.1 garbled uint32_t ext_10_slot_C; 482 1.1 garbled uint32_t ext_11_slot_C; 483 1.1 garbled uint32_t ext_12_slot_E; 484 1.1 garbled uint32_t ext_13_slot_E; 485 1.1 garbled uint32_t ext_14_slot_A; 486 1.1 garbled uint32_t ext_15_slot_A; 487 1.1 garbled } MESR_err_9; 488 1.1 garbled } config_err_info; 489 1.1 garbled char unused_errinfo[64]; 490 1.1 garbled 491 1.1 garbled /* 492 1.1 garbled * Memory card VPD data area 493 1.1 garbled * cacheline sizes like above. 494 1.1 garbled * 0xffffffff = card is present, no VPD 495 1.1 garbled * 0x22222222 = card present with errors 496 1.1 garbled * 0x11111111 = no card 497 1.1 garbled * otherwise it's good. 498 1.1 garbled */ 499 1.1 garbled union { 500 1.1 garbled char memcd_vpd[128]; 501 1.1 garbled struct { /* cacheline 128 */ 502 1.1 garbled char ext_0_HandD[20]; 503 1.1 garbled char ext_4_FandB[20]; 504 1.1 garbled char ext_8_GandC[20]; 505 1.1 garbled char ext_12_EandA[20]; 506 1.1 garbled } memory_vpd_1; 507 1.1 garbled struct { /* cacheline 64 */ 508 1.1 garbled char ext_0_slot_H[10]; 509 1.1 garbled char dmy_0[2]; 510 1.1 garbled char ext_2_slot_D[10]; 511 1.1 garbled char dmy_2[2]; 512 1.1 garbled char ext_4_slot_F[10]; 513 1.1 garbled char dmy_4[2]; 514 1.1 garbled char ext_6_slot_B[10]; 515 1.1 garbled char dmy_6[2]; 516 1.1 garbled char ext_8_slot_G[10]; 517 1.1 garbled char dmy_8[2]; 518 1.1 garbled char ext_10_slot_C[10]; 519 1.1 garbled char dmy_10[2]; 520 1.1 garbled char ext_12_slot_E[10]; 521 1.1 garbled char dmy_12[2]; 522 1.1 garbled char ext_14_slot_A[10]; 523 1.1 garbled char dmy_14[2]; 524 1.1 garbled } memory_vpd_9; 525 1.1 garbled } memcd_vpd; 526 1.1 garbled 527 1.1 garbled int32_t cache_line_size; 528 1.1 garbled /* Component reset register test results for BUID 20. 529 1.1 garbled * Anything other than 0x00AA55FF is horked. 530 1.1 garbled */ 531 1.1 garbled int32_t CRR_results; 532 1.1 garbled /* IO planar level register 533 1.1 garbled * 0x1YYXXXXX = family 2 534 1.1 garbled * 0x8YYXXXXX = table/desktop YY is engineering level, X reserved 535 1.1 garbled * -1 == not present 536 1.1 garbled * Values in MSB has following meaning: 537 1.1 garbled * 0x80 = table/desktop 538 1.1 garbled * 0x40 = reserved 539 1.1 garbled * 0x20 = reserved 540 1.1 garbled * 0x10 = rack planar 541 1.1 garbled * 0x08 = standard IO 542 1.1 garbled * 0x04 = power connector not connected 543 1.1 garbled * 0x02, 0x01 reserved 544 1.1 garbled */ 545 1.1 garbled int32_t io_planar_level_reg; /* BUID 20 */ 546 1.1 garbled int32_t io_planar_level_reg_21; 547 1.1 garbled int32_t io_planar_level_reg_22; 548 1.1 garbled int32_t io_planar_level_reg_23; 549 1.1 garbled 550 1.2 kamil /* Component register test results for the other BUID's */ 551 1.1 garbled int32_t CRR_results_21; 552 1.1 garbled int32_t CRR_results_22; 553 1.1 garbled int32_t CRR_results_23; 554 1.1 garbled 555 1.1 garbled /* CRR results for BUID 20 */ 556 1.1 garbled int32_t CRR_results_20_0; /* should contain 0x00000000 */ 557 1.1 garbled int32_t CRR_results_20_a; /* should contain 0xaaaaaaaa */ 558 1.1 garbled int32_t CRR_results_20_5; /* should contain 0x55555555 */ 559 1.1 garbled int32_t CRR_results_20_f; /* should contain 0xffffffff */ 560 1.1 garbled int32_t CRR_results_21_0; /* should contain 0x00000000 */ 561 1.1 garbled int32_t CRR_results_21_a; /* should contain 0xaaaaaaaa */ 562 1.1 garbled int32_t CRR_results_21_5; /* should contain 0x55555555 */ 563 1.1 garbled int32_t CRR_results_21_f; /* should contain 0xffffffff */ 564 1.1 garbled int32_t CRR_results_22_0; /* should contain 0x00000000 */ 565 1.1 garbled int32_t CRR_results_22_a; /* should contain 0xaaaaaaaa */ 566 1.1 garbled int32_t CRR_results_22_5; /* should contain 0x55555555 */ 567 1.1 garbled int32_t CRR_results_22_f; /* should contain 0xffffffff */ 568 1.1 garbled int32_t CRR_results_23_0; /* should contain 0x00000000 */ 569 1.1 garbled int32_t CRR_results_23_a; /* should contain 0xaaaaaaaa */ 570 1.1 garbled int32_t CRR_results_23_5; /* should contain 0x55555555 */ 571 1.1 garbled int32_t CRR_results_23_f; /* should contain 0xffffffff */ 572 1.1 garbled 573 1.1 garbled /* IO interrupt test results for BUID 21 */ 574 1.1 garbled int32_t io_intr_results_21; 575 1.1 garbled /* pointer to IPL rom code in mem */ 576 1.1 garbled u_char *rom_ram_addr; /* ROM Reserved */ 577 1.1 garbled uint32_t rom_ram_size; 578 1.1 garbled /* Storage control config register, ROM Reserved */ 579 1.1 garbled uint32_t sccr_toggle_one_meg; 580 1.1 garbled /* read from OCS NVRAM area */ 581 1.1 garbled uint32_t aix_model_code; /* 4 bytes from 0xA0003d0 */ 582 1.1 garbled /* The following entries are read from the OCS NVRAM area 583 1.1 garbled * ---------: dcache size = 0x0040 icache size = 0x0008 584 1.1 garbled * ---------: dcache size = 0x0020 icache size = 0x0008 585 1.1 garbled * ---------: dcache size = 0x0008 icache size = 0x0008 586 1.1 garbled * ---------: dcache size = 0x0040 icache size = 0x0020 587 1.1 garbled * ---------: dcache size = 0x0020 icache size = 0x0008 588 1.1 garbled */ 589 1.1 garbled int32_t dcache_size; /* 4 bytes from NVRAM 0xA0003d4 */ 590 1.1 garbled int32_t icache_size; /* 4 bytes from NVRAM address 0xA0003d8 */ 591 1.1 garbled char vpd_model_id[8]; 592 1.1 garbled 593 1.1 garbled /* saves the ptr to lowest addr needed by IPL rom */ 594 1.1 garbled u_char *low_boundary_save; /* ROM Reserved */ 595 1.1 garbled /* Pointer to romscan entry point and data area. ROM Reserved */ 596 1.1 garbled u_char *romscan_code_ptr; /* runtime entry point of rom scan */ 597 1.1 garbled u_char *rom_boot_data_area; /* runtime user ram ( >= 4K)*/ 598 1.1 garbled }; 599 1.1 garbled 600 1.1 garbled 601 1.1 garbled 602 1.1 garbled 603 1.1 garbled #endif /* _IPLCB_H_ */ 604