xref: /netbsd-src/sys/arch/rs6000/stand/boot/iplcb.c (revision 68fe5b6f0ada181498871fa776cde03e4a1ba5fc)
1 /* $NetBSD: iplcb.c,v 1.1 2007/12/17 19:09:51 garbled Exp $ */
2 
3 #include <lib/libsa/stand.h>
4 #include <sys/param.h>
5 
6 #include "boot.h"
7 #include <machine/iplcb.h>
8 
9 extern struct ipl_directory ipldir;
10 
11 static void dump_sysinfo(void *);
12 /* dump the sysinfo structure */
13 static void
dump_sysinfo(void * sysinfo_p)14 dump_sysinfo(void *sysinfo_p)
15 {
16 	struct sys_info *sysinfo = (struct sys_info *)sysinfo_p;
17 
18 	printf("  System Info: %p\n", sysinfo_p);
19 	printf("    Processors: %d\n", sysinfo->nrof_procs);
20 	printf("    Coherence Block size: 0x%x\n", sysinfo->coherency_size);
21 	printf("    Reservation Granule size: 0x%x\n", sysinfo->resv_size);
22 	printf("    Arbiter Controller RA: %p\n", sysinfo->arb_ctrl_addr);
23 	printf("    Physical ID Register RA: %p\n", sysinfo->phys_id_addr);
24 	printf("    # of BOS Slot Reset Registers: %d\n", sysinfo->nrof_bsrr);
25 	printf("    BSSR RA: %p\n", sysinfo->bssr_addr);
26 	printf("    Time of day type: %d\n", sysinfo->tod_type);
27 	printf("    TOD Register RA: %p\n", sysinfo->todr_addr);
28 	printf("    Reset Status Register RA: %p\n", sysinfo->rsr_addr);
29 	printf("    Power/Keylock Status RA: %p\n", sysinfo->pksr_addr);
30 	printf("    Power/Reset Control RA: %p\n", sysinfo->prcr_addr);
31 	printf("    System Specific Register RA: %p\n", sysinfo->sssr_addr);
32 	printf("    System Interrupt Regs RA: %p\n", sysinfo->sir_addr);
33 	printf("    Standard Config Register RA: %p\n", sysinfo->scr_addr);
34 	printf("    Device Special Config Register RA: %p\n", sysinfo->dscr_addr);
35 	printf("    NVRAM size: %d\n", sysinfo->nvram_size);
36 	printf("    NVRAM RA: %p\n", sysinfo->nvram_addr);
37 	printf("    VPD ROM RA: %p\n", sysinfo->vpd_rom_addr);
38 	printf("    IPL ROM size: %d\n", sysinfo->ipl_rom_size);
39 	printf("    IPL ROM RA: %p\n", sysinfo->ipl_rom_addr);
40 	printf("    Global MFFR Register RA: %p\n", sysinfo->g_mfrr_addr);
41 	printf("    Global Timebase RA: %p\n", sysinfo->g_tb_addr);
42 	printf("    Global Timebase type: %d\n", sysinfo->g_tb_type);
43 	printf("    Global Timebase multiplier: %d\n", sysinfo->g_tb_mult);
44 	printf("    SP Errorlog Offset: 0x%x\n", sysinfo->sp_errorlog_off);
45 	printf("    Connectivity Config Register RA: %p\n", sysinfo->pcccr_addr);
46 	printf("    Software Poweroff Register RA: %p\n", sysinfo->spocr_addr);
47 	printf("    EPOW intr register RA: %p\n", sysinfo->pfeivr_addr);
48 	printf("    Access ID waddr: %d\n", sysinfo->access_id_waddr);
49 	printf("    APM write space RA: %p\n", sysinfo->loc_waddr);
50 	printf("    Access ID raddr: %d\n", sysinfo->access_id_raddr);
51 	printf("    APM read space RA: %p\n", sysinfo->loc_raddr);
52 	printf("    Architecture: %d\n", sysinfo->architecture);
53 	printf("    Implementation: %d\n", sysinfo->implementation);
54 	printf("    Machine Description: %s\n", sysinfo->pkg_desc);
55 }
56 
57 /* Dump the IPL control block */
58 void
dump_iplcb(void * iplcb_p)59 dump_iplcb(void *iplcb_p)
60 {
61 	u_char *p;
62 	uint32_t i;
63 	struct ipl_directory *ipldir;
64 	struct ipl_cb *iplcb_ptr;
65 
66 	iplcb_ptr = iplcb_p;
67 	ipldir = &(iplcb_ptr->dir);
68 
69 	printf("IPL Control Block\n");
70 	printf("  IPL Control Block Address: %p\n", iplcb_p);
71 	printf("IPL Directory Block\n");
72 	printf("  IPLCB_ID: %s\n", ipldir->iplcb_id);
73 	printf("  GPR offset: 0x%x\n", ipldir->gpr_save_off);
74 	printf("  Bitmap size: 0x%x\n", ipldir->cb_bitmap_size);
75 	printf("  Bitmap offset: 0x%x\n", ipldir->bitmap_off);
76 	printf("  Bitmap size: 0x%x\n", ipldir->bitmap_size);
77 	printf("  IPL info offset: 0x%x\n", ipldir->iplinfo_off);
78 	printf("  IPL info size: 0x%x\n", ipldir->iplinfo_size);
79 	printf("  IOCC POST offset: 0x%x\n", ipldir->iocc_post_off);
80 	printf("  IOCC POST size: 0x%x\n", ipldir->iocc_post_size);
81 	printf("  NIO POST offset: 0x%x\n", ipldir->nio_post_off);
82 	printf("  NIO POST size: 0x%x\n", ipldir->nio_post_size);
83 	printf("  SJL POST offset: 0x%x\n", ipldir->sjl_post_off);
84 	printf("  SJL POST size: 0x%x\n", ipldir->sjl_post_size);
85 	printf("  SCSI POST offset: 0x%x\n", ipldir->scsi_post_off);
86 	printf("  SCSI POST size: 0x%x\n", ipldir->scsi_post_size);
87 	printf("  Ethernet POST offset: 0x%x\n", ipldir->eth_post_off);
88 	printf("  Ethernet POST size: 0x%x\n", ipldir->eth_post_size);
89 	printf("  Token Ring POST offset: 0x%x\n", ipldir->tok_post_off);
90 	printf("  Token Ring POST size: 0x%x\n", ipldir->tok_post_size);
91 	printf("  Serial POST offset: 0x%x\n", ipldir->ser_post_off);
92 	printf("  Serial POST size: 0x%x\n", ipldir->ser_post_size);
93 	printf("  Parallel POST offset: 0x%x\n", ipldir->par_post_off);
94 	printf("  Parallel POST size: 0x%x\n", ipldir->par_post_size);
95 	printf("  RSC POST offset: 0x%x\n", ipldir->rsc_post_off);
96 	printf("  RSC POST size: 0x%x\n", ipldir->rsc_post_size);
97 	printf("  Legacy POST offset: 0x%x\n", ipldir->lega_post_off);
98 	printf("  Legacy POST size: 0x%x\n", ipldir->lega_post_size);
99 	printf("  Keyboard POST offset: 0x%x\n", ipldir->kbd_post_off);
100 	printf("  Keyboard POST size: 0x%x\n", ipldir->kbd_post_size);
101 	printf("  RAM POST offset: 0x%x\n", ipldir->ram_post_off);
102 	printf("  RAM POST size: 0x%x\n", ipldir->ram_post_size);
103 	printf("  SGA POST offset: 0x%x\n", ipldir->sga_post_off);
104 	printf("  SGA POST size: 0x%x\n", ipldir->sga_post_size);
105 	printf("  Family2 POST offset: 0x%x\n", ipldir->fm2_post_off);
106 	printf("  Family2 POST size: 0x%x\n", ipldir->fm2_post_size);
107 	printf("  Netboot result offset: 0x%x\n", ipldir->net_boot_result_off);
108 	printf("  Netboot result size: 0x%x\n", ipldir->net_boot_result_size);
109 	printf("  Core Sequence Controller result offset: 0x%x\n", ipldir->csc_result_off);
110 	printf("  Core Sequence Controller result size: 0x%x\n", ipldir->csc_result_size);
111 	printf("  Menu result offset: 0x%x\n", ipldir->menu_result_off);
112 	printf("  Menu result size: 0x%x\n", ipldir->menu_result_size);
113 	printf("  Console result offset: 0x%x\n", ipldir->cons_result_off);
114 	printf("  Console result size: 0x%x\n", ipldir->cons_result_size);
115 	printf("  Diag result offset: 0x%x\n", ipldir->diag_result_off);
116 	printf("  Diag result size: 0x%x\n", ipldir->diag_result_size);
117 	printf("  ROM scan offset: 0x%x\n", ipldir->rom_scan_off);
118 	printf("  ROM scan size: 0x%x\n", ipldir->rom_scan_size);
119 	printf("  SKY POST offset: 0x%x\n", ipldir->sky_post_off);
120 	printf("  SKY POST size: 0x%x\n", ipldir->sky_post_size);
121 	printf("  Global offset: 0x%x\n", ipldir->global_off);
122 	printf("  Global size: 0x%x\n", ipldir->global_size);
123 	printf("  Mouse offset: 0x%x\n", ipldir->mouse_off);
124 	printf("  Mouse size: 0x%x\n", ipldir->mouse_size);
125 	printf("  VRS offset: 0x%x\n", ipldir->vrs_off);
126 	printf("  VRS size: 0x%x\n", ipldir->vrs_size);
127 	printf("  Taur offset: 0x%x\n", ipldir->taur_post_off);
128 	printf("  Taur size: 0x%x\n", ipldir->taur_post_size);
129 	printf("  ENT offset: 0x%x\n", ipldir->ent_post_off);
130 	printf("  ENT size: 0x%x\n", ipldir->ent_post_size);
131 	printf("  VRS40 offset: 0x%x\n", ipldir->vrs40_off);
132 	printf("  VRS40 size: 0x%x\n", ipldir->vrs40_size);
133 	printf("  Sysinfo offset: 0x%x\n", ipldir->sysinfo_offset);
134 	printf("  Sysinfo size: 0x%x\n", ipldir->sysinfo_size);
135 	printf("  BUCinfo offset: 0x%x\n", ipldir->bucinfo_off);
136 	printf("  BUCinfo size: 0x%x\n", ipldir->bucinfo_size);
137 	printf("  Processor info offset: 0x%x\n", ipldir->procinfo_off);
138 	printf("  Processor info size: 0x%x\n", ipldir->procinfo_size);
139 	printf("  Family 2 IO info offset: 0x%x\n", ipldir->fm2_ioinfo_off);
140 	printf("  Family 2 IO info size: 0x%x\n", ipldir->fm2_ioinfo_size);
141 	printf("  Processor POST offset: 0x%x\n", ipldir->proc_post_off);
142 	printf("  Processor POST size: 0x%x\n", ipldir->proc_post_size);
143 	printf("  System VPD offset: 0x%x\n", ipldir->sysvpd_off);
144 	printf("  System VPD size: 0x%x\n", ipldir->sysvpd_size);
145 	printf("  Memory Data offset: 0x%x\n", ipldir->memdata_off);
146 	printf("  Memory Data size: 0x%x\n", ipldir->memdata_size);
147 	printf("  L2 data offset: 0x%x\n", ipldir->l2data_off);
148 	printf("  L2 data size: 0x%x\n", ipldir->l2data_size);
149 	printf("  FDDI POST offset: 0x%x\n", ipldir->fddi_post_off);
150 	printf("  FDDI POST size: 0x%x\n", ipldir->fddi_post_size);
151 	printf("  Golden VPD offset: 0x%x\n", ipldir->golden_vpd_off);
152 	printf("  Golden VPD size: 0x%x\n", ipldir->golden_vpd_size);
153 	printf("  NVRAM Cache offset: 0x%x\n", ipldir->nvram_cache_off);
154 	printf("  NVRAM Cache size: 0x%x\n", ipldir->nvram_cache_size);
155 	printf("  User struct offset: 0x%x\n", ipldir->user_struct_off);
156 	printf("  User struct size: 0x%x\n", ipldir->user_struct_size);
157 	printf("  Residual offset: 0x%x\n", ipldir->residual_off);
158 	printf("  Residual size: 0x%x\n", ipldir->residual_size);
159 
160 	dump_sysinfo(iplcb_p + ipldir->sysinfo_offset);
161 	p = (u_char *)(iplcb_p + ipldir->procinfo_off);
162 	for (i=0; i < ipldir->procinfo_size; i+=4) {
163 		printf(" 0x%x\n", *p);
164 		p += i;
165 	}
166 
167 }
168