15f1207fbSMartin Schwidefsky /* SPDX-License-Identifier: GPL-2.0 */ 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; 10*d29af5b7SMartin Schwidefsky __u8 flags; 11*d29af5b7SMartin Schwidefsky __u8 reserved1[2]; 125f1207fbSMartin Schwidefsky __u8 version; 135f1207fbSMartin Schwidefsky } __packed; 145f1207fbSMartin Schwidefsky 15*d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLPS 0x80 16*d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_SIPL 0x40 17*d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLSR 0x20 18*d29af5b7SMartin 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, 305f1207fbSMartin Schwidefsky }; 315f1207fbSMartin Schwidefsky 325f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 with common fields */ 335f1207fbSMartin Schwidefsky struct ipl_pb0_common { 345f1207fbSMartin Schwidefsky __u32 len; 355f1207fbSMartin Schwidefsky __u8 pbt; 365f1207fbSMartin Schwidefsky __u8 flags; 375f1207fbSMartin Schwidefsky __u8 reserved1[2]; 385f1207fbSMartin Schwidefsky __u8 loadparm[8]; 395f1207fbSMartin Schwidefsky __u8 reserved2[84]; 405f1207fbSMartin Schwidefsky } __packed; 415f1207fbSMartin Schwidefsky 425f1207fbSMartin Schwidefsky #define IPL_PB0_FLAG_LOADPARM 0x80 435f1207fbSMartin Schwidefsky 445f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for FCP */ 455f1207fbSMartin Schwidefsky struct ipl_pb0_fcp { 465f1207fbSMartin Schwidefsky __u32 len; 475f1207fbSMartin Schwidefsky __u8 pbt; 485f1207fbSMartin Schwidefsky __u8 reserved1[3]; 495f1207fbSMartin Schwidefsky __u8 loadparm[8]; 505f1207fbSMartin Schwidefsky __u8 reserved2[304]; 515f1207fbSMartin Schwidefsky __u8 opt; 525f1207fbSMartin Schwidefsky __u8 reserved3[3]; 535f1207fbSMartin Schwidefsky __u8 cssid; 545f1207fbSMartin Schwidefsky __u8 reserved4[1]; 555f1207fbSMartin Schwidefsky __u16 devno; 565f1207fbSMartin Schwidefsky __u8 reserved5[4]; 575f1207fbSMartin Schwidefsky __u64 wwpn; 585f1207fbSMartin Schwidefsky __u64 lun; 595f1207fbSMartin Schwidefsky __u32 bootprog; 605f1207fbSMartin Schwidefsky __u8 reserved6[12]; 615f1207fbSMartin Schwidefsky __u64 br_lba; 625f1207fbSMartin Schwidefsky __u32 scp_data_len; 635f1207fbSMartin Schwidefsky __u8 reserved7[260]; 645f1207fbSMartin Schwidefsky __u8 scp_data[]; 655f1207fbSMartin Schwidefsky } __packed; 665f1207fbSMartin Schwidefsky 675f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_IPL 0x10 685f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_DUMP 0x20 695f1207fbSMartin Schwidefsky 705f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for CCW */ 715f1207fbSMartin Schwidefsky struct ipl_pb0_ccw { 725f1207fbSMartin Schwidefsky __u32 len; 735f1207fbSMartin Schwidefsky __u8 pbt; 745f1207fbSMartin Schwidefsky __u8 flags; 755f1207fbSMartin Schwidefsky __u8 reserved1[2]; 765f1207fbSMartin Schwidefsky __u8 loadparm[8]; 775f1207fbSMartin Schwidefsky __u8 reserved2[84]; 785f1207fbSMartin Schwidefsky __u16 reserved3 : 13; 795f1207fbSMartin Schwidefsky __u8 ssid : 3; 805f1207fbSMartin Schwidefsky __u16 devno; 815f1207fbSMartin Schwidefsky __u8 vm_flags; 825f1207fbSMartin Schwidefsky __u8 reserved4[3]; 835f1207fbSMartin Schwidefsky __u32 vm_parm_len; 845f1207fbSMartin Schwidefsky __u8 nss_name[8]; 855f1207fbSMartin Schwidefsky __u8 vm_parm[64]; 865f1207fbSMartin Schwidefsky __u8 reserved5[8]; 875f1207fbSMartin Schwidefsky } __packed; 885f1207fbSMartin Schwidefsky 895f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_NSS 0x80 905f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_VP 0x40 915f1207fbSMartin Schwidefsky 925f1207fbSMartin Schwidefsky /* IPL Parameter Block 1 for additional SCP data */ 935f1207fbSMartin Schwidefsky struct ipl_pb1_scp_data { 945f1207fbSMartin Schwidefsky __u32 len; 955f1207fbSMartin Schwidefsky __u8 pbt; 965f1207fbSMartin Schwidefsky __u8 scp_data[]; 975f1207fbSMartin Schwidefsky } __packed; 985f1207fbSMartin Schwidefsky 99*d29af5b7SMartin Schwidefsky /* IPL Report List header */ 100*d29af5b7SMartin Schwidefsky struct ipl_rl_hdr { 101*d29af5b7SMartin Schwidefsky __u32 len; 102*d29af5b7SMartin Schwidefsky __u8 flags; 103*d29af5b7SMartin Schwidefsky __u8 reserved1[2]; 104*d29af5b7SMartin Schwidefsky __u8 version; 105*d29af5b7SMartin Schwidefsky __u8 reserved2[8]; 106*d29af5b7SMartin Schwidefsky } __packed; 107*d29af5b7SMartin Schwidefsky 108*d29af5b7SMartin Schwidefsky /* IPL Report Block header */ 109*d29af5b7SMartin Schwidefsky struct ipl_rb_hdr { 110*d29af5b7SMartin Schwidefsky __u32 len; 111*d29af5b7SMartin Schwidefsky __u8 rbt; 112*d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 113*d29af5b7SMartin Schwidefsky } __packed; 114*d29af5b7SMartin Schwidefsky 115*d29af5b7SMartin Schwidefsky /* IPL Report Block types */ 116*d29af5b7SMartin Schwidefsky enum ipl_rbt { 117*d29af5b7SMartin Schwidefsky IPL_RBT_CERTIFICATES = 1, 118*d29af5b7SMartin Schwidefsky IPL_RBT_COMPONENTS = 2, 119*d29af5b7SMartin Schwidefsky }; 120*d29af5b7SMartin Schwidefsky 121*d29af5b7SMartin Schwidefsky /* IPL Report Block for the certificate list */ 122*d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry { 123*d29af5b7SMartin Schwidefsky __u64 addr; 124*d29af5b7SMartin Schwidefsky __u64 len; 125*d29af5b7SMartin Schwidefsky } __packed; 126*d29af5b7SMartin Schwidefsky 127*d29af5b7SMartin Schwidefsky struct ipl_rb_certificates { 128*d29af5b7SMartin Schwidefsky __u32 len; 129*d29af5b7SMartin Schwidefsky __u8 rbt; 130*d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 131*d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry entries[]; 132*d29af5b7SMartin Schwidefsky } __packed; 133*d29af5b7SMartin Schwidefsky 134*d29af5b7SMartin Schwidefsky /* IPL Report Block for the component list */ 135*d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry { 136*d29af5b7SMartin Schwidefsky __u64 addr; 137*d29af5b7SMartin Schwidefsky __u64 len; 138*d29af5b7SMartin Schwidefsky __u8 flags; 139*d29af5b7SMartin Schwidefsky __u8 reserved1[5]; 140*d29af5b7SMartin Schwidefsky __u16 certificate_index; 141*d29af5b7SMartin Schwidefsky __u8 reserved2[8]; 142*d29af5b7SMartin Schwidefsky }; 143*d29af5b7SMartin Schwidefsky 144*d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_SIGNED 0x80 145*d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40 146*d29af5b7SMartin Schwidefsky 147*d29af5b7SMartin Schwidefsky struct ipl_rb_components { 148*d29af5b7SMartin Schwidefsky __u32 len; 149*d29af5b7SMartin Schwidefsky __u8 rbt; 150*d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 151*d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry entries[]; 152*d29af5b7SMartin Schwidefsky } __packed; 153*d29af5b7SMartin Schwidefsky 1545f1207fbSMartin Schwidefsky #endif 155