Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ipl.h
Go to the documentation of this file.
1 /*
2  * s390 (re)ipl support
3  *
4  * Copyright IBM Corp. 2007
5  */
6 
7 #ifndef _ASM_S390_IPL_H
8 #define _ASM_S390_IPL_H
9 
10 #include <asm/types.h>
11 #include <asm/cio.h>
12 #include <asm/setup.h>
13 
14 #define IPL_PARMBLOCK_ORIGIN 0x2000
15 
16 #define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \
17  sizeof(struct ipl_block_fcp))
18 
19 #define IPL_PARM_BLK0_FCP_LEN (sizeof(struct ipl_block_fcp) + 8)
20 
21 #define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \
22  sizeof(struct ipl_block_ccw))
23 
24 #define IPL_PARM_BLK0_CCW_LEN (sizeof(struct ipl_block_ccw) + 8)
25 
26 #define IPL_MAX_SUPPORTED_VERSION (0)
27 
28 #define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \
29  IPL_PARMBLOCK_ORIGIN)
30 #define IPL_PARMBLOCK_SIZE (IPL_PARMBLOCK_START->hdr.len)
31 
32 struct ipl_list_hdr {
40 } __attribute__((packed));
41 
42 struct ipl_block_fcp {
43  u8 reserved1[313-1];
55  u8 reserved6[260];
57 } __attribute__((packed));
58 
59 #define DIAG308_VMPARM_SIZE 64
60 #define DIAG308_SCPDATA_SIZE (PAGE_SIZE - (sizeof(struct ipl_list_hdr) + \
61  offsetof(struct ipl_block_fcp, scp_data)))
62 
63 struct ipl_block_ccw {
74 } __attribute__((packed));
75 
77  struct ipl_list_hdr hdr;
78  union {
82 } __attribute__((packed,aligned(4096)));
83 
84 /*
85  * IPL validity flags
86  */
87 extern u32 ipl_flags;
88 extern u32 dump_prefix_page;
89 extern unsigned int zfcpdump_prefix_array[];
90 
91 extern void do_reipl(void);
92 extern void do_halt(void);
93 extern void do_poff(void);
94 extern void ipl_save_parameters(void);
95 extern void ipl_update_parameters(void);
96 extern size_t append_ipl_vmparm(char *, size_t);
97 extern size_t append_ipl_scpdata(char *, size_t);
98 
99 enum {
103 };
104 
105 enum ipl_type {
111 };
112 
113 struct ipl_info
114 {
116  union {
117  struct {
119  } ccw;
120  struct {
121  struct ccw_dev_id dev_id;
124  } fcp;
125  struct {
126  char name[NSS_NAME_SIZE + 1];
127  } nss;
128  } data;
129 };
130 
131 extern struct ipl_info ipl_info;
132 extern void setup_ipl(void);
133 
134 /*
135  * DIAG 308 support
136  */
143 };
144 
148 };
149 
153 };
154 
157 };
158 
162 };
163 
165  DIAG308_RC_OK = 0x0001,
167 };
168 
169 extern int diag308(unsigned long subcode, void *addr);
170 extern void diag308_reset(void);
171 extern void store_status(void);
172 extern void lgr_info_log(void);
173 
174 #endif /* _ASM_S390_IPL_H */