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.246 / U:0.152 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site