master
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _ASM_S390_UAPI_IPL_H
3#define _ASM_S390_UAPI_IPL_H
4
5#include <linux/types.h>
6
7/* IPL Parameter List header */
8struct ipl_pl_hdr {
9 __u32 len;
10 __u8 flags;
11 __u8 reserved1[2];
12 __u8 version;
13} __attribute__((packed));
14
15#define IPL_PL_FLAG_IPLPS 0x80
16#define IPL_PL_FLAG_SIPL 0x40
17#define IPL_PL_FLAG_IPLSR 0x20
18
19/* IPL Parameter Block header */
20struct ipl_pb_hdr {
21 __u32 len;
22 __u8 pbt;
23} __attribute__((packed));
24
25/* IPL Parameter Block types */
26enum ipl_pbt {
27 IPL_PBT_FCP = 0,
28 IPL_PBT_SCP_DATA = 1,
29 IPL_PBT_CCW = 2,
30 IPL_PBT_ECKD = 3,
31 IPL_PBT_NVME = 4,
32};
33
34/* IPL Parameter Block 0 with common fields */
35struct ipl_pb0_common {
36 __u32 len;
37 __u8 pbt;
38 __u8 flags;
39 __u8 reserved1[2];
40 __u8 loadparm[8];
41 __u8 reserved2[84];
42} __attribute__((packed));
43
44#define IPL_PB0_FLAG_LOADPARM 0x80
45
46/* IPL Parameter Block 0 for FCP */
47struct ipl_pb0_fcp {
48 __u32 len;
49 __u8 pbt;
50 __u8 reserved1[3];
51 __u8 loadparm[8];
52 __u8 reserved2[304];
53 __u8 opt;
54 __u8 reserved3[3];
55 __u8 cssid;
56 __u8 reserved4[1];
57 __u16 devno;
58 __u8 reserved5[4];
59 __u64 wwpn;
60 __u64 lun;
61 __u32 bootprog;
62 __u8 reserved6[12];
63 __u64 br_lba;
64 __u32 scp_data_len;
65 __u8 reserved7[260];
66 __u8 scp_data[];
67} __attribute__((packed));
68
69#define IPL_PB0_FCP_OPT_IPL 0x10
70#define IPL_PB0_FCP_OPT_DUMP 0x20
71
72/* IPL Parameter Block 0 for NVMe */
73struct ipl_pb0_nvme {
74 __u32 len;
75 __u8 pbt;
76 __u8 reserved1[3];
77 __u8 loadparm[8];
78 __u8 reserved2[304];
79 __u8 opt;
80 __u8 reserved3[3];
81 __u32 fid;
82 __u8 reserved4[12];
83 __u32 nsid;
84 __u8 reserved5[4];
85 __u32 bootprog;
86 __u8 reserved6[12];
87 __u64 br_lba;
88 __u32 scp_data_len;
89 __u8 reserved7[260];
90 __u8 scp_data[];
91} __attribute__((packed));
92
93#define IPL_PB0_NVME_OPT_IPL 0x10
94#define IPL_PB0_NVME_OPT_DUMP 0x20
95
96/* IPL Parameter Block 0 for CCW */
97struct ipl_pb0_ccw {
98 __u32 len;
99 __u8 pbt;
100 __u8 flags;
101 __u8 reserved1[2];
102 __u8 loadparm[8];
103 __u8 reserved2[84];
104 __u16 reserved3 : 13;
105 __u8 ssid : 3;
106 __u16 devno;
107 __u8 vm_flags;
108 __u8 reserved4[3];
109 __u32 vm_parm_len;
110 __u8 nss_name[8];
111 __u8 vm_parm[64];
112 __u8 reserved5[8];
113} __attribute__((packed));
114
115/* IPL Parameter Block 0 for ECKD */
116struct ipl_pb0_eckd {
117 __u32 len;
118 __u8 pbt;
119 __u8 reserved1[3];
120 __u32 reserved2[78];
121 __u8 opt;
122 __u8 reserved4[4];
123 __u8 reserved5:5;
124 __u8 ssid:3;
125 __u16 devno;
126 __u32 reserved6[5];
127 __u32 bootprog;
128 __u8 reserved7[12];
129 struct {
130 __u16 cyl;
131 __u8 head;
132 __u8 record;
133 __u32 reserved;
134 } br_chr __attribute__((packed));
135 __u32 scp_data_len;
136 __u8 reserved8[260];
137 __u8 scp_data[];
138} __attribute__((packed));
139
140#define IPL_PB0_ECKD_OPT_IPL 0x10
141#define IPL_PB0_ECKD_OPT_DUMP 0x20
142
143#define IPL_PB0_CCW_VM_FLAG_NSS 0x80
144#define IPL_PB0_CCW_VM_FLAG_VP 0x40
145
146/* IPL Parameter Block 1 for additional SCP data */
147struct ipl_pb1_scp_data {
148 __u32 len;
149 __u8 pbt;
150 __u8 scp_data[];
151} __attribute__((packed));
152
153/* IPL Report List header */
154struct ipl_rl_hdr {
155 __u32 len;
156 __u8 flags;
157 __u8 reserved1[2];
158 __u8 version;
159 __u8 reserved2[8];
160} __attribute__((packed));
161
162/* IPL Report Block header */
163struct ipl_rb_hdr {
164 __u32 len;
165 __u8 rbt;
166 __u8 reserved1[11];
167} __attribute__((packed));
168
169/* IPL Report Block types */
170enum ipl_rbt {
171 IPL_RBT_CERTIFICATES = 1,
172 IPL_RBT_COMPONENTS = 2,
173};
174
175/* IPL Report Block for the certificate list */
176struct ipl_rb_certificate_entry {
177 __u64 addr;
178 __u64 len;
179} __attribute__((packed));
180
181struct ipl_rb_certificates {
182 __u32 len;
183 __u8 rbt;
184 __u8 reserved1[11];
185 struct ipl_rb_certificate_entry entries[];
186} __attribute__((packed));
187
188/* IPL Report Block for the component list */
189struct ipl_rb_component_entry {
190 __u64 addr;
191 __u64 len;
192 __u8 flags;
193 __u8 reserved1[5];
194 __u16 certificate_index;
195 __u8 reserved2[8];
196};
197
198#define IPL_RB_COMPONENT_FLAG_SIGNED 0x80
199#define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40
200
201struct ipl_rb_components {
202 __u32 len;
203 __u8 rbt;
204 __u8 reserved1[11];
205 struct ipl_rb_component_entry entries[];
206} __attribute__((packed));
207
208#endif