Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / arch / s390 / include / uapi / asm / ipl.h
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