iplcb.h revision 1.2 1 1.2 kamil /* $NetBSD: iplcb.h,v 1.2 2015/07/11 10:32:46 kamil 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.1 garbled int architecture; /* Architecutre 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