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, 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 99d29af5b7SMartin Schwidefsky /* IPL Report List header */ 100d29af5b7SMartin Schwidefsky struct ipl_rl_hdr { 101d29af5b7SMartin Schwidefsky __u32 len; 102d29af5b7SMartin Schwidefsky __u8 flags; 103d29af5b7SMartin Schwidefsky __u8 reserved1[2]; 104d29af5b7SMartin Schwidefsky __u8 version; 105d29af5b7SMartin Schwidefsky __u8 reserved2[8]; 106d29af5b7SMartin Schwidefsky } __packed; 107d29af5b7SMartin Schwidefsky 108d29af5b7SMartin Schwidefsky /* IPL Report Block header */ 109d29af5b7SMartin Schwidefsky struct ipl_rb_hdr { 110d29af5b7SMartin Schwidefsky __u32 len; 111d29af5b7SMartin Schwidefsky __u8 rbt; 112d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 113d29af5b7SMartin Schwidefsky } __packed; 114d29af5b7SMartin Schwidefsky 115d29af5b7SMartin Schwidefsky /* IPL Report Block types */ 116d29af5b7SMartin Schwidefsky enum ipl_rbt { 117d29af5b7SMartin Schwidefsky IPL_RBT_CERTIFICATES = 1, 118d29af5b7SMartin Schwidefsky IPL_RBT_COMPONENTS = 2, 119d29af5b7SMartin Schwidefsky }; 120d29af5b7SMartin Schwidefsky 121d29af5b7SMartin Schwidefsky /* IPL Report Block for the certificate list */ 122d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry { 123d29af5b7SMartin Schwidefsky __u64 addr; 124d29af5b7SMartin Schwidefsky __u64 len; 125d29af5b7SMartin Schwidefsky } __packed; 126d29af5b7SMartin Schwidefsky 127d29af5b7SMartin Schwidefsky struct ipl_rb_certificates { 128d29af5b7SMartin Schwidefsky __u32 len; 129d29af5b7SMartin Schwidefsky __u8 rbt; 130d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 131d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry entries[]; 132d29af5b7SMartin Schwidefsky } __packed; 133d29af5b7SMartin Schwidefsky 134d29af5b7SMartin Schwidefsky /* IPL Report Block for the component list */ 135d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry { 136d29af5b7SMartin Schwidefsky __u64 addr; 137d29af5b7SMartin Schwidefsky __u64 len; 138d29af5b7SMartin Schwidefsky __u8 flags; 139d29af5b7SMartin Schwidefsky __u8 reserved1[5]; 140d29af5b7SMartin Schwidefsky __u16 certificate_index; 141d29af5b7SMartin Schwidefsky __u8 reserved2[8]; 142d29af5b7SMartin Schwidefsky }; 143d29af5b7SMartin Schwidefsky 144d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_SIGNED 0x80 145d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40 146d29af5b7SMartin Schwidefsky 147d29af5b7SMartin Schwidefsky struct ipl_rb_components { 148d29af5b7SMartin Schwidefsky __u32 len; 149d29af5b7SMartin Schwidefsky __u8 rbt; 150d29af5b7SMartin Schwidefsky __u8 reserved1[11]; 151d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry entries[]; 152d29af5b7SMartin Schwidefsky } __packed; 153d29af5b7SMartin Schwidefsky 1545f1207fbSMartin Schwidefsky #endif 155