ATA/CHS problem (path + new information)

Bruce Evans bde at zeta.org.au
Mon Apr 12 17:55:48 PDT 2004


On Sun, 11 Apr 2004, Roman Kurakin wrote:

> I remind you that now I have two problems. First one that FreeBSD uses
> wrong assumption about which device should be CHS and which LBA:
>
> if (!ad_version(atadev->param->version_major) ||
> !(atadev->param->atavalid & ATA_FLAG_54_58) || !lbasize)
> atadev->flags |= ATA_D_USE_CHS;
>
> True ATA device may not have ATA_FLAG_54_58 valid bit, and also due
> to last ATA standard this bit is obsoleted.
>
> I also want to know why ata driver doesn't check LBA support from word 49?
> May be this one check could solve my problems and didn't breake code for
> non-ATA devices.

Possibly for similar reasons.  It's hard to tell what's in the LBA bit for
pre-ATA devices older than LBA.  Similarly for the lbasize words, but it's
easier to do a sanity check on a 32-bit values that a 1-bit flag.

> Second one, that only 20G part of my hard disk works with CHS. This is other
> side of the same problem. Device should work in CHS mode. And it works
> witch ICH5 controller. But with ICH2 it doesn't with out hack.
>
> I've checked standard again and I sew command 91h (Initialize drive
> parameters).

Check out the commands for limiting the (apparent) disk size.  IIRC,
the CHS limit can be set independently of the LBA limit, and some
settings are harder than others so that they can't be cleared by old
commands like 0x91.  The limits may be set to prevent old drivers which
only understand old commands from becoming confused by trying to actually
use the whole disk.

Bruce


More information about the freebsd-current mailing list