Lines Matching defs:epp

49 static void fdisk_free_ld_nodes(ext_part_t *epp);
50 static void fdisk_ext_place_in_sorted_list(ext_part_t *epp,
52 static void fdisk_ext_remove_from_sorted_list(ext_part_t *epp,
54 static int fdisk_ext_overlapping_parts(ext_part_t *epp, uint32_t begsec,
56 static int fdisk_read_extpart(ext_part_t *epp);
57 static void fdisk_set_CHS_values(ext_part_t *epp, struct ipart *part);
58 static int fdisk_init_master_part_table(ext_part_t *epp);
60 static int fdisk_read_master_part_table(ext_part_t *epp);
63 fdisk_init_disk_geom(ext_part_t *epp)
71 if (ioctl(epp->dev_fd, DKIOCG_VIRTGEOM, &disk_geom)) {
81 epp->disk_geom.virt_cyl = epp->disk_geom.virt_heads =
82 epp->disk_geom.virt_sec = 0;
88 epp->disk_geom.virt_cyl = disk_geom.dkg_ncyl;
89 epp->disk_geom.virt_heads = disk_geom.dkg_nhead;
90 epp->disk_geom.virt_sec = disk_geom.dkg_nsect;
94 if (ioctl(epp->dev_fd, DKIOCG_PHYGEOM, &disk_geom)) {
107 if (ioctl(epp->dev_fd, DKIOCGGEOM, &disk_geom)) {
112 epp->disk_geom.phys_cyl = disk_geom.dkg_ncyl;
113 epp->disk_geom.phys_heads = disk_geom.dkg_nhead;
114 epp->disk_geom.phys_sec = disk_geom.dkg_nsect;
115 epp->disk_geom.alt_cyl = disk_geom.dkg_acyl;
121 if (ioctl(epp->dev_fd, DKIOCGMEDIAINFO, (caddr_t)&disk_info) < 0) {
123 epp->disk_geom.sectsize = 512;
125 epp->disk_geom.sectsize = ((disk_info.dki_lbsize) ?
138 epp->disk_geom.virt_sec = MAX_SECT;
139 epp->disk_geom.virt_heads = MAX_HEAD + 1;
140 epp->disk_geom.virt_cyl = (epp->disk_geom.phys_cyl *
141 epp->disk_geom.phys_heads * epp->disk_geom.phys_sec) /
142 (epp->disk_geom.virt_sec * epp->disk_geom.virt_heads);
152 libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag)
160 *epp = NULL;
233 *epp = temp;
240 rval = fdisk_read_extpart(*epp);
245 *epp = NULL;
251 libfdisk_reset(ext_part_t *epp)
255 fdisk_free_ld_nodes(epp);
256 epp->first_ebr_is_null = 1;
257 epp->corrupt_logical_drives = 0;
258 epp->logical_drive_count = 0;
259 epp->invalid_bb_sig[0] = 0;
260 if (epp->op_flag & FDISK_READ_DISK) {
261 rval = fdisk_read_extpart(epp);
267 libfdisk_fini(ext_part_t **epp)
269 if (*epp == NULL)
272 fdisk_free_ld_nodes(*epp);
273 (void) close((*epp)->dev_fd);
274 if ((*epp)->op_flag & _PRIV_FLAG_NEED_MTABLE_FREE)
275 free((*epp)->mtable);
276 free(*epp);
277 *epp = NULL;
281 fdisk_is_linux_swap(ext_part_t *epp, uint32_t part_start, uint64_t *lsm_offset)
288 int sec_sz = fdisk_get_disk_geom(epp, PHYSGEOM, SSIZE);
309 if (lseek(epp->dev_fd, label_offset, SEEK_SET) < 0) {
314 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) {
335 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) {
340 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) {
363 fdisk_get_solaris_part(ext_part_t *epp, int *pnum, uint32_t *begsec,
366 logical_drive_t *temp = fdisk_get_ld_head(epp);
375 (fdisk_is_linux_swap(epp, part_start,
389 fdisk_get_efi_fs_part(ext_part_t *epp, int *pnum, uint32_t *begsec,
392 logical_drive_t *temp = fdisk_get_ld_head(epp);
410 fdisk_get_part_info(ext_part_t *epp, int pnum, uchar_t *sysid, uint32_t *begsec,
413 logical_drive_t *temp = fdisk_get_ld_head(epp);
452 fdisk_free_ld_nodes(ext_part_t *epp)
456 for (temp = epp->ld_head; temp != NULL; ) {
457 temp = epp->ld_head -> next;
458 free(epp->ld_head);
459 epp->ld_head = temp;
461 epp->ld_head = NULL;
462 epp->sorted_ld_head = NULL;
469 fdisk_ext_find_first_free_sec(ext_part_t *epp, uint32_t *first_free_sec)
474 *first_free_sec = epp->ext_beg_sec;
476 if (epp->ld_head == NULL) {
488 if (epp->ld_head->abs_secnum > epp->ext_beg_sec +
493 while (*first_free_sec <= epp->ext_end_sec) {
494 for (temp = epp->sorted_ld_head; temp != NULL; temp =
502 last_free_sec = fdisk_ext_find_last_free_sec(epp,
517 if (*first_free_sec > epp->ext_end_sec) {
529 fdisk_ext_find_last_free_sec(ext_part_t *epp, uint32_t begsec)
534 last_free_sec = epp->ext_end_sec;
535 for (temp = epp->sorted_ld_head; temp != NULL;
550 fdisk_ext_place_in_sorted_list(ext_part_t *epp, logical_drive_t *newld)
554 if (newld->abs_secnum < epp->sorted_ld_head->abs_secnum) {
555 newld->sorted_next = epp->sorted_ld_head;
556 epp->sorted_ld_head = newld;
559 pre = cur = epp->sorted_ld_head;
572 fdisk_ext_remove_from_sorted_list(ext_part_t *epp, logical_drive_t *delld)
576 if (delld == epp->sorted_ld_head) {
577 epp->sorted_ld_head = delld->sorted_next;
581 pre = cur = epp->sorted_ld_head;
594 fdisk_ext_overlapping_parts(ext_part_t *epp, uint32_t begsec, uint32_t endsec)
599 for (temp = epp->ld_head; temp != NULL; temp = temp->next) {
612 last_free_sec = fdisk_ext_find_last_free_sec(epp, begsec);
624 fdisk_validate_logical_drive(ext_part_t *epp, uint32_t begsec,
630 if (begsec < epp->ext_beg_sec ||
631 begsec > epp->ext_end_sec ||
632 endsec < epp->ext_beg_sec ||
633 endsec > epp->ext_end_sec ||
635 fdisk_ext_overlapping_parts(epp, begsec, endsec)) {
643 fdisk_validate_existing_logical_drive(ext_part_t *epp, uint32_t begsec,
649 if (begsec < epp->ext_beg_sec ||
650 begsec > epp->ext_end_sec ||
651 endsec < epp->ext_beg_sec ||
652 endsec > epp->ext_end_sec ||
665 fdisk_read_extpart(ext_part_t *epp)
672 int sectsize = epp->disk_geom.sectsize;
677 fdp = epp->mtable;
684 epp->ext_beg_sec = secnum;
685 epp->ext_end_sec = secnum + LE_32(fdp->numsect) - 1;
686 epp->ext_beg_cyl =
687 FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec);
688 epp->ext_end_cyl =
689 FDISK_SECT_TO_CYL(epp, epp->ext_end_sec);
693 if (lseek(epp->dev_fd, offset, SEEK_SET) < 0) {
697 if (read(epp->dev_fd, ext_buf, sectsize) <
706 (epp->logical_drive_count == 0)) {
708 epp->first_ebr_is_null = 0;
718 if (epp->ld_head == NULL) {
729 FDISK_SECT_TO_CYL(epp, temp->abs_secnum);
730 temp->endcyl = FDISK_SECT_TO_CYL(epp,
738 if (fdisk_validate_logical_drive(epp,
741 epp->corrupt_logical_drives = 1;
751 if (epp->ld_head == NULL) {
752 epp->ld_head = temp;
753 epp->sorted_ld_head = temp;
755 epp->logical_drive_count = 1;
759 fdisk_ext_place_in_sorted_list(epp,
761 epp->logical_drive_count++;
767 epp->invalid_bb_sig[j++] = lpart;
787 fdisk_init_master_part_table(ext_part_t *epp)
790 if ((epp->mtable = fdisk_alloc_part_table()) == NULL) {
793 rval = fdisk_read_master_part_table(epp);
795 free(epp->mtable);
796 epp->mtable = NULL;
814 fdisk_read_master_part_table(ext_part_t *epp)
821 if (lseek(epp->dev_fd, 0, SEEK_SET) < 0) {
824 if (read(epp->dev_fd, buf, sectsize) < sectsize) {
830 bzero(epp->mtable, cpcnt);
834 bcopy(&buf[FDISK_PART_TABLE_START], epp->mtable, cpcnt);
840 fdisk_ext_part_exists(ext_part_t *epp)
843 struct ipart *part_table = epp->mtable;
864 fdisk_ext_validate_part_start(ext_part_t *epp, uint32_t begcyl,
872 rval = fdisk_ext_find_first_free_sec(epp, &first_free_sec);
877 first_free_cyl = FDISK_SECT_TO_CYL(epp, first_free_sec);
884 if ((begcyl < epp->ext_beg_cyl) || (begcyl > epp->ext_end_cyl)) {
888 for (temp = epp->ld_head; temp != NULL; temp = temp->next) {
894 *begsec = FDISK_CYL_TO_SECT(epp, begcyl);
900 fdisk_change_logical_drive_id(ext_part_t *epp, int pno, uchar_t partid)
906 for (temp = epp->ld_head; i < pno; temp = temp->next, i++)
937 * epp - Extended Partition's state
945 fdisk_change_logical_drive_size(ext_part_t *epp, int pno, uint32_t numsec)
953 if (pno < i || pno >= i + epp->logical_drive_count) {
959 for (tgt = epp->ld_head; i < pno; tgt = tgt->next, i++)
963 if (fdisk_validate_existing_logical_drive(epp, tgt->abs_secnum,
975 fdisk_set_CHS_values(epp, &tgt->parts[0]);
984 for (prev = NULL, cur = epp->ld_head; cur != NULL && cur != tgt;
996 fdisk_set_CHS_values(epp, part);
1021 fdisk_add_logical_drive(ext_part_t *epp, uint32_t begsec, uint32_t endsec,
1031 temp->begcyl = FDISK_SECT_TO_CYL(epp, begsec);
1032 temp->endcyl = FDISK_SECT_TO_CYL(epp, endsec);
1041 fdisk_set_CHS_values(epp, part);
1043 if (epp->ld_head == NULL) {
1044 epp->corrupt_logical_drives = 0;
1045 if (begsec != epp->ext_beg_sec) {
1046 part->relsect = LE_32(begsec - epp->ext_beg_sec);
1052 temp->abs_secnum = epp->ext_beg_sec;
1056 epp->first_ebr_is_null = 0;
1057 epp->ld_head = temp;
1058 epp->sorted_ld_head = temp;
1059 epp->logical_drive_count = 1;
1063 if (temp->abs_secnum == epp->ext_beg_sec) {
1069 for (pre = cur = epp->ld_head; cur != NULL; pre = cur, cur = cur->next)
1075 part->relsect = LE_32(temp->abs_secnum - epp->ext_beg_sec);
1078 fdisk_set_CHS_values(epp, part);
1082 epp->logical_drive_count++;
1083 fdisk_ext_place_in_sorted_list(epp, temp);
1108 fdisk_delete_logical_drive(ext_part_t *epp, int pno)
1114 pre = cur = epp->ld_head;
1120 if (cur == epp->ld_head) {
1125 epp->ld_head = NULL;
1126 epp->sorted_ld_head = NULL;
1127 epp->logical_drive_count = 0;
1128 epp->first_ebr_is_null = 1;
1130 pre = epp->ld_head;
1136 if ((pre->abs_secnum != epp->ext_beg_sec) &&
1137 (cur->abs_secnum == epp->ext_beg_sec + 1)) {
1139 cur->abs_secnum = epp->ext_beg_sec;
1142 epp->ext_beg_sec;
1145 fdisk_ext_remove_from_sorted_list(epp, pre);
1146 epp->ld_head = cur;
1147 epp->ld_head->modified = FDISK_MAJOR_WRITE;
1148 epp->logical_drive_count--;
1154 fdisk_ext_remove_from_sorted_list(epp, cur);
1157 epp->logical_drive_count--;
1162 fdisk_set_CHS_values(ext_part_t *epp, struct ipart *part)
1165 uint32_t sectors = epp->disk_geom.virt_sec;
1166 uint32_t heads = epp->disk_geom.virt_heads;
1168 lba = LE_32(part->relsect) + epp->ext_beg_sec;
1207 read_modify_write_ebr(ext_part_t *epp, unsigned char *ebr_buf,
1211 int sectsize = epp->disk_geom.sectsize;
1215 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) {
1218 if (read(epp->dev_fd, ebr_buf, sectsize) < sectsize) {
1229 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) {
1232 if (write(epp->dev_fd, ebr_buf, sectsize) < sectsize) {
1243 fdisk_mounted_logical_drives(ext_part_t *epp)
1258 if (strstr(epp->device_name, DEFAULT_PATH_PREFIX) == NULL) {
1266 canonp = epp->device_name + strlen(DEFAULT_PATH_PREFIX);
1275 if (fdisk_get_solaris_part(epp, &part, &begsec, &numsec) ==
1317 fdisk_commit_ext_part(ext_part_t *epp)
1322 int sectsize = epp->disk_geom.sectsize;
1332 if (epp->first_ebr_is_null) {
1345 for (temp = epp->ld_head; temp != NULL; temp = temp->next) {
1346 if (temp == epp->ld_head) {
1347 abs_secnum = epp->ext_beg_sec;
1352 rval = read_modify_write_ebr(epp, ebr_buf,
1367 if ((rval = fdisk_mounted_logical_drives(epp)) != 0) {
1377 if (epp->first_ebr_is_null) {
1378 rval = read_modify_write_ebr(epp, ebr_buf, NULL,
1379 epp->ext_beg_sec);
1386 if (epp->logical_drive_count == 0) {
1404 for (temp = epp->ld_head, ld_count = 0; temp != NULL;
1407 abs_secnum = epp->ext_beg_sec;
1412 rval = read_modify_write_ebr(epp, ebr_buf,
1442 rval = ioctl(epp->dev_fd, DKIOCSETEXTPART);
1459 fdisk_init_ext_part(ext_part_t *epp, uint32_t rsect, uint32_t nsect)
1461 epp->first_ebr_is_null = 1;
1462 epp->corrupt_logical_drives = 0;
1463 epp->logical_drive_count = 0;
1464 epp->ext_beg_sec = rsect;
1465 epp->ext_end_sec = rsect + nsect - 1;
1466 epp->ext_beg_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec);
1467 epp->ext_end_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_end_sec);
1468 epp->invalid_bb_sig[0] = 0;
1473 fdisk_delete_ext_part(ext_part_t *epp)
1475 epp->first_ebr_is_null = 1;
1477 fdisk_free_ld_nodes(epp);
1478 epp->logical_drive_count = 0;
1479 epp->corrupt_logical_drives = 0;
1480 epp->invalid_bb_sig[0] = 0;
1485 fdisk_get_disk_geom(ext_part_t *epp, int type, int what)
1491 return ((int)epp->disk_geom.phys_cyl);
1493 return ((int)epp->disk_geom.phys_heads);
1495 return ((int)epp->disk_geom.phys_sec);
1497 return ((int)epp->disk_geom.sectsize);
1499 return ((int)epp->disk_geom.alt_cyl);
1506 return ((int)epp->disk_geom.virt_cyl);
1508 return ((int)epp->disk_geom.virt_heads);
1510 return ((int)epp->disk_geom.virt_sec);
1512 return ((int)epp->disk_geom.sectsize);
1514 return ((int)epp->disk_geom.alt_cyl);
1524 fdisk_invalid_bb_sig(ext_part_t *epp, uchar_t **bbsig_arr)
1526 *bbsig_arr = &(epp->invalid_bb_sig[0]);
1527 return (epp->invalid_bb_sig[0]);