On 15.02.2018 23:54, Collin L. Walling wrote: > Some ECKD bootmap code was using structs designed for SCSI. > Even though this works, it confuses readability. Add a new > BootMapTable struct to assist with readability in bootmap > entry code. Also: > > - replace ScsiMbr in ECKD code with appropriate structs > - fix read_block messages to reflect BootMapTable > - fixup ipl_scsi to use BootMapTable (referred to as Program Table) > - defined value for maximum table entries > > Signed-off-by: Collin L. Walling <wall...@linux.vnet.ibm.com> > --- > pc-bios/s390-ccw/bootmap.c | 60 > +++++++++++++++++++++------------------------- > pc-bios/s390-ccw/bootmap.h | 14 +++++++++-- > 2 files changed, 39 insertions(+), 35 deletions(-) [...] > diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h > index cf99a4c..850b655 100644 > --- a/pc-bios/s390-ccw/bootmap.h > +++ b/pc-bios/s390-ccw/bootmap.h > @@ -53,6 +53,15 @@ typedef union BootMapPointer { > ExtEckdBlockPtr xeckd; > } __attribute__ ((packed)) BootMapPointer; > > +#define MAX_TABLE_ENTRIES 30 > + > +/* aka Program Table */ > +typedef struct BootMapTable { > + uint8_t magic[4]; > + uint8_t reserved[12]; > + BootMapPointer entry[]; > +} __attribute__ ((packed)) BootMapTable; > + > typedef struct ComponentEntry { > ScsiBlockPtr data; > uint8_t pad[7]; > @@ -69,8 +78,9 @@ typedef struct ComponentHeader { > typedef struct ScsiMbr { > uint8_t magic[4]; > uint32_t version_id; > - uint8_t reserved[8]; > - ScsiBlockPtr blockptr[]; > + uint8_t reserved1[8]; > + ScsiBlockPtr pt; /* block pointer to program table */ > + uint8_t reserved2[120];
Did you want to pad the struct to 512 bytes here? If so, I think that should have been "uint32_t" instead of "uint8_t" or "480" instead of "120" ? > } __attribute__ ((packed)) ScsiMbr; > > #define ZIPL_MAGIC "zIPL" > Thomas