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