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} __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} __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} __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} __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} __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} __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 __packed;
135	__u32 scp_data_len;
136	__u8  reserved8[260];
137	__u8  scp_data[];
138} __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} __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} __packed;
161
162/* IPL Report Block header */
163struct ipl_rb_hdr {
164	__u32 len;
165	__u8  rbt;
166	__u8  reserved1[11];
167} __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} __packed;
180
181struct ipl_rb_certificates {
182	__u32 len;
183	__u8  rbt;
184	__u8  reserved1[11];
185	struct ipl_rb_certificate_entry entries[];
186} __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} __packed;
207
208#endif
209