Home | History | Annotate | Line # | Download | only in include
      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