Lines Matching refs: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) in fdisk_init_disk_geom() argument
71 if (ioctl(epp->dev_fd, DKIOCG_VIRTGEOM, &disk_geom)) { in fdisk_init_disk_geom()
81 epp->disk_geom.virt_cyl = epp->disk_geom.virt_heads = in fdisk_init_disk_geom()
82 epp->disk_geom.virt_sec = 0; in fdisk_init_disk_geom()
88 epp->disk_geom.virt_cyl = disk_geom.dkg_ncyl; in fdisk_init_disk_geom()
89 epp->disk_geom.virt_heads = disk_geom.dkg_nhead; in fdisk_init_disk_geom()
90 epp->disk_geom.virt_sec = disk_geom.dkg_nsect; in fdisk_init_disk_geom()
94 if (ioctl(epp->dev_fd, DKIOCG_PHYGEOM, &disk_geom)) { in fdisk_init_disk_geom()
107 if (ioctl(epp->dev_fd, DKIOCGGEOM, &disk_geom)) { in fdisk_init_disk_geom()
112 epp->disk_geom.phys_cyl = disk_geom.dkg_ncyl; in fdisk_init_disk_geom()
113 epp->disk_geom.phys_heads = disk_geom.dkg_nhead; in fdisk_init_disk_geom()
114 epp->disk_geom.phys_sec = disk_geom.dkg_nsect; in fdisk_init_disk_geom()
115 epp->disk_geom.alt_cyl = disk_geom.dkg_acyl; in fdisk_init_disk_geom()
121 if (ioctl(epp->dev_fd, DKIOCGMEDIAINFO, (caddr_t)&disk_info) < 0) { in fdisk_init_disk_geom()
123 epp->disk_geom.sectsize = 512; in fdisk_init_disk_geom()
125 epp->disk_geom.sectsize = ((disk_info.dki_lbsize) ? in fdisk_init_disk_geom()
138 epp->disk_geom.virt_sec = MAX_SECT; in fdisk_init_disk_geom()
139 epp->disk_geom.virt_heads = MAX_HEAD + 1; in fdisk_init_disk_geom()
140 epp->disk_geom.virt_cyl = (epp->disk_geom.phys_cyl * in fdisk_init_disk_geom()
141 epp->disk_geom.phys_heads * epp->disk_geom.phys_sec) / in fdisk_init_disk_geom()
142 (epp->disk_geom.virt_sec * epp->disk_geom.virt_heads); in fdisk_init_disk_geom()
152 libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) in libfdisk_init() argument
160 *epp = NULL; in libfdisk_init()
229 *epp = temp; in libfdisk_init()
236 rval = fdisk_read_extpart(*epp); in libfdisk_init()
241 *epp = NULL; in libfdisk_init()
247 libfdisk_reset(ext_part_t *epp) in libfdisk_reset() argument
251 fdisk_free_ld_nodes(epp); in libfdisk_reset()
252 epp->first_ebr_is_null = 1; in libfdisk_reset()
253 epp->corrupt_logical_drives = 0; in libfdisk_reset()
254 epp->logical_drive_count = 0; in libfdisk_reset()
255 epp->invalid_bb_sig[0] = 0; in libfdisk_reset()
256 if (epp->op_flag & FDISK_READ_DISK) { in libfdisk_reset()
257 rval = fdisk_read_extpart(epp); in libfdisk_reset()
263 libfdisk_fini(ext_part_t **epp) in libfdisk_fini() argument
265 if (*epp == NULL) in libfdisk_fini()
268 fdisk_free_ld_nodes(*epp); in libfdisk_fini()
269 (void) close((*epp)->dev_fd); in libfdisk_fini()
270 free(*epp); in libfdisk_fini()
271 *epp = NULL; in libfdisk_fini()
275 fdisk_is_linux_swap(ext_part_t *epp, uint32_t part_start, uint64_t *lsm_offset) in fdisk_is_linux_swap() argument
282 int sec_sz = fdisk_get_disk_geom(epp, PHYSGEOM, SSIZE); in fdisk_is_linux_swap()
303 if (lseek(epp->dev_fd, label_offset, SEEK_SET) < 0) { in fdisk_is_linux_swap()
308 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) { in fdisk_is_linux_swap()
329 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in fdisk_is_linux_swap()
334 if ((rval = read(epp->dev_fd, buf, sec_sz)) < sec_sz) { in fdisk_is_linux_swap()
357 fdisk_get_solaris_part(ext_part_t *epp, int *pnum, uint32_t *begsec, in fdisk_get_solaris_part() argument
360 logical_drive_t *temp = fdisk_get_ld_head(epp); in fdisk_get_solaris_part()
369 (fdisk_is_linux_swap(epp, part_start, in fdisk_get_solaris_part()
383 fdisk_get_part_info(ext_part_t *epp, int pnum, uchar_t *sysid, uint32_t *begsec, in fdisk_get_part_info() argument
386 logical_drive_t *temp = fdisk_get_ld_head(epp); in fdisk_get_part_info()
425 fdisk_free_ld_nodes(ext_part_t *epp) in fdisk_free_ld_nodes() argument
429 for (temp = epp->ld_head; temp != NULL; ) { in fdisk_free_ld_nodes()
430 temp = epp->ld_head -> next; in fdisk_free_ld_nodes()
431 free(epp->ld_head); in fdisk_free_ld_nodes()
432 epp->ld_head = temp; in fdisk_free_ld_nodes()
434 epp->ld_head = NULL; in fdisk_free_ld_nodes()
435 epp->sorted_ld_head = NULL; in fdisk_free_ld_nodes()
442 fdisk_ext_find_first_free_sec(ext_part_t *epp, uint32_t *first_free_sec) in fdisk_ext_find_first_free_sec() argument
447 *first_free_sec = epp->ext_beg_sec; in fdisk_ext_find_first_free_sec()
449 if (epp->ld_head == NULL) { in fdisk_ext_find_first_free_sec()
461 if (epp->ld_head->abs_secnum > epp->ext_beg_sec + in fdisk_ext_find_first_free_sec()
466 while (*first_free_sec <= epp->ext_end_sec) { in fdisk_ext_find_first_free_sec()
467 for (temp = epp->sorted_ld_head; temp != NULL; temp = in fdisk_ext_find_first_free_sec()
475 last_free_sec = fdisk_ext_find_last_free_sec(epp, in fdisk_ext_find_first_free_sec()
490 if (*first_free_sec > epp->ext_end_sec) { in fdisk_ext_find_first_free_sec()
502 fdisk_ext_find_last_free_sec(ext_part_t *epp, uint32_t begsec) in fdisk_ext_find_last_free_sec() argument
507 last_free_sec = epp->ext_end_sec; in fdisk_ext_find_last_free_sec()
508 for (temp = epp->sorted_ld_head; temp != NULL; in fdisk_ext_find_last_free_sec()
523 fdisk_ext_place_in_sorted_list(ext_part_t *epp, logical_drive_t *newld) in fdisk_ext_place_in_sorted_list() argument
527 if (newld->abs_secnum < epp->sorted_ld_head->abs_secnum) { in fdisk_ext_place_in_sorted_list()
528 newld->sorted_next = epp->sorted_ld_head; in fdisk_ext_place_in_sorted_list()
529 epp->sorted_ld_head = newld; in fdisk_ext_place_in_sorted_list()
532 pre = cur = epp->sorted_ld_head; in fdisk_ext_place_in_sorted_list()
545 fdisk_ext_remove_from_sorted_list(ext_part_t *epp, logical_drive_t *delld) in fdisk_ext_remove_from_sorted_list() argument
549 if (delld == epp->sorted_ld_head) { in fdisk_ext_remove_from_sorted_list()
550 epp->sorted_ld_head = delld->sorted_next; in fdisk_ext_remove_from_sorted_list()
554 pre = cur = epp->sorted_ld_head; in fdisk_ext_remove_from_sorted_list()
567 fdisk_ext_overlapping_parts(ext_part_t *epp, uint32_t begsec, uint32_t endsec) in fdisk_ext_overlapping_parts() argument
572 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_ext_overlapping_parts()
585 last_free_sec = fdisk_ext_find_last_free_sec(epp, begsec); in fdisk_ext_overlapping_parts()
597 fdisk_validate_logical_drive(ext_part_t *epp, uint32_t begsec, in fdisk_validate_logical_drive() argument
603 if (begsec < epp->ext_beg_sec || in fdisk_validate_logical_drive()
604 begsec > epp->ext_end_sec || in fdisk_validate_logical_drive()
605 endsec < epp->ext_beg_sec || in fdisk_validate_logical_drive()
606 endsec > epp->ext_end_sec || in fdisk_validate_logical_drive()
608 fdisk_ext_overlapping_parts(epp, begsec, endsec)) { in fdisk_validate_logical_drive()
620 fdisk_read_extpart(ext_part_t *epp) in fdisk_read_extpart() argument
627 int sectsize = epp->disk_geom.sectsize; in fdisk_read_extpart()
632 fdp = epp->mtable; in fdisk_read_extpart()
639 epp->ext_beg_sec = secnum; in fdisk_read_extpart()
640 epp->ext_end_sec = secnum + LE_32(fdp->numsect) - 1; in fdisk_read_extpart()
641 epp->ext_beg_cyl = in fdisk_read_extpart()
642 FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec); in fdisk_read_extpart()
643 epp->ext_end_cyl = in fdisk_read_extpart()
644 FDISK_SECT_TO_CYL(epp, epp->ext_end_sec); in fdisk_read_extpart()
648 if (lseek(epp->dev_fd, offset, SEEK_SET) < 0) { in fdisk_read_extpart()
651 if (read(epp->dev_fd, ext_buf, sectsize) < in fdisk_read_extpart()
659 (epp->logical_drive_count == 0)) { in fdisk_read_extpart()
661 epp->first_ebr_is_null = 0; in fdisk_read_extpart()
670 if (epp->ld_head == NULL) { in fdisk_read_extpart()
681 FDISK_SECT_TO_CYL(epp, temp->abs_secnum); in fdisk_read_extpart()
682 temp->endcyl = FDISK_SECT_TO_CYL(epp, in fdisk_read_extpart()
690 if (fdisk_validate_logical_drive(epp, in fdisk_read_extpart()
693 epp->corrupt_logical_drives = 1; in fdisk_read_extpart()
702 if (epp->ld_head == NULL) { in fdisk_read_extpart()
703 epp->ld_head = temp; in fdisk_read_extpart()
704 epp->sorted_ld_head = temp; in fdisk_read_extpart()
706 epp->logical_drive_count = 1; in fdisk_read_extpart()
710 fdisk_ext_place_in_sorted_list(epp, in fdisk_read_extpart()
712 epp->logical_drive_count++; in fdisk_read_extpart()
718 epp->invalid_bb_sig[j++] = lpart; in fdisk_read_extpart()
737 fdisk_init_master_part_table(ext_part_t *epp) in fdisk_init_master_part_table() argument
740 if ((epp->mtable = fdisk_alloc_part_table()) == NULL) { in fdisk_init_master_part_table()
743 rval = fdisk_read_master_part_table(epp); in fdisk_init_master_part_table()
769 fdisk_read_master_part_table(ext_part_t *epp) in fdisk_read_master_part_table() argument
776 if (lseek(epp->dev_fd, 0, SEEK_SET) < 0) { in fdisk_read_master_part_table()
779 if (read(epp->dev_fd, buf, sectsize) < sectsize) { in fdisk_read_master_part_table()
785 bzero(epp->mtable, cpcnt); in fdisk_read_master_part_table()
789 bcopy(&buf[FDISK_PART_TABLE_START], epp->mtable, cpcnt); in fdisk_read_master_part_table()
795 fdisk_ext_part_exists(ext_part_t *epp) in fdisk_ext_part_exists() argument
798 struct ipart *part_table = epp->mtable; in fdisk_ext_part_exists()
819 fdisk_ext_validate_part_start(ext_part_t *epp, uint32_t begcyl, in fdisk_ext_validate_part_start() argument
827 rval = fdisk_ext_find_first_free_sec(epp, &first_free_sec); in fdisk_ext_validate_part_start()
832 first_free_cyl = FDISK_SECT_TO_CYL(epp, first_free_sec); in fdisk_ext_validate_part_start()
839 if ((begcyl < epp->ext_beg_cyl) || (begcyl > epp->ext_end_cyl)) { in fdisk_ext_validate_part_start()
843 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_ext_validate_part_start()
849 *begsec = FDISK_CYL_TO_SECT(epp, begcyl); in fdisk_ext_validate_part_start()
855 fdisk_change_logical_drive_id(ext_part_t *epp, int pno, uchar_t partid) in fdisk_change_logical_drive_id() argument
861 for (temp = epp->ld_head; i < pno; temp = temp->next, i++) in fdisk_change_logical_drive_id()
886 fdisk_add_logical_drive(ext_part_t *epp, uint32_t begsec, uint32_t endsec, in fdisk_add_logical_drive() argument
896 temp->begcyl = FDISK_SECT_TO_CYL(epp, begsec); in fdisk_add_logical_drive()
897 temp->endcyl = FDISK_SECT_TO_CYL(epp, endsec); in fdisk_add_logical_drive()
906 fdisk_set_CHS_values(epp, part); in fdisk_add_logical_drive()
908 if (epp->ld_head == NULL) { in fdisk_add_logical_drive()
909 epp->corrupt_logical_drives = 0; in fdisk_add_logical_drive()
910 if (begsec != epp->ext_beg_sec) { in fdisk_add_logical_drive()
911 part->relsect = LE_32(begsec - epp->ext_beg_sec); in fdisk_add_logical_drive()
917 temp->abs_secnum = epp->ext_beg_sec; in fdisk_add_logical_drive()
921 epp->first_ebr_is_null = 0; in fdisk_add_logical_drive()
922 epp->ld_head = temp; in fdisk_add_logical_drive()
923 epp->sorted_ld_head = temp; in fdisk_add_logical_drive()
924 epp->logical_drive_count = 1; in fdisk_add_logical_drive()
928 if (temp->abs_secnum == epp->ext_beg_sec) { in fdisk_add_logical_drive()
934 for (pre = cur = epp->ld_head; cur != NULL; pre = cur, cur = cur->next) in fdisk_add_logical_drive()
940 part->relsect = LE_32(temp->abs_secnum - epp->ext_beg_sec); in fdisk_add_logical_drive()
943 fdisk_set_CHS_values(epp, part); in fdisk_add_logical_drive()
947 epp->logical_drive_count++; in fdisk_add_logical_drive()
948 fdisk_ext_place_in_sorted_list(epp, temp); in fdisk_add_logical_drive()
973 fdisk_delete_logical_drive(ext_part_t *epp, int pno) in fdisk_delete_logical_drive() argument
979 pre = cur = epp->ld_head; in fdisk_delete_logical_drive()
985 if (cur == epp->ld_head) { in fdisk_delete_logical_drive()
990 epp->ld_head = NULL; in fdisk_delete_logical_drive()
991 epp->sorted_ld_head = NULL; in fdisk_delete_logical_drive()
992 epp->logical_drive_count = 0; in fdisk_delete_logical_drive()
993 epp->first_ebr_is_null = 1; in fdisk_delete_logical_drive()
995 pre = epp->ld_head; in fdisk_delete_logical_drive()
1001 if ((pre->abs_secnum != epp->ext_beg_sec) && in fdisk_delete_logical_drive()
1002 (cur->abs_secnum == epp->ext_beg_sec + 1)) { in fdisk_delete_logical_drive()
1004 cur->abs_secnum = epp->ext_beg_sec; in fdisk_delete_logical_drive()
1007 epp->ext_beg_sec; in fdisk_delete_logical_drive()
1010 fdisk_ext_remove_from_sorted_list(epp, pre); in fdisk_delete_logical_drive()
1011 epp->ld_head = cur; in fdisk_delete_logical_drive()
1012 epp->ld_head->modified = FDISK_MAJOR_WRITE; in fdisk_delete_logical_drive()
1013 epp->logical_drive_count--; in fdisk_delete_logical_drive()
1019 fdisk_ext_remove_from_sorted_list(epp, cur); in fdisk_delete_logical_drive()
1022 epp->logical_drive_count--; in fdisk_delete_logical_drive()
1027 fdisk_set_CHS_values(ext_part_t *epp, struct ipart *part) in fdisk_set_CHS_values() argument
1030 uint32_t sectors = epp->disk_geom.virt_sec; in fdisk_set_CHS_values()
1031 uint32_t heads = epp->disk_geom.virt_heads; in fdisk_set_CHS_values()
1033 lba = LE_32(part->relsect) + epp->ext_beg_sec; in fdisk_set_CHS_values()
1072 read_modify_write_ebr(ext_part_t *epp, unsigned char *ebr_buf, in read_modify_write_ebr() argument
1076 int sectsize = epp->disk_geom.sectsize; in read_modify_write_ebr()
1080 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in read_modify_write_ebr()
1083 if (read(epp->dev_fd, ebr_buf, sectsize) < sectsize) { in read_modify_write_ebr()
1094 if (lseek(epp->dev_fd, seek_offset, SEEK_SET) < 0) { in read_modify_write_ebr()
1097 if (write(epp->dev_fd, ebr_buf, sectsize) < sectsize) { in read_modify_write_ebr()
1108 fdisk_mounted_logical_drives(ext_part_t *epp) in fdisk_mounted_logical_drives() argument
1123 if (strstr(epp->device_name, DEFAULT_PATH_PREFIX) == NULL) { in fdisk_mounted_logical_drives()
1131 canonp = epp->device_name + strlen(DEFAULT_PATH_PREFIX); in fdisk_mounted_logical_drives()
1140 if (fdisk_get_solaris_part(epp, &part, &begsec, &numsec) == in fdisk_mounted_logical_drives()
1182 fdisk_commit_ext_part(ext_part_t *epp) in fdisk_commit_ext_part() argument
1187 int sectsize = epp->disk_geom.sectsize; in fdisk_commit_ext_part()
1197 if (epp->first_ebr_is_null) { in fdisk_commit_ext_part()
1210 for (temp = epp->ld_head; temp != NULL; temp = temp->next) { in fdisk_commit_ext_part()
1211 if (temp == epp->ld_head) { in fdisk_commit_ext_part()
1212 abs_secnum = epp->ext_beg_sec; in fdisk_commit_ext_part()
1217 rval = read_modify_write_ebr(epp, ebr_buf, in fdisk_commit_ext_part()
1232 if ((rval = fdisk_mounted_logical_drives(epp)) != 0) { in fdisk_commit_ext_part()
1242 if (epp->first_ebr_is_null) { in fdisk_commit_ext_part()
1243 rval = read_modify_write_ebr(epp, ebr_buf, NULL, in fdisk_commit_ext_part()
1244 epp->ext_beg_sec); in fdisk_commit_ext_part()
1251 if (epp->logical_drive_count == 0) { in fdisk_commit_ext_part()
1269 for (temp = epp->ld_head, ld_count = 0; temp != NULL; in fdisk_commit_ext_part()
1272 abs_secnum = epp->ext_beg_sec; in fdisk_commit_ext_part()
1277 rval = read_modify_write_ebr(epp, ebr_buf, in fdisk_commit_ext_part()
1307 rval = ioctl(epp->dev_fd, DKIOCSETEXTPART); in fdisk_commit_ext_part()
1324 fdisk_init_ext_part(ext_part_t *epp, uint32_t rsect, uint32_t nsect) in fdisk_init_ext_part() argument
1326 epp->first_ebr_is_null = 1; in fdisk_init_ext_part()
1327 epp->corrupt_logical_drives = 0; in fdisk_init_ext_part()
1328 epp->logical_drive_count = 0; in fdisk_init_ext_part()
1329 epp->ext_beg_sec = rsect; in fdisk_init_ext_part()
1330 epp->ext_end_sec = rsect + nsect - 1; in fdisk_init_ext_part()
1331 epp->ext_beg_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_beg_sec); in fdisk_init_ext_part()
1332 epp->ext_end_cyl = FDISK_SECT_TO_CYL(epp, epp->ext_end_sec); in fdisk_init_ext_part()
1333 epp->invalid_bb_sig[0] = 0; in fdisk_init_ext_part()
1338 fdisk_delete_ext_part(ext_part_t *epp) in fdisk_delete_ext_part() argument
1340 epp->first_ebr_is_null = 1; in fdisk_delete_ext_part()
1342 fdisk_free_ld_nodes(epp); in fdisk_delete_ext_part()
1343 epp->logical_drive_count = 0; in fdisk_delete_ext_part()
1344 epp->corrupt_logical_drives = 0; in fdisk_delete_ext_part()
1345 epp->invalid_bb_sig[0] = 0; in fdisk_delete_ext_part()
1350 fdisk_get_disk_geom(ext_part_t *epp, int type, int what) in fdisk_get_disk_geom() argument
1356 return ((int)epp->disk_geom.phys_cyl); in fdisk_get_disk_geom()
1358 return ((int)epp->disk_geom.phys_heads); in fdisk_get_disk_geom()
1360 return ((int)epp->disk_geom.phys_sec); in fdisk_get_disk_geom()
1362 return ((int)epp->disk_geom.sectsize); in fdisk_get_disk_geom()
1364 return ((int)epp->disk_geom.alt_cyl); in fdisk_get_disk_geom()
1371 return ((int)epp->disk_geom.virt_cyl); in fdisk_get_disk_geom()
1373 return ((int)epp->disk_geom.virt_heads); in fdisk_get_disk_geom()
1375 return ((int)epp->disk_geom.virt_sec); in fdisk_get_disk_geom()
1377 return ((int)epp->disk_geom.sectsize); in fdisk_get_disk_geom()
1379 return ((int)epp->disk_geom.alt_cyl); in fdisk_get_disk_geom()
1389 fdisk_invalid_bb_sig(ext_part_t *epp, uchar_t **bbsig_arr) in fdisk_invalid_bb_sig() argument
1391 *bbsig_arr = &(epp->invalid_bb_sig[0]); in fdisk_invalid_bb_sig()
1392 return (epp->invalid_bb_sig[0]); in fdisk_invalid_bb_sig()