/* * zipl - zSeries Initial Program Loader tool * * Main program for stage2 bootloader. * * Copyright IBM Corp. 2013, 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 COMMON_H #define COMMON_H #include "cio.h" #include "error.h" #include "libc.h" #include "s390.h" #define DESCR_PER_BLOCK 16 /* ADRESS */ #define STAGE2_DESC 0x78 /* Layout of ECKD disk block pointer */ struct eckd_blockptr { uint16_t cyl; uint16_t head; uint8_t sec; uint16_t size; uint8_t blockct; uint8_t reserved[8]; } __packed; struct linear_blockptr { uint64_t blockno; uint16_t size; uint16_t blockct; uint8_t reserved[4]; } __packed; typedef union { struct eckd_blockptr eckd; struct linear_blockptr linear; } disk_blockptr_t; struct component_header { uint8_t magic[4]; uint8_t type; uint8_t reserved[27]; } __packed; struct component_entry { uint8_t data[23]; uint8_t type; union { uint32_t load_address[2]; uint64_t load_psw; } address; } __packed; typedef enum { COMPONENT_EXECUTE = 0x01, COMPONENT_LOAD = 0x02, COMPONENT_SIGNATURE = 0x03 } component_type; struct stage2_descr { uint8_t reserved[16]; } __packed __aligned(8); void *load_direct(disk_blockptr_t *, struct subchannel_id , void *); int extract_length(void *); int is_zero_block(void *); void kdump_stage2(unsigned long); #endif /* COMMON_H */