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