34
#define QEMU_DEFAULT_IPL S390_IPL_TYPE_CCW
35
36
#define MAX_CERTIFICATES 64
37
+/* largest supported block size - same as VIRTIO_DASD_DEFAULT_BLOCK_SIZE */
38
+#define VIRTIO_MAX_BLOCK_SIZE 4096
39
+#define MAX_COMP_ENTRIES ((VIRTIO_MAX_BLOCK_SIZE - 32) / 32)
40
41
/*
42
* The QEMU IPL Parameters will be stored at absolute address
151
} QEMU_PACKED;
152
typedef union IplParameterBlock IplParameterBlock;
153
154
+struct IplInfoReportBlockHeader {
155
+ uint32_t len;
156
+ uint8_t flags;
157
+ uint8_t reserved1[11];
158
+};
159
+typedef struct IplInfoReportBlockHeader IplInfoReportBlockHeader;
160
+
161
+struct IplInfoBlockHeader {
162
+ uint32_t len;
163
+ uint8_t type;
164
+ uint8_t reserved1[11];
165
+};
166
+typedef struct IplInfoBlockHeader IplInfoBlockHeader;
167
+
168
+enum IplInfoBlockType {
169
+ IPL_INFO_BLOCK_TYPE_CERTIFICATES = 1,
170
+ IPL_INFO_BLOCK_TYPE_COMPONENTS = 2,
171
+};
172
+
173
+struct IplSignatureCertificateEntry {
174
+ uint64_t addr;
175
+ uint64_t len;
176
+};
177
+typedef struct IplSignatureCertificateEntry IplSignatureCertificateEntry;
178
+
179
+struct IplSignatureCertificateList {
180
+ IplInfoBlockHeader ipl_info_header;
181
+ IplSignatureCertificateEntry cert_entries[MAX_CERTIFICATES];
182
+};
183
+typedef struct IplSignatureCertificateList IplSignatureCertificateList;
184
+
185
+#define S390_IPL_DEV_COMP_FLAG_SC 0x80
186
+#define S390_IPL_DEV_COMP_FLAG_CSV 0x40
187
+
188
+struct IplDeviceComponentEntry {
189
+ uint64_t addr;
190
+ uint64_t len;
191
+ uint8_t flags;
192
+ uint8_t reserved1[5];
193
+ uint16_t cert_index;
194
+ uint8_t reserved2[8];
195
+};
196
+typedef struct IplDeviceComponentEntry IplDeviceComponentEntry;
197
+
198
+struct IplDeviceComponentList {
199
+ IplInfoBlockHeader ipl_info_header;
200
+ IplDeviceComponentEntry device_entries[MAX_COMP_ENTRIES];
201
+};
202
+typedef struct IplDeviceComponentList IplDeviceComponentList;
203
+
204
+#define COMP_LIST_MAX sizeof(IplDeviceComponentList)
205
+#define CERT_LIST_MAX sizeof(IplSignatureCertificateList)
206
+
207
+struct IplInfoReportBlock {
208
+ IplInfoReportBlockHeader hdr;
209
+ uint8_t info_blks[COMP_LIST_MAX + CERT_LIST_MAX];
210
+};
211
+typedef struct IplInfoReportBlock IplInfoReportBlock;
212
+
213
#endif