162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
262306a36Sopenharmony_ci#ifndef _ASM_S390_UAPI_IPL_H
362306a36Sopenharmony_ci#define _ASM_S390_UAPI_IPL_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/types.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci/* IPL Parameter List header */
862306a36Sopenharmony_cistruct ipl_pl_hdr {
962306a36Sopenharmony_ci	__u32 len;
1062306a36Sopenharmony_ci	__u8  flags;
1162306a36Sopenharmony_ci	__u8  reserved1[2];
1262306a36Sopenharmony_ci	__u8  version;
1362306a36Sopenharmony_ci} __packed;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define IPL_PL_FLAG_IPLPS	0x80
1662306a36Sopenharmony_ci#define IPL_PL_FLAG_SIPL	0x40
1762306a36Sopenharmony_ci#define IPL_PL_FLAG_IPLSR	0x20
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* IPL Parameter Block header */
2062306a36Sopenharmony_cistruct ipl_pb_hdr {
2162306a36Sopenharmony_ci	__u32 len;
2262306a36Sopenharmony_ci	__u8  pbt;
2362306a36Sopenharmony_ci} __packed;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci/* IPL Parameter Block types */
2662306a36Sopenharmony_cienum ipl_pbt {
2762306a36Sopenharmony_ci	IPL_PBT_FCP = 0,
2862306a36Sopenharmony_ci	IPL_PBT_SCP_DATA = 1,
2962306a36Sopenharmony_ci	IPL_PBT_CCW = 2,
3062306a36Sopenharmony_ci	IPL_PBT_ECKD = 3,
3162306a36Sopenharmony_ci	IPL_PBT_NVME = 4,
3262306a36Sopenharmony_ci};
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/* IPL Parameter Block 0 with common fields */
3562306a36Sopenharmony_cistruct ipl_pb0_common {
3662306a36Sopenharmony_ci	__u32 len;
3762306a36Sopenharmony_ci	__u8  pbt;
3862306a36Sopenharmony_ci	__u8  flags;
3962306a36Sopenharmony_ci	__u8  reserved1[2];
4062306a36Sopenharmony_ci	__u8  loadparm[8];
4162306a36Sopenharmony_ci	__u8  reserved2[84];
4262306a36Sopenharmony_ci} __packed;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#define IPL_PB0_FLAG_LOADPARM	0x80
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci/* IPL Parameter Block 0 for FCP */
4762306a36Sopenharmony_cistruct ipl_pb0_fcp {
4862306a36Sopenharmony_ci	__u32 len;
4962306a36Sopenharmony_ci	__u8  pbt;
5062306a36Sopenharmony_ci	__u8  reserved1[3];
5162306a36Sopenharmony_ci	__u8  loadparm[8];
5262306a36Sopenharmony_ci	__u8  reserved2[304];
5362306a36Sopenharmony_ci	__u8  opt;
5462306a36Sopenharmony_ci	__u8  reserved3[3];
5562306a36Sopenharmony_ci	__u8  cssid;
5662306a36Sopenharmony_ci	__u8  reserved4[1];
5762306a36Sopenharmony_ci	__u16 devno;
5862306a36Sopenharmony_ci	__u8  reserved5[4];
5962306a36Sopenharmony_ci	__u64 wwpn;
6062306a36Sopenharmony_ci	__u64 lun;
6162306a36Sopenharmony_ci	__u32 bootprog;
6262306a36Sopenharmony_ci	__u8  reserved6[12];
6362306a36Sopenharmony_ci	__u64 br_lba;
6462306a36Sopenharmony_ci	__u32 scp_data_len;
6562306a36Sopenharmony_ci	__u8  reserved7[260];
6662306a36Sopenharmony_ci	__u8  scp_data[];
6762306a36Sopenharmony_ci} __packed;
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci#define IPL_PB0_FCP_OPT_IPL	0x10
7062306a36Sopenharmony_ci#define IPL_PB0_FCP_OPT_DUMP	0x20
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci/* IPL Parameter Block 0 for NVMe */
7362306a36Sopenharmony_cistruct ipl_pb0_nvme {
7462306a36Sopenharmony_ci	__u32 len;
7562306a36Sopenharmony_ci	__u8  pbt;
7662306a36Sopenharmony_ci	__u8  reserved1[3];
7762306a36Sopenharmony_ci	__u8  loadparm[8];
7862306a36Sopenharmony_ci	__u8  reserved2[304];
7962306a36Sopenharmony_ci	__u8  opt;
8062306a36Sopenharmony_ci	__u8  reserved3[3];
8162306a36Sopenharmony_ci	__u32 fid;
8262306a36Sopenharmony_ci	__u8 reserved4[12];
8362306a36Sopenharmony_ci	__u32 nsid;
8462306a36Sopenharmony_ci	__u8 reserved5[4];
8562306a36Sopenharmony_ci	__u32 bootprog;
8662306a36Sopenharmony_ci	__u8 reserved6[12];
8762306a36Sopenharmony_ci	__u64 br_lba;
8862306a36Sopenharmony_ci	__u32 scp_data_len;
8962306a36Sopenharmony_ci	__u8  reserved7[260];
9062306a36Sopenharmony_ci	__u8  scp_data[];
9162306a36Sopenharmony_ci} __packed;
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#define IPL_PB0_NVME_OPT_IPL	0x10
9462306a36Sopenharmony_ci#define IPL_PB0_NVME_OPT_DUMP	0x20
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci/* IPL Parameter Block 0 for CCW */
9762306a36Sopenharmony_cistruct ipl_pb0_ccw {
9862306a36Sopenharmony_ci	__u32 len;
9962306a36Sopenharmony_ci	__u8  pbt;
10062306a36Sopenharmony_ci	__u8  flags;
10162306a36Sopenharmony_ci	__u8  reserved1[2];
10262306a36Sopenharmony_ci	__u8  loadparm[8];
10362306a36Sopenharmony_ci	__u8  reserved2[84];
10462306a36Sopenharmony_ci	__u16 reserved3 : 13;
10562306a36Sopenharmony_ci	__u8  ssid : 3;
10662306a36Sopenharmony_ci	__u16 devno;
10762306a36Sopenharmony_ci	__u8  vm_flags;
10862306a36Sopenharmony_ci	__u8  reserved4[3];
10962306a36Sopenharmony_ci	__u32 vm_parm_len;
11062306a36Sopenharmony_ci	__u8  nss_name[8];
11162306a36Sopenharmony_ci	__u8  vm_parm[64];
11262306a36Sopenharmony_ci	__u8  reserved5[8];
11362306a36Sopenharmony_ci} __packed;
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci/* IPL Parameter Block 0 for ECKD */
11662306a36Sopenharmony_cistruct ipl_pb0_eckd {
11762306a36Sopenharmony_ci	__u32 len;
11862306a36Sopenharmony_ci	__u8  pbt;
11962306a36Sopenharmony_ci	__u8  reserved1[3];
12062306a36Sopenharmony_ci	__u32 reserved2[78];
12162306a36Sopenharmony_ci	__u8  opt;
12262306a36Sopenharmony_ci	__u8  reserved4[4];
12362306a36Sopenharmony_ci	__u8  reserved5:5;
12462306a36Sopenharmony_ci	__u8  ssid:3;
12562306a36Sopenharmony_ci	__u16 devno;
12662306a36Sopenharmony_ci	__u32 reserved6[5];
12762306a36Sopenharmony_ci	__u32 bootprog;
12862306a36Sopenharmony_ci	__u8  reserved7[12];
12962306a36Sopenharmony_ci	struct {
13062306a36Sopenharmony_ci		__u16 cyl;
13162306a36Sopenharmony_ci		__u8 head;
13262306a36Sopenharmony_ci		__u8 record;
13362306a36Sopenharmony_ci		__u32 reserved;
13462306a36Sopenharmony_ci	} br_chr __packed;
13562306a36Sopenharmony_ci	__u32 scp_data_len;
13662306a36Sopenharmony_ci	__u8  reserved8[260];
13762306a36Sopenharmony_ci	__u8  scp_data[];
13862306a36Sopenharmony_ci} __packed;
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci#define IPL_PB0_ECKD_OPT_IPL	0x10
14162306a36Sopenharmony_ci#define IPL_PB0_ECKD_OPT_DUMP	0x20
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci#define IPL_PB0_CCW_VM_FLAG_NSS		0x80
14462306a36Sopenharmony_ci#define IPL_PB0_CCW_VM_FLAG_VP		0x40
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci/* IPL Parameter Block 1 for additional SCP data */
14762306a36Sopenharmony_cistruct ipl_pb1_scp_data {
14862306a36Sopenharmony_ci	__u32 len;
14962306a36Sopenharmony_ci	__u8  pbt;
15062306a36Sopenharmony_ci	__u8  scp_data[];
15162306a36Sopenharmony_ci} __packed;
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci/* IPL Report List header */
15462306a36Sopenharmony_cistruct ipl_rl_hdr {
15562306a36Sopenharmony_ci	__u32 len;
15662306a36Sopenharmony_ci	__u8  flags;
15762306a36Sopenharmony_ci	__u8  reserved1[2];
15862306a36Sopenharmony_ci	__u8  version;
15962306a36Sopenharmony_ci	__u8  reserved2[8];
16062306a36Sopenharmony_ci} __packed;
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci/* IPL Report Block header */
16362306a36Sopenharmony_cistruct ipl_rb_hdr {
16462306a36Sopenharmony_ci	__u32 len;
16562306a36Sopenharmony_ci	__u8  rbt;
16662306a36Sopenharmony_ci	__u8  reserved1[11];
16762306a36Sopenharmony_ci} __packed;
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci/* IPL Report Block types */
17062306a36Sopenharmony_cienum ipl_rbt {
17162306a36Sopenharmony_ci	IPL_RBT_CERTIFICATES = 1,
17262306a36Sopenharmony_ci	IPL_RBT_COMPONENTS = 2,
17362306a36Sopenharmony_ci};
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci/* IPL Report Block for the certificate list */
17662306a36Sopenharmony_cistruct ipl_rb_certificate_entry {
17762306a36Sopenharmony_ci	__u64 addr;
17862306a36Sopenharmony_ci	__u64 len;
17962306a36Sopenharmony_ci} __packed;
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_cistruct ipl_rb_certificates {
18262306a36Sopenharmony_ci	__u32 len;
18362306a36Sopenharmony_ci	__u8  rbt;
18462306a36Sopenharmony_ci	__u8  reserved1[11];
18562306a36Sopenharmony_ci	struct ipl_rb_certificate_entry entries[];
18662306a36Sopenharmony_ci} __packed;
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci/* IPL Report Block for the component list */
18962306a36Sopenharmony_cistruct ipl_rb_component_entry {
19062306a36Sopenharmony_ci	__u64 addr;
19162306a36Sopenharmony_ci	__u64 len;
19262306a36Sopenharmony_ci	__u8  flags;
19362306a36Sopenharmony_ci	__u8  reserved1[5];
19462306a36Sopenharmony_ci	__u16 certificate_index;
19562306a36Sopenharmony_ci	__u8  reserved2[8];
19662306a36Sopenharmony_ci};
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci#define IPL_RB_COMPONENT_FLAG_SIGNED	0x80
19962306a36Sopenharmony_ci#define IPL_RB_COMPONENT_FLAG_VERIFIED	0x40
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_cistruct ipl_rb_components {
20262306a36Sopenharmony_ci	__u32 len;
20362306a36Sopenharmony_ci	__u8  rbt;
20462306a36Sopenharmony_ci	__u8  reserved1[11];
20562306a36Sopenharmony_ci	struct ipl_rb_component_entry entries[];
20662306a36Sopenharmony_ci} __packed;
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci#endif
209