ipl.h 3.0 KB
Newer Older
M
Michael Holzheu 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * s390 (re)ipl support
 *
 * Copyright IBM Corp. 2007
 */

#ifndef _ASM_S390_IPL_H
#define _ASM_S390_IPL_H

#include <asm/types.h>
M
Michael Holzheu 已提交
11 12
#include <asm/cio.h>
#include <asm/setup.h>
M
Michael Holzheu 已提交
13 14 15 16 17 18

#define IPL_PARMBLOCK_ORIGIN	0x2000

#define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \
			      sizeof(struct ipl_block_fcp))

19 20
#define IPL_PARM_BLK0_FCP_LEN (sizeof(struct ipl_block_fcp) + 8)

M
Michael Holzheu 已提交
21 22 23
#define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \
			      sizeof(struct ipl_block_ccw))

24 25
#define IPL_PARM_BLK0_CCW_LEN (sizeof(struct ipl_block_ccw) + 8)

M
Michael Holzheu 已提交
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
#define IPL_MAX_SUPPORTED_VERSION (0)

#define IPL_PARMBLOCK_START	((struct ipl_parameter_block *) \
				 IPL_PARMBLOCK_ORIGIN)
#define IPL_PARMBLOCK_SIZE	(IPL_PARMBLOCK_START->hdr.len)

struct ipl_list_hdr {
	u32 len;
	u8  reserved1[3];
	u8  version;
	u32 blk0_len;
	u8  pbt;
	u8  flags;
	u16 reserved2;
} __attribute__((packed));

struct ipl_block_fcp {
	u8  reserved1[313-1];
	u8  opt;
	u8  reserved2[3];
	u16 reserved3;
	u16 devno;
	u8  reserved4[4];
	u64 wwpn;
	u64 lun;
	u32 bootprog;
	u8  reserved5[12];
	u64 br_lba;
	u32 scp_data_len;
	u8  reserved6[260];
	u8  scp_data[];
} __attribute__((packed));

59 60
#define DIAG308_VMPARM_SIZE	64

M
Michael Holzheu 已提交
61
struct ipl_block_ccw {
62
	u8  load_parm[8];
M
Michael Holzheu 已提交
63 64 65 66 67 68
	u8  reserved1[84];
	u8  reserved2[2];
	u16 devno;
	u8  vm_flags;
	u8  reserved3[3];
	u32 vm_parm_len;
69 70 71
	u8  nss_name[8];
	u8  vm_parm[DIAG308_VMPARM_SIZE];
	u8  reserved4[8];
M
Michael Holzheu 已提交
72 73 74 75 76 77 78 79
} __attribute__((packed));

struct ipl_parameter_block {
	struct ipl_list_hdr hdr;
	union {
		struct ipl_block_fcp fcp;
		struct ipl_block_ccw ccw;
	} ipl_info;
80
} __attribute__((packed,aligned(4096)));
M
Michael Holzheu 已提交
81 82

/*
83
 * IPL validity flags
M
Michael Holzheu 已提交
84 85
 */
extern u32 ipl_flags;
86
extern u32 dump_prefix_page;
H
Heiko Carstens 已提交
87
extern unsigned int zfcpdump_prefix_array[];
M
Michael Holzheu 已提交
88

M
Michael Holzheu 已提交
89
extern void do_reipl(void);
90 91
extern void do_halt(void);
extern void do_poff(void);
M
Michael Holzheu 已提交
92
extern void ipl_save_parameters(void);
93 94
extern void ipl_update_parameters(void);
extern void get_ipl_vmparm(char *);
M
Michael Holzheu 已提交
95 96 97 98 99 100 101

enum {
	IPL_DEVNO_VALID		= 1,
	IPL_PARMBLOCK_VALID	= 2,
	IPL_NSS_VALID		= 4,
};

M
Michael Holzheu 已提交
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
enum ipl_type {
	IPL_TYPE_UNKNOWN	= 1,
	IPL_TYPE_CCW		= 2,
	IPL_TYPE_FCP		= 4,
	IPL_TYPE_FCP_DUMP	= 8,
	IPL_TYPE_NSS		= 16,
};

struct ipl_info
{
	enum ipl_type type;
	union {
		struct {
			struct ccw_dev_id dev_id;
		} ccw;
		struct {
			struct ccw_dev_id dev_id;
			u64 wwpn;
			u64 lun;
		} fcp;
		struct {
			char name[NSS_NAME_SIZE + 1];
		} nss;
	} data;
};

extern struct ipl_info ipl_info;
129
extern void setup_ipl(void);
M
Michael Holzheu 已提交
130

M
Michael Holzheu 已提交
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
/*
 * DIAG 308 support
 */
enum diag308_subcode  {
	DIAG308_REL_HSA	= 2,
	DIAG308_IPL	= 3,
	DIAG308_DUMP	= 4,
	DIAG308_SET	= 5,
	DIAG308_STORE	= 6,
};

enum diag308_ipl_type {
	DIAG308_IPL_TYPE_FCP	= 0,
	DIAG308_IPL_TYPE_CCW	= 2,
};

enum diag308_opt {
	DIAG308_IPL_OPT_IPL	= 0x10,
	DIAG308_IPL_OPT_DUMP	= 0x20,
};

152 153 154 155
enum diag308_flags {
	DIAG308_FLAGS_LP_VALID	= 0x80,
};

156 157 158 159 160
enum diag308_vm_flags {
	DIAG308_VM_FLAGS_NSS_VALID	= 0x80,
	DIAG308_VM_FLAGS_VP_VALID	= 0x40,
};

M
Michael Holzheu 已提交
161
enum diag308_rc {
162 163
	DIAG308_RC_OK		= 0x0001,
	DIAG308_RC_NOCONFIG	= 0x0102,
M
Michael Holzheu 已提交
164 165 166 167 168
};

extern int diag308(unsigned long subcode, void *addr);

#endif /* _ASM_S390_IPL_H */