mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Make zipl tool prepare ECKD DASD for booting by different IPL
programs (with the same boot record installed).
Besides standard CCW-type IPL, user gets an ability to trigger
(with the same boot record installed!) List-Directed IPL. This
allows to use the feature of secure boot from ECKD DASD (which
is not available for CCW-type IPL).
When using the old boot interfaces, the usual CCW-type IPL is
triggered for DASD. Also for compatibility reasons zipl(8) tool
is modified to create and install one, or two "similar" program
tables per boot partition, depending on job and disk type. The
"similar" program tables differ only in block pointers format.
The old IPL programs (CCW-type IPL) use program table based on the
old format.
All program tables are packed to the same bootmap file. Their
order and logical offsets in the file are not significant (not
used by anyone).
The picture below shows which program table is used for IPL of
specified type from disk of specified type. Here "0" and "1" are
identifiers of program tables based on the old and new block
pointers format respectively. E.g. program table "0" is used for
CCW-type IPL from ECKD DASD. LD-IPL from DASD FBA is unsupported
(respectively, only one program table "0" is used), etc.
CCW-IPL LD-IPL
SCSI X 0
DASD FBA 0 X
ECKD DASD LDL 0 X
ECKD DASD CDL 0 1
Signed-off-by: Eduard Shishkin <edward6@linux.ibm.com>
Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
/*
|
|
* s390-tools/zipl/include/bootmap.h
|
|
* Functions to build the bootmap file.
|
|
*
|
|
* Copyright IBM Corp. 2001, 2017
|
|
*
|
|
* 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 BOOTMAP_H
|
|
#define BOOTMAP_H
|
|
|
|
#include "lib/zt_common.h"
|
|
|
|
#include "disk.h"
|
|
#include "job.h"
|
|
#include "zipl.h"
|
|
#include "stddef.h"
|
|
|
|
#define BOOTMAP_HEADER_VERSION 1
|
|
|
|
#define SIGNATURE_MAGIC "~Module signature appended~\n"
|
|
#define PKCS7_FORMAT 0x01
|
|
|
|
struct bootmap_header {
|
|
char header_text[48];
|
|
u64 version;
|
|
u64 envblk_offset;
|
|
char reserved[448];
|
|
};
|
|
|
|
/*
|
|
* The file_signature structure and the PKEY_ID definition
|
|
* are based on linux/scripts/sign-file.c
|
|
*/
|
|
struct file_signature {
|
|
u8 algorithm;
|
|
u8 hash;
|
|
u8 id_type;
|
|
u8 signer_len;
|
|
u8 key_id_len;
|
|
u8 __pad[3];
|
|
u32 sig_len;
|
|
char magic[28];
|
|
};
|
|
|
|
#define PKEY_ID_PKCS7 0x02
|
|
|
|
int bootmap_header_init(int fd);
|
|
int bootmap_header_read(int fd, struct bootmap_header *bh);
|
|
int bootmap_header_write(int fd, struct bootmap_header *bh);
|
|
void bootmap_store_blockptr(void *buffer, disk_blockptr_t *ptr,
|
|
struct disk_info *info, int fid);
|
|
|
|
#endif /* if not BOOTMAP_H */
|