1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun #ifndef _ASM_S390_UAPI_IPL_H 3*4882a593Smuzhiyun #define _ASM_S390_UAPI_IPL_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/types.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* IPL Parameter List header */ 8*4882a593Smuzhiyun struct ipl_pl_hdr { 9*4882a593Smuzhiyun __u32 len; 10*4882a593Smuzhiyun __u8 flags; 11*4882a593Smuzhiyun __u8 reserved1[2]; 12*4882a593Smuzhiyun __u8 version; 13*4882a593Smuzhiyun } __packed; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define IPL_PL_FLAG_IPLPS 0x80 16*4882a593Smuzhiyun #define IPL_PL_FLAG_SIPL 0x40 17*4882a593Smuzhiyun #define IPL_PL_FLAG_IPLSR 0x20 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* IPL Parameter Block header */ 20*4882a593Smuzhiyun struct ipl_pb_hdr { 21*4882a593Smuzhiyun __u32 len; 22*4882a593Smuzhiyun __u8 pbt; 23*4882a593Smuzhiyun } __packed; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* IPL Parameter Block types */ 26*4882a593Smuzhiyun enum ipl_pbt { 27*4882a593Smuzhiyun IPL_PBT_FCP = 0, 28*4882a593Smuzhiyun IPL_PBT_SCP_DATA = 1, 29*4882a593Smuzhiyun IPL_PBT_CCW = 2, 30*4882a593Smuzhiyun IPL_PBT_NVME = 4, 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* IPL Parameter Block 0 with common fields */ 34*4882a593Smuzhiyun struct ipl_pb0_common { 35*4882a593Smuzhiyun __u32 len; 36*4882a593Smuzhiyun __u8 pbt; 37*4882a593Smuzhiyun __u8 flags; 38*4882a593Smuzhiyun __u8 reserved1[2]; 39*4882a593Smuzhiyun __u8 loadparm[8]; 40*4882a593Smuzhiyun __u8 reserved2[84]; 41*4882a593Smuzhiyun } __packed; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define IPL_PB0_FLAG_LOADPARM 0x80 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* IPL Parameter Block 0 for FCP */ 46*4882a593Smuzhiyun struct ipl_pb0_fcp { 47*4882a593Smuzhiyun __u32 len; 48*4882a593Smuzhiyun __u8 pbt; 49*4882a593Smuzhiyun __u8 reserved1[3]; 50*4882a593Smuzhiyun __u8 loadparm[8]; 51*4882a593Smuzhiyun __u8 reserved2[304]; 52*4882a593Smuzhiyun __u8 opt; 53*4882a593Smuzhiyun __u8 reserved3[3]; 54*4882a593Smuzhiyun __u8 cssid; 55*4882a593Smuzhiyun __u8 reserved4[1]; 56*4882a593Smuzhiyun __u16 devno; 57*4882a593Smuzhiyun __u8 reserved5[4]; 58*4882a593Smuzhiyun __u64 wwpn; 59*4882a593Smuzhiyun __u64 lun; 60*4882a593Smuzhiyun __u32 bootprog; 61*4882a593Smuzhiyun __u8 reserved6[12]; 62*4882a593Smuzhiyun __u64 br_lba; 63*4882a593Smuzhiyun __u32 scp_data_len; 64*4882a593Smuzhiyun __u8 reserved7[260]; 65*4882a593Smuzhiyun __u8 scp_data[]; 66*4882a593Smuzhiyun } __packed; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #define IPL_PB0_FCP_OPT_IPL 0x10 69*4882a593Smuzhiyun #define IPL_PB0_FCP_OPT_DUMP 0x20 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* IPL Parameter Block 0 for NVMe */ 72*4882a593Smuzhiyun struct ipl_pb0_nvme { 73*4882a593Smuzhiyun __u32 len; 74*4882a593Smuzhiyun __u8 pbt; 75*4882a593Smuzhiyun __u8 reserved1[3]; 76*4882a593Smuzhiyun __u8 loadparm[8]; 77*4882a593Smuzhiyun __u8 reserved2[304]; 78*4882a593Smuzhiyun __u8 opt; 79*4882a593Smuzhiyun __u8 reserved3[3]; 80*4882a593Smuzhiyun __u32 fid; 81*4882a593Smuzhiyun __u8 reserved4[12]; 82*4882a593Smuzhiyun __u32 nsid; 83*4882a593Smuzhiyun __u8 reserved5[4]; 84*4882a593Smuzhiyun __u32 bootprog; 85*4882a593Smuzhiyun __u8 reserved6[12]; 86*4882a593Smuzhiyun __u64 br_lba; 87*4882a593Smuzhiyun __u32 scp_data_len; 88*4882a593Smuzhiyun __u8 reserved7[260]; 89*4882a593Smuzhiyun __u8 scp_data[]; 90*4882a593Smuzhiyun } __packed; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define IPL_PB0_NVME_OPT_IPL 0x10 93*4882a593Smuzhiyun #define IPL_PB0_NVME_OPT_DUMP 0x20 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* IPL Parameter Block 0 for CCW */ 96*4882a593Smuzhiyun struct ipl_pb0_ccw { 97*4882a593Smuzhiyun __u32 len; 98*4882a593Smuzhiyun __u8 pbt; 99*4882a593Smuzhiyun __u8 flags; 100*4882a593Smuzhiyun __u8 reserved1[2]; 101*4882a593Smuzhiyun __u8 loadparm[8]; 102*4882a593Smuzhiyun __u8 reserved2[84]; 103*4882a593Smuzhiyun __u16 reserved3 : 13; 104*4882a593Smuzhiyun __u8 ssid : 3; 105*4882a593Smuzhiyun __u16 devno; 106*4882a593Smuzhiyun __u8 vm_flags; 107*4882a593Smuzhiyun __u8 reserved4[3]; 108*4882a593Smuzhiyun __u32 vm_parm_len; 109*4882a593Smuzhiyun __u8 nss_name[8]; 110*4882a593Smuzhiyun __u8 vm_parm[64]; 111*4882a593Smuzhiyun __u8 reserved5[8]; 112*4882a593Smuzhiyun } __packed; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #define IPL_PB0_CCW_VM_FLAG_NSS 0x80 115*4882a593Smuzhiyun #define IPL_PB0_CCW_VM_FLAG_VP 0x40 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* IPL Parameter Block 1 for additional SCP data */ 118*4882a593Smuzhiyun struct ipl_pb1_scp_data { 119*4882a593Smuzhiyun __u32 len; 120*4882a593Smuzhiyun __u8 pbt; 121*4882a593Smuzhiyun __u8 scp_data[]; 122*4882a593Smuzhiyun } __packed; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* IPL Report List header */ 125*4882a593Smuzhiyun struct ipl_rl_hdr { 126*4882a593Smuzhiyun __u32 len; 127*4882a593Smuzhiyun __u8 flags; 128*4882a593Smuzhiyun __u8 reserved1[2]; 129*4882a593Smuzhiyun __u8 version; 130*4882a593Smuzhiyun __u8 reserved2[8]; 131*4882a593Smuzhiyun } __packed; 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /* IPL Report Block header */ 134*4882a593Smuzhiyun struct ipl_rb_hdr { 135*4882a593Smuzhiyun __u32 len; 136*4882a593Smuzhiyun __u8 rbt; 137*4882a593Smuzhiyun __u8 reserved1[11]; 138*4882a593Smuzhiyun } __packed; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun /* IPL Report Block types */ 141*4882a593Smuzhiyun enum ipl_rbt { 142*4882a593Smuzhiyun IPL_RBT_CERTIFICATES = 1, 143*4882a593Smuzhiyun IPL_RBT_COMPONENTS = 2, 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* IPL Report Block for the certificate list */ 147*4882a593Smuzhiyun struct ipl_rb_certificate_entry { 148*4882a593Smuzhiyun __u64 addr; 149*4882a593Smuzhiyun __u64 len; 150*4882a593Smuzhiyun } __packed; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun struct ipl_rb_certificates { 153*4882a593Smuzhiyun __u32 len; 154*4882a593Smuzhiyun __u8 rbt; 155*4882a593Smuzhiyun __u8 reserved1[11]; 156*4882a593Smuzhiyun struct ipl_rb_certificate_entry entries[]; 157*4882a593Smuzhiyun } __packed; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* IPL Report Block for the component list */ 160*4882a593Smuzhiyun struct ipl_rb_component_entry { 161*4882a593Smuzhiyun __u64 addr; 162*4882a593Smuzhiyun __u64 len; 163*4882a593Smuzhiyun __u8 flags; 164*4882a593Smuzhiyun __u8 reserved1[5]; 165*4882a593Smuzhiyun __u16 certificate_index; 166*4882a593Smuzhiyun __u8 reserved2[8]; 167*4882a593Smuzhiyun }; 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun #define IPL_RB_COMPONENT_FLAG_SIGNED 0x80 170*4882a593Smuzhiyun #define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun struct ipl_rb_components { 173*4882a593Smuzhiyun __u32 len; 174*4882a593Smuzhiyun __u8 rbt; 175*4882a593Smuzhiyun __u8 reserved1[11]; 176*4882a593Smuzhiyun struct ipl_rb_component_entry entries[]; 177*4882a593Smuzhiyun } __packed; 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun #endif 180