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