[BACK]Return to mbr.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / distrib / utils / sysinst

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/distrib/utils/sysinst/Attic/mbr.c between version 1.88.2.2 and 1.89

version 1.88.2.2, 2012/10/30 18:48:52 version 1.89, 2012/01/05 21:29:24
Line 113  static int get_mapping(struct mbr_partit
Line 113  static int get_mapping(struct mbr_partit
                             daddr_t *);                              daddr_t *);
 static void convert_mbr_chs(int, int, int, uint8_t *, uint8_t *,  static void convert_mbr_chs(int, int, int, uint8_t *, uint8_t *,
                                  uint8_t *, uint32_t);                                   uint8_t *, uint32_t);
 static void get_ptn_alignment(struct mbr_partition *);  
   
 static unsigned int ptn_alignment;  
 static unsigned int ptn_0_offset;  
   
 /*  /*
  * Notes on the extended partition editor.   * Notes on the extended partition editor.
Line 466  set_mbr_type(menudesc *m, void *arg)
Line 462  set_mbr_type(menudesc *m, void *arg)
                         return 0;                          return 0;
                 mbri->extended = ext;                  mbri->extended = ext;
                 ext->sector = mbrp->mbrp_start;                  ext->sector = mbrp->mbrp_start;
                 ext->mbr.mbr_parts[0].mbrp_start = ptn_0_offset;                  ext->mbr.mbr_parts[0].mbrp_start = bsec;
                 ext->mbr.mbr_parts[0].mbrp_size =                  ext->mbr.mbr_parts[0].mbrp_size = mbrp->mbrp_size - bsec;
                     mbrp->mbrp_size - ptn_0_offset;  
         }          }
         mbrp->mbrp_type = type;          mbrp->mbrp_type = type;
   
Line 747  edit_mbr_size(menudesc *m, void *arg)
Line 742  edit_mbr_size(menudesc *m, void *arg)
                         /* If unchanged, don't re-round size */                          /* If unchanged, don't re-round size */
                         new = dflt;                          new = dflt;
                 else {                  else {
                         /* Round end to the partition alignment */                          /* Round end to cylinder boundary */
                         if (sizemult != 1) {                          if (sizemult != 1) {
                                 new *= sizemult;                                  new *= sizemult;
                                 new += rounddown(start, ptn_alignment);                                  new += rounddown(start, current_cylsize);
                                 new = roundup(new, ptn_alignment);                                  new = roundup(new, current_cylsize);
                                 new -= start;                                  new -= start;
                                 while (new <= 0)                                  while (new <= 0)
                                         new += ptn_alignment;                                          new += current_cylsize;
                         }                          }
                 }                  }
                 if (new > max)                  if (new > max)
Line 1242  mbr_use_wholedisk(mbr_info_t *mbri)
Line 1237  mbr_use_wholedisk(mbr_info_t *mbri)
         memset(&mbri->mbrb, 0, sizeof mbri->mbrb);          memset(&mbri->mbrb, 0, sizeof mbri->mbrb);
 #endif  #endif
         part[0].mbrp_type = MBR_PTYPE_NETBSD;          part[0].mbrp_type = MBR_PTYPE_NETBSD;
         part[0].mbrp_size = dlsize - ptn_0_offset;          part[0].mbrp_size = dlsize - bsec;
         part[0].mbrp_start = ptn_0_offset;          part[0].mbrp_start = bsec;
         part[0].mbrp_flag = MBR_PFLAG_ACTIVE;          part[0].mbrp_flag = MBR_PFLAG_ACTIVE;
   
         ptstart = ptn_0_offset;          ptstart = bsec;
         ptsize = dlsize - ptn_0_offset;          ptsize = dlsize - bsec;
         return 1;          return 1;
 }  }
   
Line 1271  edit_mbr(mbr_info_t *mbri)
Line 1266  edit_mbr(mbr_info_t *mbri)
         /* Ask full/part */          /* Ask full/part */
   
         part = &mbrs->mbr_parts[0];          part = &mbrs->mbr_parts[0];
         get_ptn_alignment(part);        /* update ptn_alignment */  
         msg_display(MSG_fullpart, diskdev);          msg_display(MSG_fullpart, diskdev);
         process_menu(MENU_fullpart, &usefull);          process_menu(MENU_fullpart, &usefull);
   
Line 1456  read_mbr(const char *disk, mbr_info_t *m
Line 1450  read_mbr(const char *disk, mbr_info_t *m
          */           */
         if (bsec == 0)          if (bsec == 0)
                 bsec = dlsec;                  bsec = dlsec;
         ptn_0_offset = bsec;  
         /* use 1MB default offset on large disks as fdisk(8) */  
         if (dlsize > 2048 * 1024 * 128)  
                 ptn_0_offset = 2048;  
   
         memset(mbri, 0, sizeof *mbri);          memset(mbri, 0, sizeof *mbri);
   
Line 1477  read_mbr(const char *disk, mbr_info_t *m
Line 1467  read_mbr(const char *disk, mbr_info_t *m
                         break;                          break;
   
                 mbrp = &mbrs->mbr_parts[0];                  mbrp = &mbrs->mbr_parts[0];
                 if (ext_base == 0) {                  if (ext_base != 0) {
                         get_ptn_alignment(mbrp);        /* get ptn_0_offset */  
                 } else {  
                         /* sanity check extended chain */                          /* sanity check extended chain */
                         if (MBR_IS_EXTENDED(mbrp[0].mbrp_type))                          if (MBR_IS_EXTENDED(mbrp[0].mbrp_type))
                                 break;                                  break;
Line 1559  read_mbr(const char *disk, mbr_info_t *m
Line 1547  read_mbr(const char *disk, mbr_info_t *m
                                 ext->sector = base;                                  ext->sector = base;
                                 ext->mbr.mbr_magic = htole16(MBR_MAGIC);                                  ext->mbr.mbr_magic = htole16(MBR_MAGIC);
                                 ext->mbr.mbr_parts[1] = mbrp[1];                                  ext->mbr.mbr_parts[1] = mbrp[1];
                                 ext->mbr.mbr_parts[0].mbrp_start = ptn_0_offset;                                  ext->mbr.mbr_parts[0].mbrp_start = bsec;
                                 ext->mbr.mbr_parts[0].mbrp_size =                                  ext->mbr.mbr_parts[0].mbrp_size =
                                     ext_base + limit - base - ptn_0_offset;                                      ext_base + limit - base - bsec;
                                 mbrp[1].mbrp_type = MBR_PTYPE_EXT;                                  mbrp[1].mbrp_type = MBR_PTYPE_EXT;
                                 mbrp[1].mbrp_start = base - ext_base;                                  mbrp[1].mbrp_start = base - ext_base;
                                 mbrp[1].mbrp_size = limit - mbrp[1].mbrp_start;                                  mbrp[1].mbrp_size = limit - mbrp[1].mbrp_start;
Line 1862  get_mapping(struct mbr_partition *parts,
Line 1850  get_mapping(struct mbr_partition *parts,
   
         return 0;          return 0;
 }  }
   
 /*  
  * Determine partition boundary alignment as fdisk(8) does.  
  */  
 static void  
 get_ptn_alignment(struct mbr_partition *mbrp0)  
 {  
         uint32_t ptn_0_base, ptn_0_limit;  
   
         /* Default to using 'traditional' cylinder alignment */  
         ptn_alignment = bhead * bsec;  
         ptn_0_offset = bsec;  
   
         if (mbrp0->mbrp_type != 0) {  
                 /* Try to copy offset of first partition */  
                 ptn_0_base = le32toh(mbrp0->mbrp_start);  
                 ptn_0_limit = ptn_0_base + le32toh(mbrp0->mbrp_size);  
                 if (!(ptn_0_limit & 2047)) {  
                         /* Partition ends on a 1MB boundary, align to 1MB */  
                         ptn_alignment = 2048;  
                         if (ptn_0_base <= 2048  
                             && !(ptn_0_base & (ptn_0_base - 1))) {  
                                 /* ptn_base is a power of 2, use it */  
                                 ptn_0_offset = ptn_0_base;  
                         }  
                 }  
         } else {  
                 /* Use 1MB offset for large (>128GB) disks */  
                 if (dlsize > 2048 * 1024 * 128)  
                         ptn_alignment = 2048;  
                         ptn_0_offset = 2048;  
         }  
 }  

Legend:
Removed from v.1.88.2.2  
changed lines
  Added in v.1.89

CVSweb <webmaster@jp.NetBSD.org>