Lines Matching +full:- +full:chs

7  * your option) any later version. See the COPYING file in the top-level
13 #include "s390-ccw.h"
14 #include "s390-arch.h"
49 return !memcmp(&vd->ident[0], vol_desc_magic, 5) && in is_iso_vd_valid()
50 vd->version == 0x1 && in is_iso_vd_valid()
51 vd->type <= VOL_DESC_TYPE_PARTITION; in is_iso_vd_valid()
67 if (!magic_match(bip->magic, ZIPL_MAGIC)) { in verify_boot_info()
69 return -EINVAL; in verify_boot_info()
71 if (bip->version != BOOT_INFO_VERSION) { in verify_boot_info()
73 return -EINVAL; in verify_boot_info()
75 if (bip->bp_type != BOOT_INFO_BP_TYPE_IPL) { in verify_boot_info()
77 return -ENODEV; in verify_boot_info()
79 if (bip->dev_type != BOOT_INFO_DEV_TYPE_ECKD) { in verify_boot_info()
81 return -ENODEV; in verify_boot_info()
83 if (bip->flags != BOOT_INFO_FLAGS_ARCH) { in verify_boot_info()
85 return -EINVAL; in verify_boot_info()
87 if (!block_size_ok(bip->bp.ipl.bm_ptr.eckd.bptr.size)) { in verify_boot_info()
89 return -EINVAL; in verify_boot_info()
101 *c = ptr->ldptr.chs.cylinder; in eckd_format_chs()
102 *h = ptr->ldptr.chs.head; in eckd_format_chs()
103 *s = ptr->ldptr.chs.sector; in eckd_format_chs()
105 *c = ptr->bptr.chs.cylinder; in eckd_format_chs()
106 *h = ptr->bptr.chs.head; in eckd_format_chs()
107 *s = ptr->bptr.chs.sector; in eckd_format_chs()
119 + s - 1; /* block nr starts with zero */ in eckd_chs_to_block()
123 static block_number_t eckd_block_num(EckdCHS *chs) in eckd_block_num() argument
125 return eckd_chs_to_block(chs->cylinder, chs->head, chs->sector); in eckd_block_num()
183 if (j == (max_bprs_entries - 1)) { in load_eckd_segments()
195 * If an invalid address is found during LD-IPL then break and in load_eckd_segments()
196 * retry as CCW-IPL, otherwise abort on error in load_eckd_segments()
247 for (i = 0; i <= virtio_get_block_size() - 4; i++) { in find_zipl_boot_menu_banner()
270 return -EIO; in eckd_get_boot_menu_index()
277 cur_block_nr = eckd_block_num(&s1b->seek[i].chs); in eckd_get_boot_menu_index()
285 return -EIO; in eckd_get_boot_menu_index()
296 return -EIO; in eckd_get_boot_menu_index()
301 next_block_nr = eckd_block_num(&s1b->seek[i + 1].chs); in eckd_get_boot_menu_index()
307 return -EIO; in eckd_get_boot_menu_index()
330 /* The S1B block number is NULL_BLOCK_NR if and only if it's an LD-IPL */ in run_eckd_boot_script()
345 return -EIO; in run_eckd_boot_script()
348 block_nr = gen_eckd_block_num(&bmt->entry[loadparm].xeckd, ldipl); in run_eckd_boot_script()
357 return -EIO; in run_eckd_boot_script()
360 for (i = 0; bms->entry[i].type == BOOT_SCRIPT_LOAD || in run_eckd_boot_script()
361 bms->entry[i].type == BOOT_SCRIPT_SIGNATURE; i++) { in run_eckd_boot_script()
364 if (bms->entry[i].type == BOOT_SCRIPT_SIGNATURE) { in run_eckd_boot_script()
368 address = bms->entry[i].address.load_address; in run_eckd_boot_script()
369 block_nr = gen_eckd_block_num(&bms->entry[i].blkptr.xeckd, ldipl); in run_eckd_boot_script()
374 return ldipl ? 0 : -EIO; in run_eckd_boot_script()
379 if (ldipl && bms->entry[i].type != BOOT_SCRIPT_EXEC) { in run_eckd_boot_script()
380 /* Abort LD-IPL and retry as CCW-IPL */ in run_eckd_boot_script()
384 if (bms->entry[i].type != BOOT_SCRIPT_EXEC) { in run_eckd_boot_script()
386 return -EINVAL; in run_eckd_boot_script()
388 write_reset_psw(bms->entry[i].address.load_address); in run_eckd_boot_script()
390 return -1; in run_eckd_boot_script()
406 return -EIO; in ipl_eckd_cdl()
409 mbr = &ipl2->mbr; in ipl_eckd_cdl()
414 if (!block_size_ok(mbr->blockptr.xeckd.bptr.size)) { in ipl_eckd_cdl()
418 if (mbr->dev_type != DEV_TYPE_ECKD) { in ipl_eckd_cdl()
419 puts("Non-ECKD device type in zIPL section of IPL2 record."); in ipl_eckd_cdl()
424 bmt_block_nr = eckd_block_num(&mbr->blockptr.xeckd.bptr.chs); in ipl_eckd_cdl()
427 s1b_block_nr = eckd_block_num(&ipl2->stage1.seek[0].chs); in ipl_eckd_cdl()
432 return -EIO; in ipl_eckd_cdl()
434 if (!magic_match(vlbl->key, VOL1_MAGIC)) { in ipl_eckd_cdl()
438 if (!magic_match(vlbl->f.key, VOL1_MAGIC)) { in ipl_eckd_cdl()
442 print_volser(vlbl->f.volser); in ipl_eckd_cdl()
454 switch (vlbl->LDL_version) { in print_eckd_ldl_msg()
462 msg[0] = ebc2asc[vlbl->LDL_version]; in print_eckd_ldl_msg()
467 print_volser(vlbl->volser); in print_eckd_ldl_msg()
484 return -EIO; in ipl_eckd_ldl()
487 if (!magic_match(ipl1->bip.magic, ZIPL_MAGIC)) { in ipl_eckd_ldl()
492 verify_boot_info(&ipl1->bip); in ipl_eckd_ldl()
495 bmt_block_nr = eckd_block_num(&ipl1->bip.bp.ipl.bm_ptr.eckd.bptr.chs); in ipl_eckd_ldl()
498 s1b_block_nr = eckd_block_num(&ipl1->stage1.seek[0].chs); in ipl_eckd_ldl()
515 if (!magic_match(br->magic, ZIPL_MAGIC)) { in eckd_find_bmt()
516 /* If the boot record is invalid, return and try CCW-IPL instead */ in eckd_find_bmt()
520 return gen_eckd_block_num(&br->pgt.xeckd, 1); in eckd_find_bmt()
532 *p-- = '0' + (n % 10); in print_eckd_msg()
536 *p-- = ' '; in print_eckd_msg()
546 block_number_t ldipl_bmt; /* Boot Map Table for List-Directed IPL */ in ipl_eckd()
554 return -EIO; in ipl_eckd()
558 * First check for a list-directed-format pointer which would in ipl_eckd()
561 if (eckd_valid_address((ExtEckdBlockPtr *)&vlbl->f.br, 0)) { in ipl_eckd()
562 ldipl_bmt = eckd_find_bmt((ExtEckdBlockPtr *)&vlbl->f.br); in ipl_eckd()
565 return -EIO; in ipl_eckd()
567 break; /* Invalid BMT but the device may still boot with CCW-IPL */ in ipl_eckd()
569 puts("List-Directed"); in ipl_eckd()
571 * LD-IPL does not use the S1B bock, just make it NULL_BLOCK_NR. in ipl_eckd()
575 return -EIO; in ipl_eckd()
577 /* Non-fatal error, retry as CCW-IPL */ in ipl_eckd()
584 return -EIO; in ipl_eckd()
588 /* Not list-directed */ in ipl_eckd()
589 if (magic_match(vtoc->magic, VOL1_MAGIC)) { in ipl_eckd()
591 return -1; in ipl_eckd()
595 if (magic_match(vtoc->magic, CMS1_MAGIC)) { in ipl_eckd()
598 if (magic_match(vtoc->magic, LNX1_MAGIC)) { in ipl_eckd()
603 return -1; in ipl_eckd()
627 blockno = entry->data.blockno; in zipl_load_segment()
628 address = entry->compdat.load_addr; in zipl_load_segment()
638 return -EIO; in zipl_load_segment()
651 if (i == (max_entries - 1)) { in zipl_load_segment()
669 return -EIO; in zipl_load_segment()
684 if (virtio_read(pte->blockno, tmp_sec)) { in zipl_run()
686 return -EIO; in zipl_run()
692 return -EINVAL; in zipl_run()
694 if (header->type != ZIPL_COMP_HEADER_IPL) { in zipl_run()
696 return -EINVAL; in zipl_run()
703 while (entry->component_type == ZIPL_COMP_ENTRY_LOAD || in zipl_run()
704 entry->component_type == ZIPL_COMP_ENTRY_SIGNATURE) { in zipl_run()
707 if (entry->component_type == ZIPL_COMP_ENTRY_SIGNATURE) { in zipl_run()
713 return -1; in zipl_run()
720 return -EINVAL; in zipl_run()
724 if (entry->component_type != ZIPL_COMP_ENTRY_EXEC) { in zipl_run()
726 return -EINVAL; in zipl_run()
730 write_reset_psw(entry->compdat.load_psw); in zipl_run()
732 return -1; in zipl_run()
748 return -EIO; in ipl_scsi()
751 if (!magic_match(mbr->magic, ZIPL_MAGIC)) { in ipl_scsi()
756 debug_print_int("MBR Version", mbr->version_id); in ipl_scsi()
757 IPL_check(mbr->version_id == 1, in ipl_scsi()
759 debug_print_int("program table", mbr->pt.blockno); in ipl_scsi()
760 if (!mbr->pt.blockno) { in ipl_scsi()
762 return -EINVAL; in ipl_scsi()
766 if (virtio_read(mbr->pt.blockno, sec)) { in ipl_scsi()
768 return -EIO; in ipl_scsi()
772 return -EINVAL; in ipl_scsi()
776 if (prog_table->entry[i].scsi.blockno) { in ipl_scsi()
785 return -EINVAL; in ipl_scsi()
802 return zipl_run(&prog_table->entry[loadparm].scsi); in ipl_scsi()
813 if (s->unused || !s->sector_count) { in is_iso_bc_entry_compatible()
816 if (virtio_read(bswap32(s->load_rba), magic_sec)) { in is_iso_bc_entry_compatible()
821 /* Checking bytes 8 - 32 for S390 Linux magic */ in is_iso_bc_entry_compatible()
835 IsoDirHdr *cur_record = &vd->vd.primary.rootdir; in iso_get_file_size()
841 return -EIO; in iso_get_file_size()
844 sec_loc[0] = iso_733_to_u32(cur_record->ext_loc); in iso_get_file_size()
851 return -EIO; in iso_get_file_size()
859 return -EIO; in iso_get_file_size()
863 dir_rem[level] = iso_733_to_u32(cur_record->data_len) - in iso_get_file_size()
864 cur_record->dr_len; in iso_get_file_size()
865 sec_offset[level] += cur_record->dr_len; in iso_get_file_size()
868 dir_rem[level] -= cur_record->dr_len; in iso_get_file_size()
869 sec_offset[level] += cur_record->dr_len; in iso_get_file_size()
874 if (!cur_record->dr_len || sec_offset[level] == ISO_SECTOR_SIZE) { in iso_get_file_size()
875 /* Zero-padding and/or the end of current sector */ in iso_get_file_size()
876 dir_rem[level] -= ISO_SECTOR_SIZE - sec_offset[level]; in iso_get_file_size()
881 if (load_rba == iso_733_to_u32(cur_record->ext_loc)) { in iso_get_file_size()
882 return iso_733_to_u32(cur_record->data_len); in iso_get_file_size()
885 dir_rem[level] -= cur_record->dr_len; in iso_get_file_size()
886 sec_offset[level] += cur_record->dr_len; in iso_get_file_size()
888 if (cur_record->file_flags & 0x2) { in iso_get_file_size()
890 if (level == ISO9660_MAX_DIR_DEPTH - 1) { in iso_get_file_size()
891 puts("ISO-9660 directory depth limit exceeded"); in iso_get_file_size()
894 sec_loc[level] = iso_733_to_u32(cur_record->ext_loc); in iso_get_file_size()
904 level--; in iso_get_file_size()
907 return -EIO; in iso_get_file_size()
927 blks_to_load = (real_size + ISO_SECTOR_SIZE - 1) / ISO_SECTOR_SIZE; in load_iso_bc_entry()
955 while (is_iso_vd_valid(vd) && vd->type != VOL_DESC_TERMINATOR) { in find_iso_bc()
956 if (vd->type == VOL_DESC_TYPE_BOOT) { in find_iso_bc()
957 IsoVdElTorito *et = &vd->vd.boot; in find_iso_bc()
959 if (!memcmp(&et->el_torito[0], el_torito_magic, 32)) { in find_iso_bc()
960 return bswap32(et->bc_offset); in find_iso_bc()
1003 loadparm--; in find_iso_bc_entry()
1022 return -1; in ipl_iso_el_torito()
1025 puts("No suitable boot entry found on ISO-9660 media!"); in ipl_iso_el_torito()
1026 return -EIO; in ipl_iso_el_torito()
1071 /* Is it an ISO image in non-CD drive? */ in zipl_load_vscsi()
1090 if (vdev->is_cdrom) { in zipl_load()