summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>1998-04-09 17:46:45 +0000
committersos <sos@FreeBSD.org>1998-04-09 17:46:45 +0000
commit42733ffc1682bbf2d0338f29fd55c19da9294ff5 (patch)
tree7e4d616b7b774daa776e0f15414c7ef29f483daa
parentdc4e7fd7a91d6daa7a2f1d63f600b6a41dd69b98 (diff)
downloadFreeBSD-src-42733ffc1682bbf2d0338f29fd55c19da9294ff5.zip
FreeBSD-src-42733ffc1682bbf2d0338f29fd55c19da9294ff5.tar.gz
Try to use the "right" CHS translations of a LBA device.
Drives bigger than 8.4G is still in question until I get a drive to test on...
-rw-r--r--sys/i386/isa/wd.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c
index 552f1e3..6bd2cce 100644
--- a/sys/i386/isa/wd.c
+++ b/sys/i386/isa/wd.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)wd.c 7.2 (Berkeley) 5/9/91
- * $Id: wd.c,v 1.152 1998/04/02 02:10:47 eivind Exp $
+ * $Id: wd.c,v 1.153 1998/04/08 20:04:36 sos Exp $
*/
/* TODO:
@@ -1901,9 +1901,26 @@ failed:
du->dk_dd.d_secsize = DEV_BSIZE;
if ((du->cfg_flags & WDOPT_LBA) && wp->wdp_lbasize) {
du->dk_dd.d_nsectors = 63;
- du->dk_dd.d_ntracks = 64;
- du->dk_dd.d_ncylinders = wp->wdp_lbasize / (63*64);
- du->dk_dd.d_secpercyl= 63*64;
+ if (wp->wdp_lbasize < 16*63*1024) { /* <=528.4 MB */
+ du->dk_dd.d_ntracks = 16;
+ }
+ else if (wp->wdp_lbasize < 32*63*1024) { /* <=1.057 GB */
+ du->dk_dd.d_ntracks = 32;
+ }
+ else if (wp->wdp_lbasize < 64*63*1024) { /* <=2.114 GB */
+ du->dk_dd.d_ntracks = 64;
+ }
+ else if (wp->wdp_lbasize < 128*63*1024) { /* <=4.228 GB */
+ du->dk_dd.d_ntracks = 128;
+ }
+ else if (wp->wdp_lbasize < 128*63*1024) { /* <=8.422 GB */
+ du->dk_dd.d_ntracks = 255;
+ }
+ else { /* >8.422 GB */
+ du->dk_dd.d_ntracks = 255; /* XXX */
+ }
+ du->dk_dd.d_secpercyl= du->dk_dd.d_ntracks*du->dk_dd.d_nsectors;
+ du->dk_dd.d_ncylinders = wp->wdp_lbasize/du->dk_dd.d_secpercyl;
du->dk_dd.d_secperunit = wp->wdp_lbasize;
du->dk_flags |= DKFL_LBA;
}
OpenPOWER on IntegriCloud