Lines Matching refs:vtoc

174 efi_alloc_and_init(int fd, uint32_t nparts, struct dk_gpt **vtoc)  in efi_alloc_and_init()  argument
208 if ((*vtoc = calloc(1, length)) == NULL) in efi_alloc_and_init()
211 vptr = *vtoc; in efi_alloc_and_init()
235 efi_alloc_and_read(int fd, struct dk_gpt **vtoc) in efi_alloc_and_read() argument
276 if ((*vtoc = calloc(1, length)) == NULL) in efi_alloc_and_read()
279 (*vtoc)->efi_nparts = nparts; in efi_alloc_and_read()
280 rval = efi_read(fd, *vtoc); in efi_alloc_and_read()
282 if ((rval == VT_EINVAL) && (*vtoc)->efi_nparts > nparts) { in efi_alloc_and_read()
286 ((*vtoc)->efi_nparts - 1); in efi_alloc_and_read()
287 nparts = (*vtoc)->efi_nparts; in efi_alloc_and_read()
288 if ((tmp = realloc(*vtoc, length)) == NULL) { in efi_alloc_and_read()
289 free (*vtoc); in efi_alloc_and_read()
290 *vtoc = NULL; in efi_alloc_and_read()
293 *vtoc = tmp; in efi_alloc_and_read()
294 rval = efi_read(fd, *vtoc); in efi_alloc_and_read()
303 free (*vtoc); in efi_alloc_and_read()
304 *vtoc = NULL; in efi_alloc_and_read()
369 efi_read(int fd, struct dk_gpt *vtoc) in efi_read() argument
430 if (NBLOCKS(vtoc->efi_nparts, disk_info.dki_lbsize) < 34) { in efi_read()
433 label_len = vtoc->efi_nparts * (int) sizeof (efi_gpe_t) + in efi_read()
446 user_length = vtoc->efi_nparts; in efi_read()
492 vtoc->efi_flags |= EFI_GPT_PRIMARY_CORRUPT; in efi_read()
493 vtoc->efi_nparts = in efi_read()
561 vtoc->efi_version = LE_32(efi->efi_gpt_Revision); in efi_read()
562 vtoc->efi_nparts = LE_32(efi->efi_gpt_NumberOfPartitionEntries); in efi_read()
563 vtoc->efi_part_size = LE_32(efi->efi_gpt_SizeOfPartitionEntry); in efi_read()
564 vtoc->efi_lbasize = disk_info.dki_lbsize; in efi_read()
565 vtoc->efi_last_lba = disk_info.dki_capacity - 1; in efi_read()
566 vtoc->efi_first_u_lba = LE_64(efi->efi_gpt_FirstUsableLBA); in efi_read()
567 vtoc->efi_last_u_lba = LE_64(efi->efi_gpt_LastUsableLBA); in efi_read()
568 vtoc->efi_altern_lba = LE_64(efi->efi_gpt_AlternateLBA); in efi_read()
569 UUID_LE_CONVERT(vtoc->efi_disk_uguid, efi->efi_gpt_DiskGUID); in efi_read()
575 if (user_length < vtoc->efi_nparts) { in efi_read()
579 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_read()
581 UUID_LE_CONVERT(vtoc->efi_parts[i].p_guid, in efi_read()
588 if (bcmp(&vtoc->efi_parts[i].p_guid, in efi_read()
591 vtoc->efi_parts[i].p_tag = in efi_read()
596 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) in efi_read()
598 vtoc->efi_parts[i].p_flag = in efi_read()
600 vtoc->efi_parts[i].p_start = in efi_read()
602 vtoc->efi_parts[i].p_size = in efi_read()
604 vtoc->efi_parts[i].p_start + 1; in efi_read()
606 vtoc->efi_parts[i].p_name[j] = in efi_read()
611 UUID_LE_CONVERT(vtoc->efi_parts[i].p_uguid, in efi_read()
719 write_pmbr(int fd, struct dk_gpt *vtoc) in write_pmbr() argument
732 len = (vtoc->efi_lbasize == 0) ? sizeof (mb) : vtoc->efi_lbasize; in write_pmbr()
775 size_in_lba = vtoc->efi_last_lba; in write_pmbr()
810 check_input(struct dk_gpt *vtoc) in check_input() argument
819 for (i = 0; i < vtoc->efi_nparts; i++) { in check_input()
821 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in check_input()
822 (vtoc->efi_parts[i].p_size != 0)) { in check_input()
827 vtoc->efi_parts[i].p_size); in check_input()
831 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in check_input()
832 if (uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_guid)) in check_input()
835 vtoc->efi_parts[i].p_tag = 0xff; in check_input()
837 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in check_input()
848 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in check_input()
849 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in check_input()
854 vtoc->efi_parts[i].p_start); in check_input()
857 vtoc->efi_first_u_lba, in check_input()
858 vtoc->efi_last_u_lba); in check_input()
862 if ((vtoc->efi_parts[i].p_start + in check_input()
863 vtoc->efi_parts[i].p_size < in check_input()
864 vtoc->efi_first_u_lba) || in check_input()
865 (vtoc->efi_parts[i].p_start + in check_input()
866 vtoc->efi_parts[i].p_size > in check_input()
867 vtoc->efi_last_u_lba + 1)) { in check_input()
872 vtoc->efi_parts[i].p_start + in check_input()
873 vtoc->efi_parts[i].p_size); in check_input()
876 vtoc->efi_first_u_lba, in check_input()
877 vtoc->efi_last_u_lba); in check_input()
882 for (j = 0; j < vtoc->efi_nparts; j++) { in check_input()
883 isize = vtoc->efi_parts[i].p_size; in check_input()
884 jsize = vtoc->efi_parts[j].p_size; in check_input()
885 istart = vtoc->efi_parts[i].p_start; in check_input()
886 jstart = vtoc->efi_parts[j].p_start; in check_input()
1107 efi_write(int fd, struct dk_gpt *vtoc) in efi_write() argument
1130 if (check_input(vtoc)) in efi_write()
1134 if (NBLOCKS(vtoc->efi_nparts, vtoc->efi_lbasize) < 34) { in efi_write()
1135 dk_ioc.dki_length = EFI_MIN_ARRAY_SIZE + vtoc->efi_lbasize; in efi_write()
1137 dk_ioc.dki_length = NBLOCKS(vtoc->efi_nparts, in efi_write()
1138 vtoc->efi_lbasize) * in efi_write()
1139 vtoc->efi_lbasize; in efi_write()
1145 nblocks = dk_ioc.dki_length / vtoc->efi_lbasize - 1; in efi_write()
1152 lba_backup_gpt_hdr = vtoc->efi_last_u_lba + 1 + nblocks; in efi_write()
1160 efi->efi_gpt_Revision = LE_32(vtoc->efi_version); /* 0x02000100 */ in efi_write()
1165 efi->efi_gpt_FirstUsableLBA = LE_64(vtoc->efi_first_u_lba); in efi_write()
1166 efi->efi_gpt_LastUsableLBA = LE_64(vtoc->efi_last_u_lba); in efi_write()
1168 efi->efi_gpt_NumberOfPartitionEntries = LE_32(vtoc->efi_nparts); in efi_write()
1170 UUID_LE_CONVERT(efi->efi_gpt_DiskGUID, vtoc->efi_disk_uguid); in efi_write()
1173 efi_parts = (efi_gpe_t *)((char *)dk_ioc.dki_data + vtoc->efi_lbasize); in efi_write()
1175 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_write()
1180 if (vtoc->efi_parts[i].p_tag == in efi_write()
1198 vtoc->efi_parts[i].p_tag); in efi_write()
1204 LE_64(vtoc->efi_parts[i].p_start); in efi_write()
1206 LE_64(vtoc->efi_parts[i].p_start + in efi_write()
1207 vtoc->efi_parts[i].p_size - 1); in efi_write()
1209 LE_16(vtoc->efi_parts[i].p_flag); in efi_write()
1212 LE_16((ushort_t)vtoc->efi_parts[i].p_name[j]); in efi_write()
1214 if ((vtoc->efi_parts[i].p_tag != V_UNASSIGNED) && in efi_write()
1215 uuid_is_null((uchar_t *)&vtoc->efi_parts[i].p_uguid)) { in efi_write()
1217 &vtoc->efi_parts[i].p_uguid); in efi_write()
1219 bcopy(&vtoc->efi_parts[i].p_uguid, in efi_write()
1225 vtoc->efi_nparts * (int)sizeof (struct efi_gpe))); in efi_write()
1242 dk_ioc.dki_lba = vtoc->efi_last_u_lba + 1; in efi_write()
1243 dk_ioc.dki_length -= vtoc->efi_lbasize; in efi_write()
1246 vtoc->efi_lbasize); in efi_write()
1256 vtoc->efi_last_u_lba + 1, in efi_write()
1265 dk_ioc.dki_length = vtoc->efi_lbasize; in efi_write()
1268 vtoc->efi_lbasize); in efi_write()
1271 efi->efi_gpt_PartitionEntryLBA = LE_64(vtoc->efi_last_u_lba + 1); in efi_write()
1286 (void) write_pmbr(fd, vtoc); in efi_write()
1305 struct vtoc vtoc; in efi_type() local
1312 if (ioctl(fd, DKIOCGVTOC, &vtoc) == -1) in efi_type()
1321 efi_err_check(struct dk_gpt *vtoc) in efi_err_check() argument
1332 reserved = efi_reserved_sectors(vtoc); in efi_err_check()
1333 for (i = 0; i < vtoc->efi_nparts; i++) { in efi_err_check()
1335 if ((vtoc->efi_parts[i].p_tag == V_UNASSIGNED) && in efi_err_check()
1336 (vtoc->efi_parts[i].p_size != 0)) { in efi_err_check()
1339 "of %llu\n", i, vtoc->efi_parts[i].p_size); in efi_err_check()
1341 if (vtoc->efi_parts[i].p_tag == V_UNASSIGNED) { in efi_err_check()
1344 if (vtoc->efi_parts[i].p_tag == V_RESERVED) { in efi_err_check()
1351 if (vtoc->efi_parts[i].p_size != reserved) in efi_err_check()
1356 if ((vtoc->efi_parts[i].p_start < vtoc->efi_first_u_lba) || in efi_err_check()
1357 (vtoc->efi_parts[i].p_start > vtoc->efi_last_u_lba)) { in efi_err_check()
1361 vtoc->efi_parts[i].p_start); in efi_err_check()
1364 vtoc->efi_first_u_lba, in efi_err_check()
1365 vtoc->efi_last_u_lba); in efi_err_check()
1367 if ((vtoc->efi_parts[i].p_start + in efi_err_check()
1368 vtoc->efi_parts[i].p_size < in efi_err_check()
1369 vtoc->efi_first_u_lba) || in efi_err_check()
1370 (vtoc->efi_parts[i].p_start + in efi_err_check()
1371 vtoc->efi_parts[i].p_size > in efi_err_check()
1372 vtoc->efi_last_u_lba + 1)) { in efi_err_check()
1376 vtoc->efi_parts[i].p_start + in efi_err_check()
1377 vtoc->efi_parts[i].p_size); in efi_err_check()
1380 vtoc->efi_first_u_lba, in efi_err_check()
1381 vtoc->efi_last_u_lba); in efi_err_check()
1384 for (j = 0; j < vtoc->efi_nparts; j++) { in efi_err_check()
1385 isize = vtoc->efi_parts[i].p_size; in efi_err_check()
1386 jsize = vtoc->efi_parts[j].p_size; in efi_err_check()
1387 istart = vtoc->efi_parts[i].p_start; in efi_err_check()
1388 jstart = vtoc->efi_parts[j].p_start; in efi_err_check()
1418 efi_auto_sense(int fd, struct dk_gpt **vtoc) in efi_auto_sense() argument
1426 if (efi_alloc_and_init(fd, EFI_NUMPAR, vtoc) != 0) { in efi_auto_sense()
1433 for (i = 0; i < min((*vtoc)->efi_nparts, V_NUMPAR); i++) { in efi_auto_sense()
1434 (*vtoc)->efi_parts[i].p_tag = default_vtoc_map[i].p_tag; in efi_auto_sense()
1435 (*vtoc)->efi_parts[i].p_flag = default_vtoc_map[i].p_flag; in efi_auto_sense()
1436 (*vtoc)->efi_parts[i].p_start = 0; in efi_auto_sense()
1437 (*vtoc)->efi_parts[i].p_size = 0; in efi_auto_sense()
1441 (*vtoc)->efi_parts[0].p_start = in efi_auto_sense()
1442 EFI_MIN_ARRAY_SIZE / (*vtoc)->efi_lbasize + 2; in efi_auto_sense()
1443 (*vtoc)->efi_parts[0].p_size = in efi_auto_sense()
1444 (128 * 1024 * 1024) / (*vtoc)->efi_lbasize; in efi_auto_sense()
1447 (*vtoc)->efi_parts[1].p_start = (*vtoc)->efi_parts[0].p_start + in efi_auto_sense()
1448 (*vtoc)->efi_parts[0].p_size; in efi_auto_sense()
1449 (*vtoc)->efi_parts[1].p_size = (*vtoc)->efi_parts[0].p_size; in efi_auto_sense()
1452 (*vtoc)->efi_parts[2].p_tag = V_UNASSIGNED; in efi_auto_sense()
1455 (*vtoc)->efi_parts[6].p_start = (*vtoc)->efi_parts[1].p_start + in efi_auto_sense()
1456 (*vtoc)->efi_parts[1].p_size; in efi_auto_sense()
1457 (*vtoc)->efi_parts[6].p_size = (*vtoc)->efi_last_u_lba + 1 - in efi_auto_sense()
1458 (*vtoc)->efi_parts[6].p_start - efi_reserved_sectors(*vtoc); in efi_auto_sense()
1461 (*vtoc)->efi_parts[8].p_start = (*vtoc)->efi_parts[6].p_start + in efi_auto_sense()
1462 (*vtoc)->efi_parts[6].p_size; in efi_auto_sense()
1463 (*vtoc)->efi_parts[8].p_size = efi_reserved_sectors(*vtoc); in efi_auto_sense()
1464 (*vtoc)->efi_parts[8].p_tag = V_RESERVED; in efi_auto_sense()