1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
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