On Fri, 10 Dec 2010, Bruce Cran wrote:
On Fri, 10 Dec 2010 10:12:34 +1100 (EST)
Bruce Evans <b...@optusnet.com.au> wrote:
The BIOS has little control over the mode. It can't enforce LBA if
the drive supports CHS. It can't force any particular CHS mode since
the driver may set any CHS mode. ata used to reset the drive in the
probe and in reinit. I think this is a hard reset which restores the
default CHS. I can't see where ata resets now. It is nicely
obfuscated using function pointers. I think it does less resetting.
It also has a soft reset for at least sata, but sata won't be using
CHS. Removing of resets would explain why it now has to use the
current CHS (since it doesn't change the CHS back to the default).
The BIOS does seem to have complete control over the geometry that
FreeBSD detects.
Not exactly. Anything that runs before FreeBSD can change the CHS
translation if CHS translation is changable. Then FreeBSD will only
detect the geometry set by the BIOS (if the BIOS changed the default)
if its initialization doesn't clobber the setting before it is read.
Since FreeBSD doesn't care about the geometry, it is only accidental
if this happens. It didn't happen between at least 1992 and 2009
in 386BSD or FreeBSD, since the driver always reset the drive first.
Now we care less about the geometry than in 1992.
Yes we'll use LBA mode if it's available, but what I'm
talking about is the geometry that gets used for creating disklabels
and the MBR. Since I saw the change in the BIOS reflected in what
FreeBSD detected, it appears the BIOS has control over those values
except when it decides to initially use LBA mode.
The current geometry possibly changed by the BIOS is equally useless to
the default geometry set by the drive. You cannot know if the BIOS
changed it. My BIOSes don't seem to change it -- FreeBSD with GEOM has
always reported the default CHS as the "firmware" geometry, but I
mostly use versions of ata with the reset, and might not have noticed
if this changed (I always configure BIOS to "LBA" CHS mode with H=255
and C=63 if possible, but have never seen the CHS make it to the driver).
Newer BIOSes with not-so-old not-so-new drives actually have a better
chance of setting the default translation mode to the fake one used
in partition tables for old OSes and boot loaders than old ones. First,
they won't be using CHS translation to talk to the drive, so they can
change the current translation to anything without affection their
operation, provided the drive is not so old as to not support changing
the translation and not so new as to not support CHS and/or changing it.
This also depends on the drive being fairly old, else it cannot be
covered by any portable CHS. Second, they might have dropped support
for old OSes and boot loaders and not really support CHS except for
the limit range that it can cover. Then all OSes and boot loaders on
the drive must be either not using CHS or be using the limited range
that it can cover.
The driver always ignores CHS (except to report it) and uses LBA if
possible. If a manufacturer stops supporting CHS, then the driver
shouldn't notice, but the manufacturer's non-support should include
setting the obsolete fields to 0 (or possibly other specified magic
numbers). It is then up to utilities whether to report these fields
as simply there value or to decrypt their magic values into a CHS-
unsupported flag (I don't know of any actual flag for this). Then
there is the "firmware geometry" reported to GEOM. You could try
changing this to 0/0/0 and see what breaks. CAM for SCSI drives still
invents a geometry to avoid seeing evil here, since SCSI drives have
only had no geometry for about 30 years now.
But the problem is that we _do_ use CHS: we use it to create the MBR
and disklabel. Linux invents a geometry if it can't create one from the
on-disk data; we don't.
Even if it can't create on from the on-disk data? FreeBSD doesn't do that
now, but used to. bsdBSD still does it. One thing I missed was creating
a better default when there is no on-disk data. cam_calc_geometry() is
good for that.
Bruce
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"