Lines Matching refs:vtoc

144 efi_alloc_and_init(int fd, uint32_t nparts, struct dk_gpt **vtoc)  in efi_alloc_and_init()  argument
178 if ((*vtoc = calloc(length, 1)) == NULL) in efi_alloc_and_init()
181 vptr = *vtoc; in efi_alloc_and_init()
205 efi_alloc_and_read(int fd, struct dk_gpt **vtoc) in efi_alloc_and_read() argument
215 if ((*vtoc = calloc(length, 1)) == NULL) in efi_alloc_and_read()
218 (*vtoc)->efi_nparts = nparts; in efi_alloc_and_read()
219 rval = efi_read(fd, *vtoc); in efi_alloc_and_read()
221 if ((rval == VT_EINVAL) && (*vtoc)->efi_nparts > nparts) { in efi_alloc_and_read()
225 ((*vtoc)->efi_nparts - 1); in efi_alloc_and_read()
226 nparts = (*vtoc)->efi_nparts; in efi_alloc_and_read()
227 if ((tmp = realloc(*vtoc, length)) == NULL) { in efi_alloc_and_read()
228 free (*vtoc); in efi_alloc_and_read()
229 *vtoc = NULL; in efi_alloc_and_read()
232 *vtoc = tmp; in efi_alloc_and_read()
233 rval = efi_read(fd, *vtoc); in efi_alloc_and_read()
242 free (*vtoc); in efi_alloc_and_read()
243 *vtoc = NULL; in efi_alloc_and_read()
309 efi_read(int fd, struct dk_gpt *vtoc) in efi_read() argument
370 if (NBLOCKS(vtoc->efi_nparts, disk_info.dki_lbsize) < 34) { in efi_read()
373 label_len = vtoc->efi_nparts * (int) sizeof (efi_gpe_t) + in efi_read()
386 user_length = vtoc->efi_nparts; in efi_read()
432 vtoc->efi_flags |= EFI_GPT_PRIMARY_CORRUPT; in efi_read()
433 vtoc->efi_nparts = in efi_read()
501 vtoc->efi_version = LE_32(efi->efi_gpt_Revision); in efi_read()
502 vtoc->efi_nparts = LE_32(efi->efi_gpt_NumberOfPartitionEntries); in efi_read()
503 vtoc->efi_part_size = LE_32(efi->efi_gpt_SizeOfPartitionEntry); in efi_read()
504 vtoc->efi_lbasize = disk_info.dki_lbsize; in efi_read()
505 vtoc->efi_last_lba = disk_info.dki_capacity - 1; in efi_read()
506 vtoc->efi_first_u_lba = LE_64(efi->efi_gpt_FirstUsableLBA); in efi_read()
507 vtoc->efi_last_u_lba = LE_64(efi->efi_gpt_LastUsableLBA); in efi_read()
508 vtoc->efi_altern_lba = LE_64(efi->efi_gpt_AlternateLBA); in efi_read()
509 UUID_LE_CONVERT(vtoc->efi_disk_uguid, efi->efi_gpt_DiskGUID); in efi_read()
515 if (user_length < vtoc->efi_nparts) { in efi_read()
519 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_read()
521 UUID_LE_CONVERT(vtoc->efi_parts[i].p_guid, in efi_read()
528 if (bcmp(&vtoc->efi_parts[i].p_guid, in efi_read()
531 vtoc->efi_parts[i].p_tag = j; in efi_read()
535 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) in efi_read()
537 vtoc->efi_parts[i].p_flag = in efi_read()
539 vtoc->efi_parts[i].p_start = in efi_read()
541 vtoc->efi_parts[i].p_size = in efi_read()
543 vtoc->efi_parts[i].p_start + 1; in efi_read()
545 vtoc->efi_parts[i].p_name[j] = in efi_read()
550 UUID_LE_CONVERT(vtoc->efi_parts[i].p_uguid, in efi_read()
560 write_pmbr(int fd, struct dk_gpt *vtoc) in write_pmbr() argument
569 len = (vtoc->efi_lbasize == 0) ? sizeof (mb) : vtoc->efi_lbasize; in write_pmbr()
612 size_in_lba = vtoc->efi_last_lba; in write_pmbr()
647 check_input(struct dk_gpt *vtoc) in check_input() argument
656 for (i = 0; i < vtoc->efi_nparts; i++) { in check_input()
658 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in check_input()
659 (vtoc->efi_parts[i].p_size != 0)) { in check_input()
664 vtoc->efi_parts[i].p_size); in check_input()
668 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in check_input()
669 if (uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_guid)) in check_input()
672 vtoc->efi_parts[i].p_tag = 0xff; in check_input()
674 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in check_input()
685 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in check_input()
686 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in check_input()
691 vtoc->efi_parts[i].p_start); in check_input()
694 vtoc->efi_first_u_lba, in check_input()
695 vtoc->efi_last_u_lba); in check_input()
699 if ((vtoc->efi_parts[i].p_start + in check_input()
700 vtoc->efi_parts[i].p_size < in check_input()
701 vtoc->efi_first_u_lba) || in check_input()
702 (vtoc->efi_parts[i].p_start + in check_input()
703 vtoc->efi_parts[i].p_size > in check_input()
704 vtoc->efi_last_u_lba + 1)) { in check_input()
709 vtoc->efi_parts[i].p_start + in check_input()
710 vtoc->efi_parts[i].p_size); in check_input()
713 vtoc->efi_first_u_lba, in check_input()
714 vtoc->efi_last_u_lba); in check_input()
719 for (j = 0; j < vtoc->efi_nparts; j++) { in check_input()
720 isize = vtoc->efi_parts[i].p_size; in check_input()
721 jsize = vtoc->efi_parts[j].p_size; in check_input()
722 istart = vtoc->efi_parts[i].p_start; in check_input()
723 jstart = vtoc->efi_parts[j].p_start; in check_input()
830 efi_write(int fd, struct dk_gpt *vtoc) in efi_write() argument
853 if (check_input(vtoc)) in efi_write()
857 if (NBLOCKS(vtoc->efi_nparts, vtoc->efi_lbasize) < 34) { in efi_write()
858 dk_ioc.dki_length = EFI_MIN_ARRAY_SIZE + vtoc->efi_lbasize; in efi_write()
860 dk_ioc.dki_length = NBLOCKS(vtoc->efi_nparts, in efi_write()
861 vtoc->efi_lbasize) * in efi_write()
862 vtoc->efi_lbasize; in efi_write()
868 nblocks = dk_ioc.dki_length / vtoc->efi_lbasize - 1; in efi_write()
875 lba_backup_gpt_hdr = vtoc->efi_last_u_lba + 1 + nblocks; in efi_write()
883 efi->efi_gpt_Revision = LE_32(vtoc->efi_version); /* 0x02000100 */ in efi_write()
888 efi->efi_gpt_FirstUsableLBA = LE_64(vtoc->efi_first_u_lba); in efi_write()
889 efi->efi_gpt_LastUsableLBA = LE_64(vtoc->efi_last_u_lba); in efi_write()
891 efi->efi_gpt_NumberOfPartitionEntries = LE_32(vtoc->efi_nparts); in efi_write()
893 UUID_LE_CONVERT(efi->efi_gpt_DiskGUID, vtoc->efi_disk_uguid); in efi_write()
896 efi_parts = (efi_gpe_t *)((char *)dk_ioc.dki_data + vtoc->efi_lbasize); in efi_write()
898 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_write()
903 if (vtoc->efi_parts[i].p_tag == j) { in efi_write()
920 vtoc->efi_parts[i].p_tag); in efi_write()
926 LE_64(vtoc->efi_parts[i].p_start); in efi_write()
928 LE_64(vtoc->efi_parts[i].p_start + in efi_write()
929 vtoc->efi_parts[i].p_size - 1); in efi_write()
931 LE_16(vtoc->efi_parts[i].p_flag); in efi_write()
934 LE_16((ushort_t)vtoc->efi_parts[i].p_name[j]); in efi_write()
936 if ((vtoc->efi_parts[i].p_tag != V_UNASSIGNED) && in efi_write()
937 uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_uguid)) { in efi_write()
939 &vtoc->efi_parts[i].p_uguid); in efi_write()
941 bcopy(&vtoc->efi_parts[i].p_uguid, in efi_write()
947 vtoc->efi_nparts * (int)sizeof (struct efi_gpe))); in efi_write()
964 dk_ioc.dki_lba = vtoc->efi_last_u_lba + 1; in efi_write()
965 dk_ioc.dki_length -= vtoc->efi_lbasize; in efi_write()
968 vtoc->efi_lbasize); in efi_write()
978 vtoc->efi_last_u_lba + 1, in efi_write()
987 dk_ioc.dki_length = vtoc->efi_lbasize; in efi_write()
990 vtoc->efi_lbasize); in efi_write()
993 efi->efi_gpt_PartitionEntryLBA = LE_64(vtoc->efi_last_u_lba + 1); in efi_write()
1009 (void) write_pmbr(fd, vtoc); in efi_write()
1028 struct vtoc vtoc; in efi_type() local
1035 if (ioctl(fd, DKIOCGVTOC, &vtoc) == -1) in efi_type()
1044 efi_err_check(struct dk_gpt *vtoc) in efi_err_check() argument
1054 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_err_check()
1056 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in efi_err_check()
1057 (vtoc->efi_parts[i].p_size != 0)) { in efi_err_check()
1060 "of %llu\n", i, vtoc->efi_parts[i].p_size); in efi_err_check()
1062 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in efi_err_check()
1065 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in efi_err_check()
1072 if (vtoc->efi_parts[i].p_size != EFI_MIN_RESV_SIZE) in efi_err_check()
1077 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in efi_err_check()
1078 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in efi_err_check()
1082 vtoc->efi_parts[i].p_start); in efi_err_check()
1085 vtoc->efi_first_u_lba, in efi_err_check()
1086 vtoc->efi_last_u_lba); in efi_err_check()
1088 if ((vtoc->efi_parts[i].p_start + in efi_err_check()
1089 vtoc->efi_parts[i].p_size < in efi_err_check()
1090 vtoc->efi_first_u_lba) || in efi_err_check()
1091 (vtoc->efi_parts[i].p_start + in efi_err_check()
1092 vtoc->efi_parts[i].p_size > in efi_err_check()
1093 vtoc->efi_last_u_lba + 1)) { in efi_err_check()
1097 vtoc->efi_parts[i].p_start + in efi_err_check()
1098 vtoc->efi_parts[i].p_size); in efi_err_check()
1101 vtoc->efi_first_u_lba, in efi_err_check()
1102 vtoc->efi_last_u_lba); in efi_err_check()
1105 for (j = 0; j < vtoc->efi_nparts; j++) { in efi_err_check()
1106 isize = vtoc->efi_parts[i].p_size; in efi_err_check()
1107 jsize = vtoc->efi_parts[j].p_size; in efi_err_check()
1108 istart = vtoc->efi_parts[i].p_start; in efi_err_check()
1109 jstart = vtoc->efi_parts[j].p_start; in efi_err_check()
1139 efi_auto_sense(int fd, struct dk_gpt **vtoc) in efi_auto_sense() argument
1147 if (efi_alloc_and_init(fd, EFI_NUMPAR, vtoc) != 0) { in efi_auto_sense()
1154 for (i = 0; i < min((*vtoc)->efi_nparts, V_NUMPAR); i++) { in efi_auto_sense()
1155 (*vtoc)->efi_parts[i].p_tag = default_vtoc_map[i].p_tag; in efi_auto_sense()
1156 (*vtoc)->efi_parts[i].p_flag = default_vtoc_map[i].p_flag; in efi_auto_sense()
1157 (*vtoc)->efi_parts[i].p_start = 0; in efi_auto_sense()
1158 (*vtoc)->efi_parts[i].p_size = 0; in efi_auto_sense()
1166 (*vtoc)->efi_parts[0].p_start = 34; in efi_auto_sense()
1167 (*vtoc)->efi_parts[0].p_size = 262144; in efi_auto_sense()
1170 (*vtoc)->efi_parts[1].p_start = 262178; in efi_auto_sense()
1171 (*vtoc)->efi_parts[1].p_size = 262144; in efi_auto_sense()
1174 (*vtoc)->efi_parts[2].p_tag = V_UNASSIGNED; in efi_auto_sense()
1177 (*vtoc)->efi_parts[6].p_start = 524322; in efi_auto_sense()
1178 (*vtoc)->efi_parts[6].p_size = (*vtoc)->efi_last_u_lba - 524322 in efi_auto_sense()
1182 (*vtoc)->efi_parts[8].p_start = (*vtoc)->efi_last_u_lba - (1024 * 16); in efi_auto_sense()
1183 (*vtoc)->efi_parts[8].p_size = (1024 * 16); in efi_auto_sense()
1184 (*vtoc)->efi_parts[8].p_tag = V_RESERVED; in efi_auto_sense()