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