Re: C/H/S from user space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Other than generate CHS addresses that are invalid due to having S > 62, what is this code supposed to do?


Jeff V. Merkey wrote:

Dick,

The model Netware uses for large drives for calculating C/H/S addressed this problem years ago and provides more useful output, since C/H/S is converted into a hieristic which acts almost like an MD5 hash and for a given dimension, does provide unique output for even very large drives.

Code Attached.

Jeff



ULONG SetPartitionTableGeometry(BYTE *hd, BYTE *sec, BYTE *cyl,
               ULONG LBA, ULONG TracksPerCylinder,
               ULONG SectorsPerTrack)
{
   ULONG offset, cylinders, head, sector;

   if (!cyl || !hd || !sec)
      return -1;

   cylinders = (LBA / (TracksPerCylinder * SectorsPerTrack));
   offset = LBA % (TracksPerCylinder * SectorsPerTrack);
   head = (WORD)(offset / SectorsPerTrack);
   sector = (WORD)(offset % SectorsPerTrack) + 1;

   if (cylinders < 1023)
   {
      *sec = (BYTE)sector;
      *hd = (BYTE)head;
      *cyl = (BYTE)(cylinders & 0xff);
      *sec |= (BYTE)((cylinders >> 2) & 0xC0);
   }
   else
   {
   *sec = (BYTE)(SectorsPerTrack | 0xC0);
   *hd = (BYTE)(TracksPerCylinder - 1);
   *cyl = (BYTE)0xFE;
   }

   return 0;
}

ULONG SetPartitionTableValues(struct PartitionTableEntry *Part,
                 ULONG Type,
                 ULONG StartingLBA,
                 ULONG EndingLBA,
                 ULONG Flag,
                 ULONG TracksPerCylinder,
                 ULONG SectorsPerTrack)
{

   Part->SysFlag = (BYTE) Type;
   Part->fBootable = (BYTE) Flag;
   Part->StartLBA = StartingLBA;
   Part->nSectorsTotal = (EndingLBA - StartingLBA) + 1;

SetPartitionTableGeometry(&Part->HeadStart, &Part->SecStart, &Part->CylStart,
                 StartingLBA, TracksPerCylinder, SectorsPerTrack);

   SetPartitionTableGeometry(&Part->HeadEnd, &Part->SecEnd, &Part->CylEnd,
                 EndingLBA, TracksPerCylinder, SectorsPerTrack);

   return 0;

}



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux