xref: /openbmc/linux/arch/s390/include/uapi/asm/ipl.h (revision e2d2a296)
1d9c52522SMasahiro Yamada /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
25f1207fbSMartin Schwidefsky #ifndef _ASM_S390_UAPI_IPL_H
35f1207fbSMartin Schwidefsky #define _ASM_S390_UAPI_IPL_H
45f1207fbSMartin Schwidefsky 
55f1207fbSMartin Schwidefsky #include <linux/types.h>
65f1207fbSMartin Schwidefsky 
75f1207fbSMartin Schwidefsky /* IPL Parameter List header */
85f1207fbSMartin Schwidefsky struct ipl_pl_hdr {
95f1207fbSMartin Schwidefsky 	__u32 len;
10d29af5b7SMartin Schwidefsky 	__u8  flags;
11d29af5b7SMartin Schwidefsky 	__u8  reserved1[2];
125f1207fbSMartin Schwidefsky 	__u8  version;
135f1207fbSMartin Schwidefsky } __packed;
145f1207fbSMartin Schwidefsky 
15d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLPS	0x80
16d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_SIPL	0x40
17d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLSR	0x20
18d29af5b7SMartin Schwidefsky 
195f1207fbSMartin Schwidefsky /* IPL Parameter Block header */
205f1207fbSMartin Schwidefsky struct ipl_pb_hdr {
215f1207fbSMartin Schwidefsky 	__u32 len;
225f1207fbSMartin Schwidefsky 	__u8  pbt;
235f1207fbSMartin Schwidefsky } __packed;
245f1207fbSMartin Schwidefsky 
255f1207fbSMartin Schwidefsky /* IPL Parameter Block types */
265f1207fbSMartin Schwidefsky enum ipl_pbt {
275f1207fbSMartin Schwidefsky 	IPL_PBT_FCP = 0,
285f1207fbSMartin Schwidefsky 	IPL_PBT_SCP_DATA = 1,
295f1207fbSMartin Schwidefsky 	IPL_PBT_CCW = 2,
3087fd22e0SSven Schnelle 	IPL_PBT_ECKD = 3,
313737e8eeSJason J. Herne 	IPL_PBT_NVME = 4,
325f1207fbSMartin Schwidefsky };
335f1207fbSMartin Schwidefsky 
345f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 with common fields */
355f1207fbSMartin Schwidefsky struct ipl_pb0_common {
365f1207fbSMartin Schwidefsky 	__u32 len;
375f1207fbSMartin Schwidefsky 	__u8  pbt;
385f1207fbSMartin Schwidefsky 	__u8  flags;
395f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
405f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
415f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
425f1207fbSMartin Schwidefsky } __packed;
435f1207fbSMartin Schwidefsky 
445f1207fbSMartin Schwidefsky #define IPL_PB0_FLAG_LOADPARM	0x80
455f1207fbSMartin Schwidefsky 
465f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for FCP */
475f1207fbSMartin Schwidefsky struct ipl_pb0_fcp {
485f1207fbSMartin Schwidefsky 	__u32 len;
495f1207fbSMartin Schwidefsky 	__u8  pbt;
505f1207fbSMartin Schwidefsky 	__u8  reserved1[3];
515f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
525f1207fbSMartin Schwidefsky 	__u8  reserved2[304];
535f1207fbSMartin Schwidefsky 	__u8  opt;
545f1207fbSMartin Schwidefsky 	__u8  reserved3[3];
555f1207fbSMartin Schwidefsky 	__u8  cssid;
565f1207fbSMartin Schwidefsky 	__u8  reserved4[1];
575f1207fbSMartin Schwidefsky 	__u16 devno;
585f1207fbSMartin Schwidefsky 	__u8  reserved5[4];
595f1207fbSMartin Schwidefsky 	__u64 wwpn;
605f1207fbSMartin Schwidefsky 	__u64 lun;
615f1207fbSMartin Schwidefsky 	__u32 bootprog;
625f1207fbSMartin Schwidefsky 	__u8  reserved6[12];
635f1207fbSMartin Schwidefsky 	__u64 br_lba;
645f1207fbSMartin Schwidefsky 	__u32 scp_data_len;
655f1207fbSMartin Schwidefsky 	__u8  reserved7[260];
665f1207fbSMartin Schwidefsky 	__u8  scp_data[];
675f1207fbSMartin Schwidefsky } __packed;
685f1207fbSMartin Schwidefsky 
695f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_IPL	0x10
705f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_DUMP	0x20
715f1207fbSMartin Schwidefsky 
723737e8eeSJason J. Herne /* IPL Parameter Block 0 for NVMe */
733737e8eeSJason J. Herne struct ipl_pb0_nvme {
743737e8eeSJason J. Herne 	__u32 len;
753737e8eeSJason J. Herne 	__u8  pbt;
763737e8eeSJason J. Herne 	__u8  reserved1[3];
773737e8eeSJason J. Herne 	__u8  loadparm[8];
783737e8eeSJason J. Herne 	__u8  reserved2[304];
793737e8eeSJason J. Herne 	__u8  opt;
803737e8eeSJason J. Herne 	__u8  reserved3[3];
813737e8eeSJason J. Herne 	__u32 fid;
823737e8eeSJason J. Herne 	__u8 reserved4[12];
833737e8eeSJason J. Herne 	__u32 nsid;
843737e8eeSJason J. Herne 	__u8 reserved5[4];
853737e8eeSJason J. Herne 	__u32 bootprog;
863737e8eeSJason J. Herne 	__u8 reserved6[12];
873737e8eeSJason J. Herne 	__u64 br_lba;
883737e8eeSJason J. Herne 	__u32 scp_data_len;
893737e8eeSJason J. Herne 	__u8  reserved7[260];
903737e8eeSJason J. Herne 	__u8  scp_data[];
913737e8eeSJason J. Herne } __packed;
923737e8eeSJason J. Herne 
933737e8eeSJason J. Herne #define IPL_PB0_NVME_OPT_IPL	0x10
943737e8eeSJason J. Herne #define IPL_PB0_NVME_OPT_DUMP	0x20
953737e8eeSJason J. Herne 
965f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for CCW */
975f1207fbSMartin Schwidefsky struct ipl_pb0_ccw {
985f1207fbSMartin Schwidefsky 	__u32 len;
995f1207fbSMartin Schwidefsky 	__u8  pbt;
1005f1207fbSMartin Schwidefsky 	__u8  flags;
1015f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
1025f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
1035f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
1045f1207fbSMartin Schwidefsky 	__u16 reserved3 : 13;
1055f1207fbSMartin Schwidefsky 	__u8  ssid : 3;
1065f1207fbSMartin Schwidefsky 	__u16 devno;
1075f1207fbSMartin Schwidefsky 	__u8  vm_flags;
1085f1207fbSMartin Schwidefsky 	__u8  reserved4[3];
1095f1207fbSMartin Schwidefsky 	__u32 vm_parm_len;
1105f1207fbSMartin Schwidefsky 	__u8  nss_name[8];
1115f1207fbSMartin Schwidefsky 	__u8  vm_parm[64];
1125f1207fbSMartin Schwidefsky 	__u8  reserved5[8];
1135f1207fbSMartin Schwidefsky } __packed;
1145f1207fbSMartin Schwidefsky 
11587fd22e0SSven Schnelle /* IPL Parameter Block 0 for ECKD */
11687fd22e0SSven Schnelle struct ipl_pb0_eckd {
11787fd22e0SSven Schnelle 	__u32 len;
11887fd22e0SSven Schnelle 	__u8  pbt;
11987fd22e0SSven Schnelle 	__u8  reserved1[3];
12087fd22e0SSven Schnelle 	__u32 reserved2[78];
12187fd22e0SSven Schnelle 	__u8  opt;
12287fd22e0SSven Schnelle 	__u8  reserved4[4];
12387fd22e0SSven Schnelle 	__u8  reserved5:5;
12487fd22e0SSven Schnelle 	__u8  ssid:3;
12587fd22e0SSven Schnelle 	__u16 devno;
12687fd22e0SSven Schnelle 	__u32 reserved6[5];
12787fd22e0SSven Schnelle 	__u32 bootprog;
12887fd22e0SSven Schnelle 	__u8  reserved7[12];
12987fd22e0SSven Schnelle 	struct {
13087fd22e0SSven Schnelle 		__u16 cyl;
13187fd22e0SSven Schnelle 		__u8 head;
13287fd22e0SSven Schnelle 		__u8 record;
13387fd22e0SSven Schnelle 		__u32 reserved;
13487fd22e0SSven Schnelle 	} br_chr __packed;
13587fd22e0SSven Schnelle 	__u32 scp_data_len;
13687fd22e0SSven Schnelle 	__u8  reserved8[260];
13787fd22e0SSven Schnelle 	__u8  scp_data[];
13887fd22e0SSven Schnelle } __packed;
13987fd22e0SSven Schnelle 
14087fd22e0SSven Schnelle #define IPL_PB0_ECKD_OPT_IPL	0x10
141*e2d2a296SSven Schnelle #define IPL_PB0_ECKD_OPT_DUMP	0x20
14287fd22e0SSven Schnelle 
1435f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_NSS		0x80
1445f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_VP		0x40
1455f1207fbSMartin Schwidefsky 
1465f1207fbSMartin Schwidefsky /* IPL Parameter Block 1 for additional SCP data */
1475f1207fbSMartin Schwidefsky struct ipl_pb1_scp_data {
1485f1207fbSMartin Schwidefsky 	__u32 len;
1495f1207fbSMartin Schwidefsky 	__u8  pbt;
1505f1207fbSMartin Schwidefsky 	__u8  scp_data[];
1515f1207fbSMartin Schwidefsky } __packed;
1525f1207fbSMartin Schwidefsky 
153d29af5b7SMartin Schwidefsky /* IPL Report List header */
154d29af5b7SMartin Schwidefsky struct ipl_rl_hdr {
155d29af5b7SMartin Schwidefsky 	__u32 len;
156d29af5b7SMartin Schwidefsky 	__u8  flags;
157d29af5b7SMartin Schwidefsky 	__u8  reserved1[2];
158d29af5b7SMartin Schwidefsky 	__u8  version;
159d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
160d29af5b7SMartin Schwidefsky } __packed;
161d29af5b7SMartin Schwidefsky 
162d29af5b7SMartin Schwidefsky /* IPL Report Block header */
163d29af5b7SMartin Schwidefsky struct ipl_rb_hdr {
164d29af5b7SMartin Schwidefsky 	__u32 len;
165d29af5b7SMartin Schwidefsky 	__u8  rbt;
166d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
167d29af5b7SMartin Schwidefsky } __packed;
168d29af5b7SMartin Schwidefsky 
169d29af5b7SMartin Schwidefsky /* IPL Report Block types */
170d29af5b7SMartin Schwidefsky enum ipl_rbt {
171d29af5b7SMartin Schwidefsky 	IPL_RBT_CERTIFICATES = 1,
172d29af5b7SMartin Schwidefsky 	IPL_RBT_COMPONENTS = 2,
173d29af5b7SMartin Schwidefsky };
174d29af5b7SMartin Schwidefsky 
175d29af5b7SMartin Schwidefsky /* IPL Report Block for the certificate list */
176d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry {
177d29af5b7SMartin Schwidefsky 	__u64 addr;
178d29af5b7SMartin Schwidefsky 	__u64 len;
179d29af5b7SMartin Schwidefsky } __packed;
180d29af5b7SMartin Schwidefsky 
181d29af5b7SMartin Schwidefsky struct ipl_rb_certificates {
182d29af5b7SMartin Schwidefsky 	__u32 len;
183d29af5b7SMartin Schwidefsky 	__u8  rbt;
184d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
185d29af5b7SMartin Schwidefsky 	struct ipl_rb_certificate_entry entries[];
186d29af5b7SMartin Schwidefsky } __packed;
187d29af5b7SMartin Schwidefsky 
188d29af5b7SMartin Schwidefsky /* IPL Report Block for the component list */
189d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry {
190d29af5b7SMartin Schwidefsky 	__u64 addr;
191d29af5b7SMartin Schwidefsky 	__u64 len;
192d29af5b7SMartin Schwidefsky 	__u8  flags;
193d29af5b7SMartin Schwidefsky 	__u8  reserved1[5];
194d29af5b7SMartin Schwidefsky 	__u16 certificate_index;
195d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
196d29af5b7SMartin Schwidefsky };
197d29af5b7SMartin Schwidefsky 
198d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_SIGNED	0x80
199d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_VERIFIED	0x40
200d29af5b7SMartin Schwidefsky 
201d29af5b7SMartin Schwidefsky struct ipl_rb_components {
202d29af5b7SMartin Schwidefsky 	__u32 len;
203d29af5b7SMartin Schwidefsky 	__u8  rbt;
204d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
205d29af5b7SMartin Schwidefsky 	struct ipl_rb_component_entry entries[];
206d29af5b7SMartin Schwidefsky } __packed;
207d29af5b7SMartin Schwidefsky 
2085f1207fbSMartin Schwidefsky #endif
209