xref: /OK3568_Linux_fs/kernel/arch/s390/include/uapi/asm/ipl.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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