mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-27 07:44:09 +02:00
only use AH for EDD version detection, as AL is reserved...
...according to the spec
This commit is contained in:
parent
a5431d9245
commit
cab32344bb
@ -655,15 +655,17 @@ STATIC int LBA_Get_Drive_Parameters(int drive, struct DriveParamS *driveParam, i
|
|||||||
|
|
||||||
init_call_intr(0x13, ®s);
|
init_call_intr(0x13, ®s);
|
||||||
|
|
||||||
/* LBA not supported at all, or read, write, verify not supported */
|
if ((regs.flags & 0x01) || regs.b.x != 0xaa55 || (regs.c.x & 0x01) == 0)
|
||||||
if (regs.b.x != 0xaa55 || (regs.flags & 0x01) || (regs.c.x & 1) == 0)
|
|
||||||
{
|
{
|
||||||
|
/* error conditions:
|
||||||
|
carry set or BX != 0xaa55 => no EDD spec compatible BIOS
|
||||||
|
CX bit 1 clear => fixed disc access subset not supported */
|
||||||
goto StandardBios;
|
goto StandardBios;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* version 1.0, 2.0 have different verify */
|
/* version 1.0, 2.0 have different verify */
|
||||||
if (regs.a.x < 0x2100)
|
if (regs.a.b.h < 0x21)
|
||||||
LBA_WRITE_VERIFY = 0x4301; /* problematic if INT13 is hooked by
|
LBA_WRITE_VERIFY = 0x4301; /* may be problematic if INT13 is hooked by
|
||||||
different controllers / drivers */
|
different controllers / drivers */
|
||||||
|
|
||||||
/* query disk size and DMA handling, geometry is queried later by INT13,08 */
|
/* query disk size and DMA handling, geometry is queried later by INT13,08 */
|
||||||
@ -676,9 +678,9 @@ STATIC int LBA_Get_Drive_Parameters(int drive, struct DriveParamS *driveParam, i
|
|||||||
regs.d.b.l = drive;
|
regs.d.b.l = drive;
|
||||||
init_call_intr(0x13, ®s);
|
init_call_intr(0x13, ®s);
|
||||||
|
|
||||||
/* error or DMA boundary errors not handled transparently */
|
|
||||||
if (regs.flags & 0x01)
|
if (regs.flags & 0x01)
|
||||||
{
|
{
|
||||||
|
/* carry flag set indicates failed LBA disk parameter query */
|
||||||
goto StandardBios;
|
goto StandardBios;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -719,11 +721,13 @@ STATIC int LBA_Get_Drive_Parameters(int drive, struct DriveParamS *driveParam, i
|
|||||||
|
|
||||||
if (lba_bios_parameters.information & 1)
|
if (lba_bios_parameters.information & 1)
|
||||||
{
|
{
|
||||||
driveParam->descflags |= DF_DMA_TRANSPARENT; /* DMA boundary errors are handled transparently */
|
/* DMA boundary errors are handled transparently */
|
||||||
|
driveParam->descflags |= DF_DMA_TRANSPARENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
StandardBios: /* old way to get parameters */
|
StandardBios: /* get disk geometry, and if LBA is not enabled, also size */
|
||||||
if (firstPass && (InitKernelConfig.Verbose >= 1)) printf("Retrieving CHS values for drive\n");
|
if (firstPass && (InitKernelConfig.Verbose >= 1))
|
||||||
|
printf("Retrieving CHS values for drive\n");
|
||||||
|
|
||||||
regs.a.b.h = 0x08;
|
regs.a.b.h = 0x08;
|
||||||
regs.d.b.l = drive;
|
regs.d.b.l = drive;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user