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