Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.2:Staging:N
s390-tools
s390-tools-sles15sp2-21-zipl-move-IPL-related-d...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File s390-tools-sles15sp2-21-zipl-move-IPL-related-definitions-into-separate-head.patch of Package s390-tools
Subject: [PATCH] [FEAT VS1804] zipl: move IPL related definitions into separate header From: Marc Hartmayer <mhartmay@linux.ibm.com> Summary: genprotimg: Introduce new tool for the creation of PV images Description: genprotimg takes a kernel, host-key documents, optionally an initrd, optionally a file with the kernel command line, and it generates a single, loadable image file. The image consists of a concatenation of a plain text boot loader, the encrypted components for kernel, initrd, and cmdline, and the integrity-protected PV header, containing metadata necessary for running the guest in PV mode. It's possible to use this image file as a kernel for zIPL or for a direct kernel boot using QEMU. Upstream-ID: 9d39a4bd47008b15bbf4ebe672b91d6d63888536 Problem-ID: VS1804 Upstream-Description: zipl: move IPL related definitions into separate header Move the IPL related definitions into `include/boot/ipl.h`. This allows the reuse of the definitions, e.g. in the boot loader for protected guests. Reviewed-by: Stefan Haberland <sth@linux.ibm.com> Reviewed-by: Philipp Rudo <prudo@linux.ibm.com> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> --- include/boot/ipl.h | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++ zipl/boot/stage3.h | 140 ---------------------------------------------- 2 files changed, 160 insertions(+), 139 deletions(-) --- /dev/null +++ b/include/boot/ipl.h @@ -0,0 +1,159 @@ +/* + * IPL related definitions + * + * Copyright IBM Corp. 2020 + * + * s390-tools is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#ifndef IPL_H +#define IPL_H + +#include "lib/zt_common.h" + +#define IPL_FLAG_SECURE 0x40 + +#define IPL_RB_COMPONENT_FLAG_SIGNED 0x80 +#define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40 + + +#ifndef __ASSEMBLER__ + +#include <stdint.h> + +/* IPL Parameter List header */ +struct ipl_pl_hdr { + uint32_t len; + uint8_t flags; + uint8_t reserved1[2]; + uint8_t version; +} __packed; + +/* IPL Parameter Block header */ +struct ipl_pb_hdr { + uint32_t len; + uint8_t pbt; +} __packed; + +/* IPL Parameter Block 0 with common fields */ +struct ipl_pb0_common { + uint32_t len; + uint8_t pbt; + uint8_t flags; + uint8_t reserved1[2]; + uint8_t loadparm[8]; + uint8_t reserved2[84]; +} __packed; + +/* IPL Parameter Block 0 for FCP */ +struct ipl_pb0_fcp { + uint32_t len; + uint8_t pbt; + uint8_t reserved1[3]; + uint8_t loadparm[8]; + uint8_t reserved2[304]; + uint8_t opt; + uint8_t reserved3[3]; + uint8_t cssid; + uint8_t reserved4[1]; + uint8_t devno; + uint8_t reserved5[4]; + uint64_t wwpn; + uint64_t lun; + uint32_t bootprog; + uint8_t reserved6[12]; + uint64_t br_lba; + uint32_t scp_data_len; + uint8_t reserved7[260]; + uint8_t scp_data[]; +} __packed; + +/* IPL Parameter Block 0 for CCW */ +struct ipl_pb0_ccw { + uint32_t len; + uint8_t pbt; + uint8_t flags; + uint8_t reserved1[2]; + uint8_t loadparm[8]; + uint8_t reserved2[84]; + uint16_t reserved3 : 13; + uint8_t ssid : 3; + uint16_t devno; + uint8_t vm_flags; + uint8_t reserved4[3]; + uint32_t vm_parm_len; + uint8_t nss_name[8]; + uint8_t vm_parm[64]; + uint8_t reserved5[8]; +} __packed; + +struct ipl_parameter_block { + struct ipl_pl_hdr hdr; + union { + struct ipl_pb_hdr pb0_hdr; + struct ipl_pb0_common common; + struct ipl_pb0_fcp fcp; + struct ipl_pb0_ccw ccw; + char raw[PAGE_SIZE - sizeof(struct ipl_pl_hdr)]; + }; +} __packed __aligned(PAGE_SIZE); + +/* IPL Report List header */ +struct ipl_rl_hdr { + uint32_t len; + uint8_t flags; + uint8_t reserved1[2]; + uint8_t version; + uint8_t reserved2[8]; +} __packed; + +/* IPL Report Block header */ +/* Structure must not have any padding */ +struct ipl_rb_hdr { + uint32_t len; + uint8_t rbt; + uint8_t reserved1[11]; +}; +STATIC_ASSERT(sizeof(struct ipl_rb_hdr) == 4 + 1 + 11) + +/* IPL Report Block types */ +enum ipl_rbt { + IPL_RBT_CERTIFICATES = 1, + IPL_RBT_COMPONENTS = 2, +}; + +/* IPL Report Block for the certificate list */ +struct ipl_rb_certificate_entry { + uint64_t addr; + uint64_t len; +} __packed; + +struct ipl_rb_certificates { + uint32_t len; + uint8_t rbt; + uint8_t reserved1[11]; + struct ipl_rb_certificate_entry entries[]; +} __packed; + +/* IPL Report Block for the component list */ +struct ipl_rb_component_entry { + uint64_t addr; + uint64_t len; + uint8_t flags; + uint8_t reserved1[5]; + uint16_t certificate_index; + uint8_t reserved2[8]; +}; + +/* Structure must not have any padding */ +struct ipl_rb_components { + uint32_t len; + uint8_t rbt; + uint8_t reserved1[11]; + struct ipl_rb_component_entry entries[]; +}; +STATIC_ASSERT(sizeof(struct ipl_rb_components) == 4 + 1 + 11) + +#endif /* __ASSEMBLER__ */ +#endif /* IPL_H */ --- a/zipl/boot/stage3.h +++ b/zipl/boot/stage3.h @@ -15,7 +15,7 @@ #include "libc.h" #include "s390.h" -#include "lib/zt_common.h" +#include "boot/ipl.h" #define IPL_DEVICE 0x10404UL #define INITRD_START 0x10408UL @@ -29,150 +29,12 @@ #define STAGE3_FLAG_SCSI 0x0001000000000000ULL #define STAGE3_FLAG_KDUMP 0x0002000000000000ULL -#define IPL_FLAG_SECURE 0x40 - #define DEFAULT_PSW_LOAD 0x0008000080010000UL #define PSW_ADDR_MASK 0x000000007FFFFFFFUL #define UNSPECIFIED_ADDRESS -1UL -/* IPL Parameter List header */ -struct ipl_pl_hdr { - uint32_t len; - uint8_t flags; - uint8_t reserved1[2]; - uint8_t version; -} __packed; - -/* IPL Parameter Block header */ -struct ipl_pb_hdr { - uint32_t len; - uint8_t pbt; -} __packed; - -/* IPL Parameter Block 0 with common fields */ -struct ipl_pb0_common { - uint32_t len; - uint8_t pbt; - uint8_t flags; - uint8_t reserved1[2]; - uint8_t loadparm[8]; - uint8_t reserved2[84]; -} __packed; - -/* IPL Parameter Block 0 for FCP */ -struct ipl_pb0_fcp { - uint32_t len; - uint8_t pbt; - uint8_t reserved1[3]; - uint8_t loadparm[8]; - uint8_t reserved2[304]; - uint8_t opt; - uint8_t reserved3[3]; - uint8_t cssid; - uint8_t reserved4[1]; - uint8_t devno; - uint8_t reserved5[4]; - uint64_t wwpn; - uint64_t lun; - uint32_t bootprog; - uint8_t reserved6[12]; - uint64_t br_lba; - uint32_t scp_data_len; - uint8_t reserved7[260]; - uint8_t scp_data[]; -} __packed; - -/* IPL Parameter Block 0 for CCW */ -struct ipl_pb0_ccw { - uint32_t len; - uint8_t pbt; - uint8_t flags; - uint8_t reserved1[2]; - uint8_t loadparm[8]; - uint8_t reserved2[84]; - uint16_t reserved3 : 13; - uint8_t ssid : 3; - uint16_t devno; - uint8_t vm_flags; - uint8_t reserved4[3]; - uint32_t vm_parm_len; - uint8_t nss_name[8]; - uint8_t vm_parm[64]; - uint8_t reserved5[8]; -} __packed; - -struct ipl_parameter_block { - struct ipl_pl_hdr hdr; - union { - struct ipl_pb_hdr pb0_hdr; - struct ipl_pb0_common common; - struct ipl_pb0_fcp fcp; - struct ipl_pb0_ccw ccw; - char raw[PAGE_SIZE - sizeof(struct ipl_pl_hdr)]; - }; -} __packed __aligned(PAGE_SIZE); - -/* IPL Report List header */ -struct ipl_rl_hdr { - uint32_t len; - uint8_t flags; - uint8_t reserved1[2]; - uint8_t version; - uint8_t reserved2[8]; -} __packed; - -/* IPL Report Block header */ -/* Structure must not have any padding */ -struct ipl_rb_hdr { - uint32_t len; - uint8_t rbt; - uint8_t reserved1[11]; -}; -STATIC_ASSERT(sizeof(struct ipl_rb_hdr) == 4 + 1 + 11) - -/* IPL Report Block types */ -enum ipl_rbt { - IPL_RBT_CERTIFICATES = 1, - IPL_RBT_COMPONENTS = 2, -}; - -/* IPL Report Block for the certificate list */ -struct ipl_rb_certificate_entry { - uint64_t addr; - uint64_t len; -} __packed; - -struct ipl_rb_certificates { - uint32_t len; - uint8_t rbt; - uint8_t reserved1[11]; - struct ipl_rb_certificate_entry entries[]; -} __packed; - -/* IPL Report Block for the component list */ -struct ipl_rb_component_entry { - uint64_t addr; - uint64_t len; - uint8_t flags; - uint8_t reserved1[5]; - uint16_t certificate_index; - uint8_t reserved2[8]; -}; - -#define IPL_RB_COMPONENT_FLAG_SIGNED 0x80 -#define IPL_RB_COMPONENT_FLAG_VERIFIED 0x40 - -/* Structure must not have any padding */ -struct ipl_rb_components { - uint32_t len; - uint8_t rbt; - uint8_t reserved1[11]; - struct ipl_rb_component_entry entries[]; -}; -STATIC_ASSERT(sizeof(struct ipl_rb_components) == 4 + 1 + 11) - extern unsigned long long _parm_addr; /* address of parmline */ extern unsigned long long _initrd_addr; /* address of initrd */ extern unsigned long long _initrd_len; /* length of initrd */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor