/*
 * Copyright (C) 2001  Mike Corrigan IBM Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 */
#ifndef _ISERIES_IPL_PARMS_H
#define _ISERIES_IPL_PARMS_H

/*
 *	This struct maps the IPL Parameters DMA'd from the SP.
 *
 * Warning:
 *	This data must map in exactly 64 bytes and match the architecture for
 *	the IPL parms
 */

#include <asm/types.h>

struct ItIplParmsReal {
	u8	xFormat;		// Defines format of IplParms	x00-x00
	u8	xRsvd01:6;		// Reserved			x01-x01
	u8	xAlternateSearch:1;	// Alternate search indicator	...
	u8	xUaSupplied:1;		// UA Supplied on programmed IPL...
	u8	xLsUaFormat;		// Format byte for UA		x02-x02
	u8	xRsvd02;		// Reserved			x03-x03
	u32	xLsUa;			// LS UA			x04-x07
	u32	xUnusedLsLid;		// First OS LID to load		x08-x0B
	u16	xLsBusNumber;		// LS Bus Number		x0C-x0D
	u8	xLsCardAdr;		// LS Card Address		x0E-x0E
	u8	xLsBoardAdr;		// LS Board Address		x0F-x0F
	u32	xRsvd03;		// Reserved			x10-x13
	u8	xSpcnPresent:1;		// SPCN present			x14-x14
	u8	xCpmPresent:1;		// CPM present			...
	u8	xRsvd04:6;		// Reserved			...
	u8	xRsvd05:4;		// Reserved			x15-x15
	u8	xKeyLock:4;		// Keylock setting		...
	u8	xRsvd06:6;		// Reserved			x16-x16
	u8	xIplMode:2;		// Ipl mode (A|B|C|D)		...
	u8	xHwIplType;		// Fast v slow v slow EC HW IPL	x17-x17
	u16	xCpmEnabledIpl:1;	// CPM in effect when IPL initiatedx18-x19
	u16	xPowerOnResetIpl:1;	// Indicate POR condition	...
	u16	xMainStorePreserved:1;	// Main Storage is preserved	...
	u16	xRsvd07:13;		// Reserved			...
	u16	xIplSource:16;		// Ipl source			x1A-x1B
	u8	xIplReason:8;		// Reason for this IPL		x1C-x1C
	u8	xRsvd08;		// Reserved			x1D-x1D
	u16	xRsvd09;		// Reserved			x1E-x1F
	u16	xSysBoxType;		// System Box Type		x20-x21
	u16	xSysProcType;		// System Processor Type	x22-x23
	u32	xRsvd10;		// Reserved			x24-x27
	u64	xRsvd11;		// Reserved			x28-x2F
	u64	xRsvd12;		// Reserved			x30-x37
	u64	xRsvd13;		// Reserved			x38-x3F
};

#endif /* _ISERIES_IPL_PARMS_H */
