xref: /openbmc/linux/arch/s390/include/uapi/asm/ipl.h (revision 3737e8ee)
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,
303737e8eeSJason J. Herne 	IPL_PBT_NVME = 4,
315f1207fbSMartin Schwidefsky };
325f1207fbSMartin Schwidefsky 
335f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 with common fields */
345f1207fbSMartin Schwidefsky struct ipl_pb0_common {
355f1207fbSMartin Schwidefsky 	__u32 len;
365f1207fbSMartin Schwidefsky 	__u8  pbt;
375f1207fbSMartin Schwidefsky 	__u8  flags;
385f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
395f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
405f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
415f1207fbSMartin Schwidefsky } __packed;
425f1207fbSMartin Schwidefsky 
435f1207fbSMartin Schwidefsky #define IPL_PB0_FLAG_LOADPARM	0x80
445f1207fbSMartin Schwidefsky 
455f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for FCP */
465f1207fbSMartin Schwidefsky struct ipl_pb0_fcp {
475f1207fbSMartin Schwidefsky 	__u32 len;
485f1207fbSMartin Schwidefsky 	__u8  pbt;
495f1207fbSMartin Schwidefsky 	__u8  reserved1[3];
505f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
515f1207fbSMartin Schwidefsky 	__u8  reserved2[304];
525f1207fbSMartin Schwidefsky 	__u8  opt;
535f1207fbSMartin Schwidefsky 	__u8  reserved3[3];
545f1207fbSMartin Schwidefsky 	__u8  cssid;
555f1207fbSMartin Schwidefsky 	__u8  reserved4[1];
565f1207fbSMartin Schwidefsky 	__u16 devno;
575f1207fbSMartin Schwidefsky 	__u8  reserved5[4];
585f1207fbSMartin Schwidefsky 	__u64 wwpn;
595f1207fbSMartin Schwidefsky 	__u64 lun;
605f1207fbSMartin Schwidefsky 	__u32 bootprog;
615f1207fbSMartin Schwidefsky 	__u8  reserved6[12];
625f1207fbSMartin Schwidefsky 	__u64 br_lba;
635f1207fbSMartin Schwidefsky 	__u32 scp_data_len;
645f1207fbSMartin Schwidefsky 	__u8  reserved7[260];
655f1207fbSMartin Schwidefsky 	__u8  scp_data[];
665f1207fbSMartin Schwidefsky } __packed;
675f1207fbSMartin Schwidefsky 
685f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_IPL	0x10
695f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_DUMP	0x20
705f1207fbSMartin Schwidefsky 
713737e8eeSJason J. Herne /* IPL Parameter Block 0 for NVMe */
723737e8eeSJason J. Herne struct ipl_pb0_nvme {
733737e8eeSJason J. Herne 	__u32 len;
743737e8eeSJason J. Herne 	__u8  pbt;
753737e8eeSJason J. Herne 	__u8  reserved1[3];
763737e8eeSJason J. Herne 	__u8  loadparm[8];
773737e8eeSJason J. Herne 	__u8  reserved2[304];
783737e8eeSJason J. Herne 	__u8  opt;
793737e8eeSJason J. Herne 	__u8  reserved3[3];
803737e8eeSJason J. Herne 	__u32 fid;
813737e8eeSJason J. Herne 	__u8 reserved4[12];
823737e8eeSJason J. Herne 	__u32 nsid;
833737e8eeSJason J. Herne 	__u8 reserved5[4];
843737e8eeSJason J. Herne 	__u32 bootprog;
853737e8eeSJason J. Herne 	__u8 reserved6[12];
863737e8eeSJason J. Herne 	__u64 br_lba;
873737e8eeSJason J. Herne 	__u32 scp_data_len;
883737e8eeSJason J. Herne 	__u8  reserved7[260];
893737e8eeSJason J. Herne 	__u8  scp_data[];
903737e8eeSJason J. Herne } __packed;
913737e8eeSJason J. Herne 
923737e8eeSJason J. Herne #define IPL_PB0_NVME_OPT_IPL	0x10
933737e8eeSJason J. Herne #define IPL_PB0_NVME_OPT_DUMP	0x20
943737e8eeSJason J. Herne 
955f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for CCW */
965f1207fbSMartin Schwidefsky struct ipl_pb0_ccw {
975f1207fbSMartin Schwidefsky 	__u32 len;
985f1207fbSMartin Schwidefsky 	__u8  pbt;
995f1207fbSMartin Schwidefsky 	__u8  flags;
1005f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
1015f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
1025f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
1035f1207fbSMartin Schwidefsky 	__u16 reserved3 : 13;
1045f1207fbSMartin Schwidefsky 	__u8  ssid : 3;
1055f1207fbSMartin Schwidefsky 	__u16 devno;
1065f1207fbSMartin Schwidefsky 	__u8  vm_flags;
1075f1207fbSMartin Schwidefsky 	__u8  reserved4[3];
1085f1207fbSMartin Schwidefsky 	__u32 vm_parm_len;
1095f1207fbSMartin Schwidefsky 	__u8  nss_name[8];
1105f1207fbSMartin Schwidefsky 	__u8  vm_parm[64];
1115f1207fbSMartin Schwidefsky 	__u8  reserved5[8];
1125f1207fbSMartin Schwidefsky } __packed;
1135f1207fbSMartin Schwidefsky 
1145f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_NSS		0x80
1155f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_VP		0x40
1165f1207fbSMartin Schwidefsky 
1175f1207fbSMartin Schwidefsky /* IPL Parameter Block 1 for additional SCP data */
1185f1207fbSMartin Schwidefsky struct ipl_pb1_scp_data {
1195f1207fbSMartin Schwidefsky 	__u32 len;
1205f1207fbSMartin Schwidefsky 	__u8  pbt;
1215f1207fbSMartin Schwidefsky 	__u8  scp_data[];
1225f1207fbSMartin Schwidefsky } __packed;
1235f1207fbSMartin Schwidefsky 
124d29af5b7SMartin Schwidefsky /* IPL Report List header */
125d29af5b7SMartin Schwidefsky struct ipl_rl_hdr {
126d29af5b7SMartin Schwidefsky 	__u32 len;
127d29af5b7SMartin Schwidefsky 	__u8  flags;
128d29af5b7SMartin Schwidefsky 	__u8  reserved1[2];
129d29af5b7SMartin Schwidefsky 	__u8  version;
130d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
131d29af5b7SMartin Schwidefsky } __packed;
132d29af5b7SMartin Schwidefsky 
133d29af5b7SMartin Schwidefsky /* IPL Report Block header */
134d29af5b7SMartin Schwidefsky struct ipl_rb_hdr {
135d29af5b7SMartin Schwidefsky 	__u32 len;
136d29af5b7SMartin Schwidefsky 	__u8  rbt;
137d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
138d29af5b7SMartin Schwidefsky } __packed;
139d29af5b7SMartin Schwidefsky 
140d29af5b7SMartin Schwidefsky /* IPL Report Block types */
141d29af5b7SMartin Schwidefsky enum ipl_rbt {
142d29af5b7SMartin Schwidefsky 	IPL_RBT_CERTIFICATES = 1,
143d29af5b7SMartin Schwidefsky 	IPL_RBT_COMPONENTS = 2,
144d29af5b7SMartin Schwidefsky };
145d29af5b7SMartin Schwidefsky 
146d29af5b7SMartin Schwidefsky /* IPL Report Block for the certificate list */
147d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry {
148d29af5b7SMartin Schwidefsky 	__u64 addr;
149d29af5b7SMartin Schwidefsky 	__u64 len;
150d29af5b7SMartin Schwidefsky } __packed;
151d29af5b7SMartin Schwidefsky 
152d29af5b7SMartin Schwidefsky struct ipl_rb_certificates {
153d29af5b7SMartin Schwidefsky 	__u32 len;
154d29af5b7SMartin Schwidefsky 	__u8  rbt;
155d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
156d29af5b7SMartin Schwidefsky 	struct ipl_rb_certificate_entry entries[];
157d29af5b7SMartin Schwidefsky } __packed;
158d29af5b7SMartin Schwidefsky 
159d29af5b7SMartin Schwidefsky /* IPL Report Block for the component list */
160d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry {
161d29af5b7SMartin Schwidefsky 	__u64 addr;
162d29af5b7SMartin Schwidefsky 	__u64 len;
163d29af5b7SMartin Schwidefsky 	__u8  flags;
164d29af5b7SMartin Schwidefsky 	__u8  reserved1[5];
165d29af5b7SMartin Schwidefsky 	__u16 certificate_index;
166d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
167d29af5b7SMartin Schwidefsky };
168d29af5b7SMartin Schwidefsky 
169d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_SIGNED	0x80
170d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_VERIFIED	0x40
171d29af5b7SMartin Schwidefsky 
172d29af5b7SMartin Schwidefsky struct ipl_rb_components {
173d29af5b7SMartin Schwidefsky 	__u32 len;
174d29af5b7SMartin Schwidefsky 	__u8  rbt;
175d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
176d29af5b7SMartin Schwidefsky 	struct ipl_rb_component_entry entries[];
177d29af5b7SMartin Schwidefsky } __packed;
178d29af5b7SMartin Schwidefsky 
1795f1207fbSMartin Schwidefsky #endif
180