Commit c1a6e2b0 authored by H. Peter Anvin's avatar H. Peter Anvin

[x86 setup] Don't use EDD to get the MBR signature

At least one machine has been identified in the field which advertises
EDD for all drives but locks up if one attempts an extended read from
a non-primary drive.

The MBR is always at CHS 0-0-1, so there is no reason to use an
extended read, other than the possibility that the BIOS cannot handle
it.

Although this might break as many machines as it fixes (a small number
either way), the current state is a regression but the reverse is not.
Therefore revert to the previous state of not using extended read.

Quite probably the Right Thing to do is to read using plain (CHS) read
and extended read on failure, but that change would definitely have to
go through -mm first.
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 362cea33
...@@ -19,40 +19,12 @@ ...@@ -19,40 +19,12 @@
#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
struct edd_dapa {
u8 pkt_size;
u8 rsvd;
u16 sector_cnt;
u16 buf_off, buf_seg;
u64 lba;
u64 buf_lin_addr;
};
/* /*
* Read the MBR (first sector) from a specific device. * Read the MBR (first sector) from a specific device.
*/ */
static int read_mbr(u8 devno, void *buf) static int read_mbr(u8 devno, void *buf)
{ {
struct edd_dapa dapa; u16 ax, bx, cx, dx;
u16 ax, bx, cx, dx, si;
memset(&dapa, 0, sizeof dapa);
dapa.pkt_size = sizeof(dapa);
dapa.sector_cnt = 1;
dapa.buf_off = (size_t)buf;
dapa.buf_seg = ds();
/* dapa.lba = 0; */
ax = 0x4200; /* Extended Read */
si = (size_t)&dapa;
dx = devno;
asm("pushfl; stc; int $0x13; setc %%al; popfl"
: "+a" (ax), "+S" (si), "+d" (dx)
: "m" (dapa)
: "ebx", "ecx", "edi", "memory");
if (!(u8)ax)
return 0; /* OK */
ax = 0x0201; /* Legacy Read, one sector */ ax = 0x0201; /* Legacy Read, one sector */
cx = 0x0001; /* Sector 0-0-1 */ cx = 0x0001; /* Sector 0-0-1 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment