Lines Matching refs:epp

50 static void fdisk_free_ld_nodes(ext_part_t *epp);
51 static void fdisk_ext_place_in_sorted_list(ext_part_t *epp,
53 static void fdisk_ext_remove_from_sorted_list(ext_part_t *epp,
55 static int fdisk_ext_overlapping_parts(ext_part_t *epp, uint32_t begsec,
57 static int fdisk_read_extpart(ext_part_t *epp);
58 static void fdisk_set_CHS_values(ext_part_t *epp, struct ipart *part);
59 static int fdisk_init_master_part_table(ext_part_t *epp);
61 static int fdisk_read_master_part_table(ext_part_t *epp);
64 fdisk_init_disk_geom(ext_part_t *epp) in fdisk_init_disk_geom() argument
72 if (ioctl(epp->dev_fd, DKIOCG_VIRTGEOM, &disk_geom)) { in fdisk_init_disk_geom()
82 epp->disk_geom.virt_cyl = epp->disk_geom.virt_heads = in fdisk_init_disk_geom()
83 epp->disk_geom.virt_sec = 0; in fdisk_init_disk_geom()
89 epp->disk_geom.virt_cyl = disk_geom.dkg_ncyl; in fdisk_init_disk_geom()
90 epp->disk_geom.virt_heads = disk_geom.dkg_nhead; in fdisk_init_disk_geom()
91 epp->disk_geom.virt_sec = disk_geom.dkg_nsect; in fdisk_init_disk_geom()
95 if (ioctl(epp->dev_fd, DKIOCG_PHYGEOM, &disk_geom)) { in fdisk_init_disk_geom()
108 if (ioctl(epp->dev_fd, DKIOCGGEOM, &disk_geom)) { in fdisk_init_disk_geom()
113 epp->disk_geom.phys_cyl = disk_geom.dkg_ncyl; in fdisk_init_disk_geom()
114 epp->disk_geom.phys_heads = disk_geom.dkg_nhead; in fdisk_init_disk_geom()
115 epp->disk_geom.phys_sec = disk_geom.dkg_nsect; in fdisk_init_disk_geom()
116 epp->disk_geom.alt_cyl = disk_geom.dkg_acyl; in fdisk_init_disk_geom()
122 if (ioctl(epp->dev_fd, DKIOCGMEDIAINFO, (caddr_t)&disk_info) < 0) { in fdisk_init_disk_geom()
124 epp->disk_geom.sectsize = 512; in fdisk_init_disk_geom()
126 epp->disk_geom.sectsize = ((disk_info.dki_lbsize) ? in fdisk_init_disk_geom()
139 epp->disk_geom.virt_sec = MAX_SECT; in fdisk_init_disk_geom()
140 epp->disk_geom.virt_heads = MAX_HEAD + 1; in fdisk_init_disk_geom()
141 epp->disk_geom.virt_cyl = (epp->disk_geom.phys_cyl * in fdisk_init_disk_geom()
142 epp->disk_geom.phys_heads * epp->disk_geom.phys_sec) / in fdisk_init_disk_geom()
143 (epp->disk_geom.virt_sec * epp->disk_geom.virt_heads); in fdisk_init_disk_geom()
153 libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) in libfdisk_init() argument
161 *epp = NULL; in libfdisk_init()
230 *epp = temp; in libfdisk_init()
237 rval = fdisk_read_extpart(*epp); in libfdisk_init()
242 *epp = NULL; in libfdisk_init()
248 libfdisk_reset(ext_part_t *epp) in libfdisk_reset() argument
252 fdisk_free_ld_nodes(epp); in libfdisk_reset()
253 epp->first_ebr_is_null = 1; in libfdisk_reset()
254 epp->corrupt_logical_drives = 0; in libfdisk_reset()
255 epp->logical_drive_count = 0; in libfdisk_reset()
256 epp->invalid_bb_sig[0] = 0; in libfdisk_reset()
257 if (epp->op_flag & FDISK_READ_DISK) { in libfdisk_reset()
258 rval = fdisk_read_extpart(epp); in libfdisk_reset()
264 libfdisk_fini(ext_part_t **epp) in libfdisk_fini() argument
266 if (*epp == NULL) in libfdisk_fini()
269 fdisk_free_ld_nodes(*epp); in libfdisk_fini()
270 (void) close((*epp)->dev_fd); in libfdisk_fini()
271 free(*epp); in libfdisk_fini()
272 *epp = NULL; in libfdisk_fini()
276 fdisk_is_linux_swap(ext_part_t *epp, uint32_t part_start, uint64_t *lsm_offset) in fdisk_is_linux_swap() argument
283 int sec_sz = fdisk_get_disk_geom(epp, PHYSGEOM, SSIZE); in fdisk_is_linux_swap()
304 if (lseek(epp->dev_fd, label_offset, SEEK_SET) < 0) { in fdisk_is_linux_swap()
309 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) { in fdisk_is_linux_swap()
330 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in fdisk_is_linux_swap()
335 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) { in fdisk_is_linux_swap()
358 fdisk_get_solaris_part(ext_part_t *epp, int *pnum, uint32_t *begsec, in fdisk_get_solaris_part() argument
361 logical_drive_t *temp = fdisk_get_ld_head(epp); in fdisk_get_solaris_part()
370 (fdisk_is_linux_swap(epp, part_start, in fdisk_get_solaris_part()
384 fdisk_get_part_info(ext_part_t *epp, int pnum, uchar_t *sysid, uint32_t *begsec, in fdisk_get_part_info() argument
387 logical_drive_t *temp = fdisk_get_ld_head(epp); in fdisk_get_part_info()
426 fdisk_free_ld_nodes(ext_part_t *epp) in fdisk_free_ld_nodes() argument
430 for (temp = epp->ld_head; temp != NULL; ) { in fdisk_free_ld_nodes()
431 temp = epp->ld_head -> next; in fdisk_free_ld_nodes()
432 free(epp->ld_head); in fdisk_free_ld_nodes()
433 epp->ld_head = temp; in fdisk_free_ld_nodes()
435 epp->ld_head = NULL; in fdisk_free_ld_nodes()
436 epp->sorted_ld_head = NULL; in fdisk_free_ld_nodes()
443 fdisk_ext_find_first_free_sec(ext_part_t *epp, uint32_t *first_free_sec) in fdisk_ext_find_first_free_sec() argument
448 *first_free_sec = epp->ext_beg_sec; in fdisk_ext_find_first_free_sec()
450 if (epp->ld_head == NULL) { in fdisk_ext_find_first_free_sec()
462 if (epp->ld_head->abs_secnum > epp->ext_beg_sec + in fdisk_ext_find_first_free_sec()
467 while (*first_free_sec <= epp->ext_end_sec) { in fdisk_ext_find_first_free_sec()
468 for (temp = epp->sorted_ld_head; temp != NULL; temp = in fdisk_ext_find_first_free_sec()
476 last_free_sec = fdisk_ext_find_last_free_sec(epp, in fdisk_ext_find_first_free_sec()
491 if (*first_free_sec > epp->ext_end_sec) { in fdisk_ext_find_first_free_sec()
503 fdisk_ext_find_last_free_sec(ext_part_t *epp, uint32_t begsec) in fdisk_ext_find_last_free_sec() argument
508 last_free_sec = epp->ext_end_sec; in fdisk_ext_find_last_free_sec()
509 for (temp = epp->sorted_ld_head; temp != NULL; in fdisk_ext_find_last_free_sec()
524 fdisk_ext_place_in_sorted_list(ext_part_t *epp, logical_drive_t *newld) in fdisk_ext_place_in_sorted_list() argument
528 if (newld->abs_secnum < epp->sorted_ld_head->abs_secnum) { in fdisk_ext_place_in_sorted_list()
529 newld->sorted_next = epp->sorted_ld_head; in fdisk_ext_place_in_sorted_list()
530 epp->sorted_ld_head = newld; in fdisk_ext_place_in_sorted_list()
533 pre = cur = epp->sorted_ld_head; in fdisk_ext_place_in_sorted_list()
546 fdisk_ext_remove_from_sorted_list(ext_part_t *epp, logical_drive_t *delld) in fdisk_ext_remove_from_sorted_list() argument
550 if (delld == epp->sorted_ld_head) { in fdisk_ext_remove_from_sorted_list()
551 epp->sorted_ld_head = delld->sorted_next; in fdisk_ext_remove_from_sorted_list()
555 pre = cur = epp->sorted_ld_head; in fdisk_ext_remove_from_sorted_list()
568 fdisk_ext_overlapping_parts(ext_part_t *epp, uint32_t begsec, uint32_t endsec) in fdisk_ext_overlapping_parts() argument
573 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_ext_overlapping_parts()
586 last_free_sec = fdisk_ext_find_last_free_sec(epp, begsec); in fdisk_ext_overlapping_parts()
598 fdisk_validate_logical_drive(ext_part_t *epp, uint32_t begsec, in fdisk_validate_logical_drive() argument
604 if (begsec < epp->ext_beg_sec || in fdisk_validate_logical_drive()
605 begsec > epp->ext_end_sec || in fdisk_validate_logical_drive()
606 endsec < epp->ext_beg_sec || in fdisk_validate_logical_drive()
607 endsec > epp->ext_end_sec || in fdisk_validate_logical_drive()
609 fdisk_ext_overlapping_parts(epp, begsec, endsec)) { in fdisk_validate_logical_drive()
621 fdisk_read_extpart(ext_part_t *epp) in fdisk_read_extpart() argument
628 int sectsize = epp->disk_geom.sectsize; in fdisk_read_extpart()
633 fdp = epp->mtable; in fdisk_read_extpart()
640 epp->ext_beg_sec = secnum; in fdisk_read_extpart()
641 epp->ext_end_sec = secnum + LE_32(fdp->numsect) - 1; in fdisk_read_extpart()
642 epp->ext_beg_cyl = in fdisk_read_extpart()
643 FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec); in fdisk_read_extpart()
644 epp->ext_end_cyl = in fdisk_read_extpart()
645 FDISK_SECT_TO_CYL(epp, epp->ext_end_sec); in fdisk_read_extpart()
649 if (lseek(epp->dev_fd, offset, SEEK_SET) < 0) { in fdisk_read_extpart()
652 if (read(epp->dev_fd, ext_buf, sectsize) < in fdisk_read_extpart()
660 (epp->logical_drive_count == 0)) { in fdisk_read_extpart()
662 epp->first_ebr_is_null = 0; in fdisk_read_extpart()
671 if (epp->ld_head == NULL) { in fdisk_read_extpart()
682 FDISK_SECT_TO_CYL(epp, temp->abs_secnum); in fdisk_read_extpart()
683 temp->endcyl = FDISK_SECT_TO_CYL(epp, in fdisk_read_extpart()
691 if (fdisk_validate_logical_drive(epp, in fdisk_read_extpart()
694 epp->corrupt_logical_drives = 1; in fdisk_read_extpart()
703 if (epp->ld_head == NULL) { in fdisk_read_extpart()
704 epp->ld_head = temp; in fdisk_read_extpart()
705 epp->sorted_ld_head = temp; in fdisk_read_extpart()
707 epp->logical_drive_count = 1; in fdisk_read_extpart()
711 fdisk_ext_place_in_sorted_list(epp, in fdisk_read_extpart()
713 epp->logical_drive_count++; in fdisk_read_extpart()
719 epp->invalid_bb_sig[j++] = lpart; in fdisk_read_extpart()
738 fdisk_init_master_part_table(ext_part_t *epp) in fdisk_init_master_part_table() argument
741 if ((epp->mtable = fdisk_alloc_part_table()) == NULL) { in fdisk_init_master_part_table()
744 rval = fdisk_read_master_part_table(epp); in fdisk_init_master_part_table()
770 fdisk_read_master_part_table(ext_part_t *epp) in fdisk_read_master_part_table() argument
779 if (lseek(epp->dev_fd, 0, SEEK_SET) < 0) { in fdisk_read_master_part_table()
782 if (ioctl(epp->dev_fd, DKIOCGMEDIAINFOEXT, &dkmp_ext) < 0) { in fdisk_read_master_part_table()
783 if (ioctl(epp->dev_fd, DKIOCGMEDIAINFO, &dkmp) < 0) { in fdisk_read_master_part_table()
797 if (read(epp->dev_fd, buf, sectsize) < sectsize) { in fdisk_read_master_part_table()
804 bzero(epp->mtable, cpcnt); in fdisk_read_master_part_table()
809 bcopy(&buf[FDISK_PART_TABLE_START], epp->mtable, cpcnt); in fdisk_read_master_part_table()
816 fdisk_ext_part_exists(ext_part_t *epp) in fdisk_ext_part_exists() argument
819 struct ipart *part_table = epp->mtable; in fdisk_ext_part_exists()
840 fdisk_ext_validate_part_start(ext_part_t *epp, uint32_t begcyl, in fdisk_ext_validate_part_start() argument
848 rval = fdisk_ext_find_first_free_sec(epp, &first_free_sec); in fdisk_ext_validate_part_start()
853 first_free_cyl = FDISK_SECT_TO_CYL(epp, first_free_sec); in fdisk_ext_validate_part_start()
860 if ((begcyl < epp->ext_beg_cyl) || (begcyl > epp->ext_end_cyl)) { in fdisk_ext_validate_part_start()
864 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_ext_validate_part_start()
870 *begsec = FDISK_CYL_TO_SECT(epp, begcyl); in fdisk_ext_validate_part_start()
876 fdisk_change_logical_drive_id(ext_part_t *epp, int pno, uchar_t partid) in fdisk_change_logical_drive_id() argument
882 for (temp = epp->ld_head; i < pno; temp = temp->next, i++) in fdisk_change_logical_drive_id()
907 fdisk_add_logical_drive(ext_part_t *epp, uint32_t begsec, uint32_t endsec, in fdisk_add_logical_drive() argument
917 temp->begcyl = FDISK_SECT_TO_CYL(epp, begsec); in fdisk_add_logical_drive()
918 temp->endcyl = FDISK_SECT_TO_CYL(epp, endsec); in fdisk_add_logical_drive()
927 fdisk_set_CHS_values(epp, part); in fdisk_add_logical_drive()
929 if (epp->ld_head == NULL) { in fdisk_add_logical_drive()
930 epp->corrupt_logical_drives = 0; in fdisk_add_logical_drive()
931 if (begsec != epp->ext_beg_sec) { in fdisk_add_logical_drive()
932 part->relsect = LE_32(begsec - epp->ext_beg_sec); in fdisk_add_logical_drive()
938 temp->abs_secnum = epp->ext_beg_sec; in fdisk_add_logical_drive()
942 epp->first_ebr_is_null = 0; in fdisk_add_logical_drive()
943 epp->ld_head = temp; in fdisk_add_logical_drive()
944 epp->sorted_ld_head = temp; in fdisk_add_logical_drive()
945 epp->logical_drive_count = 1; in fdisk_add_logical_drive()
949 if (temp->abs_secnum == epp->ext_beg_sec) { in fdisk_add_logical_drive()
955 for (pre = cur = epp->ld_head; cur != NULL; pre = cur, cur = cur->next) in fdisk_add_logical_drive()
961 part->relsect = LE_32(temp->abs_secnum - epp->ext_beg_sec); in fdisk_add_logical_drive()
964 fdisk_set_CHS_values(epp, part); in fdisk_add_logical_drive()
968 epp->logical_drive_count++; in fdisk_add_logical_drive()
969 fdisk_ext_place_in_sorted_list(epp, temp); in fdisk_add_logical_drive()
994 fdisk_delete_logical_drive(ext_part_t *epp, int pno) in fdisk_delete_logical_drive() argument
1000 pre = cur = epp->ld_head; in fdisk_delete_logical_drive()
1006 if (cur == epp->ld_head) { in fdisk_delete_logical_drive()
1011 epp->ld_head = NULL; in fdisk_delete_logical_drive()
1012 epp->sorted_ld_head = NULL; in fdisk_delete_logical_drive()
1013 epp->logical_drive_count = 0; in fdisk_delete_logical_drive()
1014 epp->first_ebr_is_null = 1; in fdisk_delete_logical_drive()
1016 pre = epp->ld_head; in fdisk_delete_logical_drive()
1022 if ((pre->abs_secnum != epp->ext_beg_sec) && in fdisk_delete_logical_drive()
1023 (cur->abs_secnum == epp->ext_beg_sec + 1)) { in fdisk_delete_logical_drive()
1025 cur->abs_secnum = epp->ext_beg_sec; in fdisk_delete_logical_drive()
1028 epp->ext_beg_sec; in fdisk_delete_logical_drive()
1031 fdisk_ext_remove_from_sorted_list(epp, pre); in fdisk_delete_logical_drive()
1032 epp->ld_head = cur; in fdisk_delete_logical_drive()
1033 epp->ld_head->modified = FDISK_MAJOR_WRITE; in fdisk_delete_logical_drive()
1034 epp->logical_drive_count--; in fdisk_delete_logical_drive()
1040 fdisk_ext_remove_from_sorted_list(epp, cur); in fdisk_delete_logical_drive()
1043 epp->logical_drive_count--; in fdisk_delete_logical_drive()
1048 fdisk_set_CHS_values(ext_part_t *epp, struct ipart *part) in fdisk_set_CHS_values() argument
1051 uint32_t sectors = epp->disk_geom.virt_sec; in fdisk_set_CHS_values()
1052 uint32_t heads = epp->disk_geom.virt_heads; in fdisk_set_CHS_values()
1054 lba = LE_32(part->relsect) + epp->ext_beg_sec; in fdisk_set_CHS_values()
1093 read_modify_write_ebr(ext_part_t *epp, unsigned char *ebr_buf, in read_modify_write_ebr() argument
1097 int sectsize = epp->disk_geom.sectsize; in read_modify_write_ebr()
1101 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in read_modify_write_ebr()
1104 if (read(epp->dev_fd, ebr_buf, sectsize) < sectsize) { in read_modify_write_ebr()
1115 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in read_modify_write_ebr()
1118 if (write(epp->dev_fd, ebr_buf, sectsize) < sectsize) { in read_modify_write_ebr()
1129 fdisk_mounted_logical_drives(ext_part_t *epp) in fdisk_mounted_logical_drives() argument
1144 if (strstr(epp->device_name, DEFAULT_PATH_PREFIX) == NULL) { in fdisk_mounted_logical_drives()
1152 canonp = epp->device_name + strlen(DEFAULT_PATH_PREFIX); in fdisk_mounted_logical_drives()
1161 if (fdisk_get_solaris_part(epp, &part, &begsec, &numsec) == in fdisk_mounted_logical_drives()
1203 fdisk_commit_ext_part(ext_part_t *epp) in fdisk_commit_ext_part() argument
1208 int sectsize = epp->disk_geom.sectsize; in fdisk_commit_ext_part()
1218 if (epp->first_ebr_is_null) { in fdisk_commit_ext_part()
1231 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_commit_ext_part()
1232 if (temp == epp->ld_head) { in fdisk_commit_ext_part()
1233 abs_secnum = epp->ext_beg_sec; in fdisk_commit_ext_part()
1238 rval = read_modify_write_ebr(epp, ebr_buf, in fdisk_commit_ext_part()
1253 if ((rval = fdisk_mounted_logical_drives(epp)) != 0) { in fdisk_commit_ext_part()
1263 if (epp->first_ebr_is_null) { in fdisk_commit_ext_part()
1264 rval = read_modify_write_ebr(epp, ebr_buf, NULL, in fdisk_commit_ext_part()
1265 epp->ext_beg_sec); in fdisk_commit_ext_part()
1272 if (epp->logical_drive_count == 0) { in fdisk_commit_ext_part()
1290 for (temp = epp->ld_head, ld_count = 0; temp != NULL; in fdisk_commit_ext_part()
1293 abs_secnum = epp->ext_beg_sec; in fdisk_commit_ext_part()
1298 rval = read_modify_write_ebr(epp, ebr_buf, in fdisk_commit_ext_part()
1328 rval = ioctl(epp->dev_fd, DKIOCSETEXTPART); in fdisk_commit_ext_part()
1345 fdisk_init_ext_part(ext_part_t *epp, uint32_t rsect, uint32_t nsect) in fdisk_init_ext_part() argument
1347 epp->first_ebr_is_null = 1; in fdisk_init_ext_part()
1348 epp->corrupt_logical_drives = 0; in fdisk_init_ext_part()
1349 epp->logical_drive_count = 0; in fdisk_init_ext_part()
1350 epp->ext_beg_sec = rsect; in fdisk_init_ext_part()
1351 epp->ext_end_sec = rsect + nsect - 1; in fdisk_init_ext_part()
1352 epp->ext_beg_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec); in fdisk_init_ext_part()
1353 epp->ext_end_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_end_sec); in fdisk_init_ext_part()
1354 epp->invalid_bb_sig[0] = 0; in fdisk_init_ext_part()
1359 fdisk_delete_ext_part(ext_part_t *epp) in fdisk_delete_ext_part() argument
1361 epp->first_ebr_is_null = 1; in fdisk_delete_ext_part()
1363 fdisk_free_ld_nodes(epp); in fdisk_delete_ext_part()
1364 epp->logical_drive_count = 0; in fdisk_delete_ext_part()
1365 epp->corrupt_logical_drives = 0; in fdisk_delete_ext_part()
1366 epp->invalid_bb_sig[0] = 0; in fdisk_delete_ext_part()
1371 fdisk_get_disk_geom(ext_part_t *epp, int type, int what) in fdisk_get_disk_geom() argument
1377 return ((int)epp->disk_geom.phys_cyl); in fdisk_get_disk_geom()
1379 return ((int)epp->disk_geom.phys_heads); in fdisk_get_disk_geom()
1381 return ((int)epp->disk_geom.phys_sec); in fdisk_get_disk_geom()
1383 return ((int)epp->disk_geom.sectsize); in fdisk_get_disk_geom()
1385 return ((int)epp->disk_geom.alt_cyl); in fdisk_get_disk_geom()
1392 return ((int)epp->disk_geom.virt_cyl); in fdisk_get_disk_geom()
1394 return ((int)epp->disk_geom.virt_heads); in fdisk_get_disk_geom()
1396 return ((int)epp->disk_geom.virt_sec); in fdisk_get_disk_geom()
1398 return ((int)epp->disk_geom.sectsize); in fdisk_get_disk_geom()
1400 return ((int)epp->disk_geom.alt_cyl); in fdisk_get_disk_geom()
1410 fdisk_invalid_bb_sig(ext_part_t *epp, uchar_t **bbsig_arr) in fdisk_invalid_bb_sig() argument
1412 *bbsig_arr = &(epp->invalid_bb_sig[0]); in fdisk_invalid_bb_sig()
1413 return (epp->invalid_bb_sig[0]); in fdisk_invalid_bb_sig()