xref: /openbmc/linux/arch/s390/include/uapi/asm/ipl.h (revision d9c52522)
1d9c52522SMasahiro Yamada /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
25f1207fbSMartin Schwidefsky #ifndef _ASM_S390_UAPI_IPL_H
35f1207fbSMartin Schwidefsky #define _ASM_S390_UAPI_IPL_H
45f1207fbSMartin Schwidefsky 
55f1207fbSMartin Schwidefsky #include <linux/types.h>
65f1207fbSMartin Schwidefsky 
75f1207fbSMartin Schwidefsky /* IPL Parameter List header */
85f1207fbSMartin Schwidefsky struct ipl_pl_hdr {
95f1207fbSMartin Schwidefsky 	__u32 len;
10d29af5b7SMartin Schwidefsky 	__u8  flags;
11d29af5b7SMartin Schwidefsky 	__u8  reserved1[2];
125f1207fbSMartin Schwidefsky 	__u8  version;
135f1207fbSMartin Schwidefsky } __packed;
145f1207fbSMartin Schwidefsky 
15d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLPS	0x80
16d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_SIPL	0x40
17d29af5b7SMartin Schwidefsky #define IPL_PL_FLAG_IPLSR	0x20
18d29af5b7SMartin Schwidefsky 
195f1207fbSMartin Schwidefsky /* IPL Parameter Block header */
205f1207fbSMartin Schwidefsky struct ipl_pb_hdr {
215f1207fbSMartin Schwidefsky 	__u32 len;
225f1207fbSMartin Schwidefsky 	__u8  pbt;
235f1207fbSMartin Schwidefsky } __packed;
245f1207fbSMartin Schwidefsky 
255f1207fbSMartin Schwidefsky /* IPL Parameter Block types */
265f1207fbSMartin Schwidefsky enum ipl_pbt {
275f1207fbSMartin Schwidefsky 	IPL_PBT_FCP = 0,
285f1207fbSMartin Schwidefsky 	IPL_PBT_SCP_DATA = 1,
295f1207fbSMartin Schwidefsky 	IPL_PBT_CCW = 2,
305f1207fbSMartin Schwidefsky };
315f1207fbSMartin Schwidefsky 
325f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 with common fields */
335f1207fbSMartin Schwidefsky struct ipl_pb0_common {
345f1207fbSMartin Schwidefsky 	__u32 len;
355f1207fbSMartin Schwidefsky 	__u8  pbt;
365f1207fbSMartin Schwidefsky 	__u8  flags;
375f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
385f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
395f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
405f1207fbSMartin Schwidefsky } __packed;
415f1207fbSMartin Schwidefsky 
425f1207fbSMartin Schwidefsky #define IPL_PB0_FLAG_LOADPARM	0x80
435f1207fbSMartin Schwidefsky 
445f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for FCP */
455f1207fbSMartin Schwidefsky struct ipl_pb0_fcp {
465f1207fbSMartin Schwidefsky 	__u32 len;
475f1207fbSMartin Schwidefsky 	__u8  pbt;
485f1207fbSMartin Schwidefsky 	__u8  reserved1[3];
495f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
505f1207fbSMartin Schwidefsky 	__u8  reserved2[304];
515f1207fbSMartin Schwidefsky 	__u8  opt;
525f1207fbSMartin Schwidefsky 	__u8  reserved3[3];
535f1207fbSMartin Schwidefsky 	__u8  cssid;
545f1207fbSMartin Schwidefsky 	__u8  reserved4[1];
555f1207fbSMartin Schwidefsky 	__u16 devno;
565f1207fbSMartin Schwidefsky 	__u8  reserved5[4];
575f1207fbSMartin Schwidefsky 	__u64 wwpn;
585f1207fbSMartin Schwidefsky 	__u64 lun;
595f1207fbSMartin Schwidefsky 	__u32 bootprog;
605f1207fbSMartin Schwidefsky 	__u8  reserved6[12];
615f1207fbSMartin Schwidefsky 	__u64 br_lba;
625f1207fbSMartin Schwidefsky 	__u32 scp_data_len;
635f1207fbSMartin Schwidefsky 	__u8  reserved7[260];
645f1207fbSMartin Schwidefsky 	__u8  scp_data[];
655f1207fbSMartin Schwidefsky } __packed;
665f1207fbSMartin Schwidefsky 
675f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_IPL	0x10
685f1207fbSMartin Schwidefsky #define IPL_PB0_FCP_OPT_DUMP	0x20
695f1207fbSMartin Schwidefsky 
705f1207fbSMartin Schwidefsky /* IPL Parameter Block 0 for CCW */
715f1207fbSMartin Schwidefsky struct ipl_pb0_ccw {
725f1207fbSMartin Schwidefsky 	__u32 len;
735f1207fbSMartin Schwidefsky 	__u8  pbt;
745f1207fbSMartin Schwidefsky 	__u8  flags;
755f1207fbSMartin Schwidefsky 	__u8  reserved1[2];
765f1207fbSMartin Schwidefsky 	__u8  loadparm[8];
775f1207fbSMartin Schwidefsky 	__u8  reserved2[84];
785f1207fbSMartin Schwidefsky 	__u16 reserved3 : 13;
795f1207fbSMartin Schwidefsky 	__u8  ssid : 3;
805f1207fbSMartin Schwidefsky 	__u16 devno;
815f1207fbSMartin Schwidefsky 	__u8  vm_flags;
825f1207fbSMartin Schwidefsky 	__u8  reserved4[3];
835f1207fbSMartin Schwidefsky 	__u32 vm_parm_len;
845f1207fbSMartin Schwidefsky 	__u8  nss_name[8];
855f1207fbSMartin Schwidefsky 	__u8  vm_parm[64];
865f1207fbSMartin Schwidefsky 	__u8  reserved5[8];
875f1207fbSMartin Schwidefsky } __packed;
885f1207fbSMartin Schwidefsky 
895f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_NSS		0x80
905f1207fbSMartin Schwidefsky #define IPL_PB0_CCW_VM_FLAG_VP		0x40
915f1207fbSMartin Schwidefsky 
925f1207fbSMartin Schwidefsky /* IPL Parameter Block 1 for additional SCP data */
935f1207fbSMartin Schwidefsky struct ipl_pb1_scp_data {
945f1207fbSMartin Schwidefsky 	__u32 len;
955f1207fbSMartin Schwidefsky 	__u8  pbt;
965f1207fbSMartin Schwidefsky 	__u8  scp_data[];
975f1207fbSMartin Schwidefsky } __packed;
985f1207fbSMartin Schwidefsky 
99d29af5b7SMartin Schwidefsky /* IPL Report List header */
100d29af5b7SMartin Schwidefsky struct ipl_rl_hdr {
101d29af5b7SMartin Schwidefsky 	__u32 len;
102d29af5b7SMartin Schwidefsky 	__u8  flags;
103d29af5b7SMartin Schwidefsky 	__u8  reserved1[2];
104d29af5b7SMartin Schwidefsky 	__u8  version;
105d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
106d29af5b7SMartin Schwidefsky } __packed;
107d29af5b7SMartin Schwidefsky 
108d29af5b7SMartin Schwidefsky /* IPL Report Block header */
109d29af5b7SMartin Schwidefsky struct ipl_rb_hdr {
110d29af5b7SMartin Schwidefsky 	__u32 len;
111d29af5b7SMartin Schwidefsky 	__u8  rbt;
112d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
113d29af5b7SMartin Schwidefsky } __packed;
114d29af5b7SMartin Schwidefsky 
115d29af5b7SMartin Schwidefsky /* IPL Report Block types */
116d29af5b7SMartin Schwidefsky enum ipl_rbt {
117d29af5b7SMartin Schwidefsky 	IPL_RBT_CERTIFICATES = 1,
118d29af5b7SMartin Schwidefsky 	IPL_RBT_COMPONENTS = 2,
119d29af5b7SMartin Schwidefsky };
120d29af5b7SMartin Schwidefsky 
121d29af5b7SMartin Schwidefsky /* IPL Report Block for the certificate list */
122d29af5b7SMartin Schwidefsky struct ipl_rb_certificate_entry {
123d29af5b7SMartin Schwidefsky 	__u64 addr;
124d29af5b7SMartin Schwidefsky 	__u64 len;
125d29af5b7SMartin Schwidefsky } __packed;
126d29af5b7SMartin Schwidefsky 
127d29af5b7SMartin Schwidefsky struct ipl_rb_certificates {
128d29af5b7SMartin Schwidefsky 	__u32 len;
129d29af5b7SMartin Schwidefsky 	__u8  rbt;
130d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
131d29af5b7SMartin Schwidefsky 	struct ipl_rb_certificate_entry entries[];
132d29af5b7SMartin Schwidefsky } __packed;
133d29af5b7SMartin Schwidefsky 
134d29af5b7SMartin Schwidefsky /* IPL Report Block for the component list */
135d29af5b7SMartin Schwidefsky struct ipl_rb_component_entry {
136d29af5b7SMartin Schwidefsky 	__u64 addr;
137d29af5b7SMartin Schwidefsky 	__u64 len;
138d29af5b7SMartin Schwidefsky 	__u8  flags;
139d29af5b7SMartin Schwidefsky 	__u8  reserved1[5];
140d29af5b7SMartin Schwidefsky 	__u16 certificate_index;
141d29af5b7SMartin Schwidefsky 	__u8  reserved2[8];
142d29af5b7SMartin Schwidefsky };
143d29af5b7SMartin Schwidefsky 
144d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_SIGNED	0x80
145d29af5b7SMartin Schwidefsky #define IPL_RB_COMPONENT_FLAG_VERIFIED	0x40
146d29af5b7SMartin Schwidefsky 
147d29af5b7SMartin Schwidefsky struct ipl_rb_components {
148d29af5b7SMartin Schwidefsky 	__u32 len;
149d29af5b7SMartin Schwidefsky 	__u8  rbt;
150d29af5b7SMartin Schwidefsky 	__u8  reserved1[11];
151d29af5b7SMartin Schwidefsky 	struct ipl_rb_component_entry entries[];
152d29af5b7SMartin Schwidefsky } __packed;
153d29af5b7SMartin Schwidefsky 
1545f1207fbSMartin Schwidefsky #endif
155