lkml.org 
[lkml]   [2006]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: C/H/S from user space
    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 majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-02-17 21:03    [W:0.031 / U:31.128 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site