Date: Fri, 15 Jan 1999 06:00:02 -0800 (PST) From: Andrew Sherrod <btiags@ui.uis.doleta.gov> To: freebsd-bugs@FreeBSD.ORG Subject: Re: kern/8590: kernel incorrectly recognizing Maxtor 11.5gb IDE hd Message-ID: <199901151400.GAA13867@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR kern/8590; it has been noted by GNATS.
From: Andrew Sherrod <btiags@ui.uis.doleta.gov>
To: freebsd-gnats-submit@freebsd.org, gme@caffeine.sundial.net,
ixkatl@yahoo.com
Cc:
Subject: Re: kern/8590: kernel incorrectly recognizing Maxtor 11.5gb IDE hd
Date: Fri, 15 Jan 1999 08:46:43 -0500
I may be able to help with your IDE disk problem.
I have been trying to fix misreported disk sizes on my IDE disks, and
found that the code will use CHS, even if this doesn't match the LBA
size, unless LBA is turned on explicitly (3.0 only). My Award BIOS kept
misreporting CHS sizes. The following two patches seem to fix it.
The first is for 2.2.8 (though it should work for earlier 2.2.x
versions) the second is for 3.0.
Let me know if they help.
Andrew Sherrod
(ixkatl@yahoo.com)
PS. See report i386/9431 for details, and my (lame) first attempts to
fix it.
If you respond, please reply to the yahoo address, as I don't check my
work mail often.
--------------EA0D5F70CF578339B1589242
Content-Type: text/plain; charset=us-ascii; name="diffc2a.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="diffc2a.txt"
*** wd.c.2_2_8 Wed Jan 13 11:45:04 1999
--- wd.c.original.2_2_8 Wed Jan 13 11:45:04 1999
***************
*** 113,122 ****
#define WDOPT_FORCEHD(x) (((x)&0x0f00)>>8)
#define WDOPT_MULTIMASK 0x00ff
- /* This bit mask is used to determine if the drive supports LBA
addressing. */
-
- #define WDCAP_LBA 0x02
-
/*
* This biotab field doubles as a field for the physical unit
number on
* the controller.
--- 113,118 ----
***************
*** 1731,1745 ****
du->dk_dd.d_nsectors = wp->wdp_sectors;
du->dk_dd.d_secpercyl = du->dk_dd.d_ntracks *
du->dk_dd.d_nsectors;
du->dk_dd.d_secperunit = du->dk_dd.d_secpercyl *
du->dk_dd.d_ncylinders;
!
! /* Check for BIOS LBA flag. This should allow kernel to
determine
! actual disk geometry for diffiuclt BIOSes.
! This will likely only be of use during initial
installation, or
! perhaps when configuring a new drive. Otherwise, the
disk geometry
! should already be known. -A. Sherrod 01/13/1999*/
!
! if ( ( (wp->wdp_capability&WDCAP_LBA) ||
! (wp->wdp_cylinders == 16383 ) ) &&
du->dk_dd.d_secperunit < wp->wdp_lbasize) {
du->dk_dd.d_secperunit = wp->wdp_lbasize;
du->dk_dd.d_ncylinders =
--- 1727,1733 ----
du->dk_dd.d_nsectors = wp->wdp_sectors;
du->dk_dd.d_secpercyl = du->dk_dd.d_ntracks *
du->dk_dd.d_nsectors;
du->dk_dd.d_secperunit = du->dk_dd.d_secpercyl *
du->dk_dd.d_ncylinders;
! if (wp->wdp_cylinders == 16383 &&
du->dk_dd.d_secperunit < wp->wdp_lbasize) {
du->dk_dd.d_secperunit = wp->wdp_lbasize;
du->dk_dd.d_ncylinders =
--------------EA0D5F70CF578339B1589242
Content-Type: text/plain; charset=us-ascii; name="diffc3a.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="diffc3a.txt"
*** wd.c.3_0 Wed Jan 13 12:07:46 1999
--- wd.c.original.3_0 Wed Jan 13 11:17:54 1999
***************
*** 130,140 ****
*/
#define id_physid id_scsiid
- /* This bitmask is used to determine if the BIOS flags showing
LBA support
- are active or inactive */
-
- #define WDCAP_LBA 0x02
-
/*
* Drive states. Used to initialize drive.
*/
--- 130,135 ----
***************
*** 1954,1973 ****
du->dk_dd.d_ntracks * du->dk_dd.d_nsectors;
du->dk_dd.d_secperunit =
du->dk_dd.d_secpercyl *
du->dk_dd.d_ncylinders;
!
! /* If BIOS specifies LBA mode is supported, but LBA
flags
! are not set, check if wdp_lbasize is larger than
! CHS size. If so, use the lba_size.
! This should fix problems with certain BIOSes
(e.g. Award)
! which do not report the correct size when using
only
! CHS calculations.
! This will not force the use of LBA mode. It is
only
! used to determine disk geometry.
!
! -A. Sherrod 01/13/1999 */
!
! if ( ( (wp->wdp_capabilities & WDCAP_LBA) ||
! (wp->wdp_cylinders == 16383) ) &&
du->dk_dd.d_secperunit < wp->wdp_lbasize) {
du->dk_dd.d_secperunit = wp->wdp_lbasize;
du->dk_dd.d_ncylinders =
--- 1949,1955 ----
du->dk_dd.d_ntracks * du->dk_dd.d_nsectors;
du->dk_dd.d_secperunit =
du->dk_dd.d_secpercyl *
du->dk_dd.d_ncylinders;
! if (wp->wdp_cylinders == 16383 &&
du->dk_dd.d_secperunit < wp->wdp_lbasize) {
du->dk_dd.d_secperunit = wp->wdp_lbasize;
du->dk_dd.d_ncylinders =
--------------EA0D5F70CF578339B1589242--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901151400.GAA13867>
