tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: WD_QUIRK_FORCE_LBA48 (Manuel Bouyer) writes:

Hi Manuel,

>> Actually I think someone pointed out that the max sector number
>> for LBA28 is sector 0xffffffe - the maximum value for the 'number of
>> sectors addressable with LBA28' is 0xfffffff.

>that's true in ATA7. but previous standards didn't impose restrictions
>on the content of words 60-61 of IDENTIFY, nor did they state that
>LBA28's last sector is 0xfffffe.

ATA6 (at least the draft I have) shows the same rules and ATA5
doesn't have LBA48.

>I also didn't see in ATA7 restrictions on LBA28's addressing, only on
>the content if words 60-61 of IDENTIFY.

The language in the standard is pretty vague, however, it says
that if a device has more than 0xfffffff blocks, then (60-61)
does impose such a limit on LBA28 addressing.

On the other hand, the standard says that (60-61)
- contain a value one greater than the total number of user-addressable sectors
in 28-bit addressing
- contain the maximum capacity that can be addressed by 28-bit commands.

to me, that's an error as the first clause asks for sector count + 1
and the second clause asks for just the sector count. Also READ NATIVE
MAX ADDRESS (an optional command) shall return 2^28-2 if the device
is larger than 2^28-1 sectors.

So, for devices implementing LBA48, it should be pretty safe to
just use LBA48 for adressing sectors >= 2^28-2 (including ranges
that span that boundary) and LBA28 otherwise.

This is only a problem for devices that are larger than 2^28-2
and do not implement LBA48 (so the size is 2^28-1 or 2^28).
IMHO, there is no such _disk_, but if there is, or you have a
controller that breaks LBA48, then you lose the ability to address
two sectors.

                                Michael van Elst
                                "A potential Snark may lurk in every tree."

Home | Main Index | Thread Index | Old Index