Fix data returned in the int13dpt structure.
Signed-off-by: Sebastian Herbszt herbszt@gmx.de
diff --git a/src/disk.c b/src/disk.c index 242c742..d7fd6b3 100644 --- a/src/disk.c +++ b/src/disk.c @@ -603,14 +603,14 @@ disk_1348(struct bregs *regs, struct drive_s *drive_g) ebda_seg, (void*)offsetof(struct extended_bios_data_area_s, dpte), 15); SET_EBDA2(ebda_seg, dpte.checksum, -sum);
- if (size < 66) { + if (size < 74) { disk_ret(regs, DISK_RET_SUCCESS); return; }
// EDD 3.x SET_INT13DPT(regs, key, 0xbedd); - SET_INT13DPT(regs, dpi_length, 36); + SET_INT13DPT(regs, dpi_length, 44); SET_INT13DPT(regs, reserved1, 0); SET_INT13DPT(regs, reserved2, 0);
@@ -619,7 +619,7 @@ disk_1348(struct bregs *regs, struct drive_s *drive_g) SET_INT13DPT(regs, host_bus[0], 'P'); SET_INT13DPT(regs, host_bus[1], 'C'); SET_INT13DPT(regs, host_bus[2], 'I'); - SET_INT13DPT(regs, host_bus[3], 0); + SET_INT13DPT(regs, host_bus[3], ' ');
u32 path = (pci_bdf_to_bus(bdf) | (pci_bdf_to_dev(bdf) << 8) | (pci_bdf_to_fn(bdf) << 16)); @@ -629,7 +629,7 @@ disk_1348(struct bregs *regs, struct drive_s *drive_g) SET_INT13DPT(regs, host_bus[0], 'I'); SET_INT13DPT(regs, host_bus[1], 'S'); SET_INT13DPT(regs, host_bus[2], 'A'); - SET_INT13DPT(regs, host_bus[3], 0); + SET_INT13DPT(regs, host_bus[3], ' ');
SET_INT13DPT(regs, iface_path, iobase1); } @@ -637,16 +637,19 @@ disk_1348(struct bregs *regs, struct drive_s *drive_g) SET_INT13DPT(regs, iface_type[0], 'A'); SET_INT13DPT(regs, iface_type[1], 'T'); SET_INT13DPT(regs, iface_type[2], 'A'); - SET_INT13DPT(regs, iface_type[3], 0); - SET_INT13DPT(regs, iface_type[4], 0); - SET_INT13DPT(regs, iface_type[5], 0); - SET_INT13DPT(regs, iface_type[6], 0); - SET_INT13DPT(regs, iface_type[7], 0); + SET_INT13DPT(regs, iface_type[3], ' '); + SET_INT13DPT(regs, iface_type[4], ' '); + SET_INT13DPT(regs, iface_type[5], ' '); + SET_INT13DPT(regs, iface_type[6], ' '); + SET_INT13DPT(regs, iface_type[7], ' ');
- SET_INT13DPT(regs, device_path, slave); + SET_INT13DPT(regs, device_path1, slave); + SET_INT13DPT(regs, device_path2, 0); + + SET_INT13DPT(regs, reserved3, 0);
SET_INT13DPT(regs, checksum - , -checksum_far(regs->ds, (void*)(regs->si+30), 35)); + , -checksum_far(regs->ds, (void*)(regs->si+30), 43));
disk_ret(regs, DISK_RET_SUCCESS); } diff --git a/src/disk.h b/src/disk.h index 9e5b083..0ef849d 100644 --- a/src/disk.h +++ b/src/disk.h @@ -63,7 +63,8 @@ struct int13dpt_s { u8 host_bus[4]; u8 iface_type[8]; u64 iface_path; - u64 device_path; + u64 device_path1; + u64 device_path2; u8 reserved3; u8 checksum; } PACKED;