mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
pc-bios/s390-ccw: add boot entry selection for ECKD DASD
1. change a bit definition of ScsiMbr to allow an array of pointers 2. add loadparm fetch to boot script processing 3. apply loadparm index to boot entry selection, if any Initial patch from Eugene (jno) Dvurechenski. Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com> Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
9dd7823b70
commit
82ca394194
2 changed files with 12 additions and 6 deletions
|
@ -183,15 +183,21 @@ static block_number_t load_eckd_segments(block_number_t blk, uint64_t *address)
|
|||
static void run_eckd_boot_script(block_number_t mbr_block_nr)
|
||||
{
|
||||
int i;
|
||||
unsigned int loadparm = get_loadparm_index();
|
||||
block_number_t block_nr;
|
||||
uint64_t address;
|
||||
ScsiMbr *scsi_mbr = (void *)sec;
|
||||
ScsiMbr *bte = (void *)sec; /* Eckd bootmap table entry */
|
||||
BootMapScript *bms = (void *)sec;
|
||||
|
||||
debug_print_int("loadparm", loadparm);
|
||||
IPL_assert(loadparm < 31, "loadparm value greater than"
|
||||
" maximum number of boot entries allowed");
|
||||
|
||||
memset(sec, FREE_SPACE_FILLER, sizeof(sec));
|
||||
read_block(mbr_block_nr, sec, "Cannot read MBR");
|
||||
|
||||
block_nr = eckd_block_num((void *)&(scsi_mbr->blockptr));
|
||||
block_nr = eckd_block_num((void *)&(bte->blockptr[loadparm]));
|
||||
IPL_assert(block_nr != -1, "No Boot Map");
|
||||
|
||||
memset(sec, FREE_SPACE_FILLER, sizeof(sec));
|
||||
read_block(block_nr, sec, "Cannot read Boot Map Script");
|
||||
|
@ -459,11 +465,11 @@ static void ipl_scsi(void)
|
|||
debug_print_int("MBR Version", mbr->version_id);
|
||||
IPL_check(mbr->version_id == 1,
|
||||
"Unknown MBR layout version, assuming version 1");
|
||||
debug_print_int("program table", mbr->blockptr.blockno);
|
||||
IPL_assert(mbr->blockptr.blockno, "No Program Table");
|
||||
debug_print_int("program table", mbr->blockptr[0].blockno);
|
||||
IPL_assert(mbr->blockptr[0].blockno, "No Program Table");
|
||||
|
||||
/* Parse the program table */
|
||||
read_block(mbr->blockptr.blockno, sec,
|
||||
read_block(mbr->blockptr[0].blockno, sec,
|
||||
"Error reading Program Table");
|
||||
|
||||
IPL_assert(magic_match(sec, ZIPL_MAGIC), "No zIPL magic in PT");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue