Kevin O'Connor wrote:
On Sat, Jul 31, 2010 at 05:26:09PM +0200, Sebastian Herbszt wrote:
Fix data returned in the int13dpt structure.
[...]
- if (size < 66) {
- if (size < 74) { disk_ret(regs, DISK_RET_SUCCESS); return; }
This is not correct - the EDD v3.0 spec has a 66 byte structure.
You mean the Phoenix spec (BIOS Enhanced Disk Drive Specification, Version 3.0, Rev 0.8, March 12, 1998).
What about the T13 Working Draft, D1572, Information Technology - BIOS Enhanced Disk Drive Services - 3 (EDD-3), Revision 3, November 5, 2004?
The link in the bochs bug is for a proposed EDD v4 spec - but that hasn't been ratified - see:
It is in this list as "INCITS 407-2005 (1572D): BIOS Enhanced Disk Drive Services - 3".
Should EDD v4 be ratified and we add support for it, we'd need to support both v3 and v4 calls.
You should be able to find the current spec by googling for "specsedd30.pdf".
The structure in the Phoenix spec has 66 bytes and padding is not mentioned. In the T13 documents the structure has 74 bytes and some fields are space padded.
To be honest though, in my tests, I didn't find any OSs that use anything beyond the basic EDD v1 calls.
I think Linux supplies a buffer which can hold 74 bytes [1].
Indeed, if you look at the Bochs code you'll see that it has an incorrect checksum calculation for EDD v2 and EDD v3. (It uses "checksum = ~checksum" where it should do "checksum = -checksum").
-Kevin
[1] http://lxr.linux.no/#linux+v2.6.34.1/include/linux/edd.h
Sebastian