Move the ddt bitfields to df_descflags. Let SetLogDev call GetLogdev,

eliminating common code.


git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@868 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2004-04-13 10:54:33 +00:00
parent 5d712fc2a6
commit 7eb9514377
3 changed files with 22 additions and 41 deletions

View File

@ -242,8 +242,6 @@ typedef struct ddtstruct {
ULONG ddt_serialno; /* serial number */ ULONG ddt_serialno; /* serial number */
UBYTE ddt_fstype[9]; /* ASCIIZ filesystem type ("FAT12 " or "FAT16 ") */ UBYTE ddt_fstype[9]; /* ASCIIZ filesystem type ("FAT12 " or "FAT16 ") */
ULONG ddt_offset; /* relative partition offset */ ULONG ddt_offset; /* relative partition offset */
BITS ddt_LBASupported:1; /* set, if INT13 extensions enabled */
BITS ddt_WriteVerifySupported:1;
} ddt; } ddt;
/* description flag bits */ /* description flag bits */
@ -257,6 +255,9 @@ typedef struct ddtstruct {
#define DF_DPCHANGED 0x080 #define DF_DPCHANGED 0x080
#define DF_REFORMAT 0x100 #define DF_REFORMAT 0x100
#define DF_NOACCESS 0x200 #define DF_NOACCESS 0x200
/* freedos specific flag bits */
#define DF_LBA 0x400
#define DF_WRTVERIFY 0x800
/* typedef struct ddtstruct ddt;*/ /* typedef struct ddtstruct ddt;*/

View File

@ -317,25 +317,13 @@ STATIC WORD Getlogdev(rqptr rp, ddt * pddt)
STATIC WORD Setlogdev(rqptr rp, ddt * pddt) STATIC WORD Setlogdev(rqptr rp, ddt * pddt)
{ {
int i; unsigned char unit = rp->r_unit;
ddt *pddt2 = getddt(0); Getlogdev(rp, pddt);
if (rp->r_unit == 0)
if (!(pddt->ddt_descflags & DF_MULTLOG)) {
rp->r_unit = 0;
return S_DONE; return S_DONE;
} (&(getddt(0))[rp->r_unit - 1])->ddt_descflags &= ~DF_CURLOG;
for (i = 0; i < blk_dev.dh_name[0]; i++, pddt2++)
{
if (pddt->ddt_driveno == pddt2->ddt_driveno &&
(pddt2->ddt_descflags & (DF_MULTLOG | DF_CURLOG)) ==
(DF_MULTLOG | DF_CURLOG))
break;
}
pddt2->ddt_descflags &= ~DF_CURLOG;
pddt->ddt_descflags |= DF_CURLOG; pddt->ddt_descflags |= DF_CURLOG;
rp->r_unit++; rp->r_unit = unit + 1;
return S_DONE; return S_DONE;
} }
@ -995,7 +983,7 @@ STATIC int LBA_Transfer(ddt * pddt, UWORD mode, VOID FAR * buffer,
for (num_retries = 0; num_retries < N_RETRY; num_retries++) for (num_retries = 0; num_retries < N_RETRY; num_retries++)
{ {
if (pddt->ddt_LBASupported && mode != LBA_FORMAT) if ((pddt->ddt_descflags & DF_LBA) && mode != LBA_FORMAT)
{ {
dap.number_of_blocks = count; dap.number_of_blocks = count;
@ -1006,7 +994,7 @@ STATIC int LBA_Transfer(ddt * pddt, UWORD mode, VOID FAR * buffer,
/* Load the registers and call the interrupt. */ /* Load the registers and call the interrupt. */
if (pddt->ddt_WriteVerifySupported || mode != LBA_WRITE_VERIFY) if ((pddt->ddt_descflags & DF_WRTVERIFY) || mode != LBA_WRITE_VERIFY)
{ {
error_code = fl_lba_ReadWrite(pddt->ddt_driveno, mode, &dap); error_code = fl_lba_ReadWrite(pddt->ddt_driveno, mode, &dap);
} }

View File

@ -243,8 +243,7 @@ struct _bios_LBA_disk_parameterS {
struct DriveParamS { struct DriveParamS {
UBYTE driveno; /* = 0x8x */ UBYTE driveno; /* = 0x8x */
BITS LBA_supported:1; /* set, if INT13 extensions enabled */ UWORD descflags;
BITS WriteVerifySupported:1; /* */
ULONG total_sectors; ULONG total_sectors;
struct CHS chs; /* for normal INT 13 */ struct CHS chs; /* for normal INT 13 */
@ -584,17 +583,16 @@ void DosDefinePartition(struct DriveParamS *driveParam,
pddt->ddt_next = MK_FP(0, 0xffff); pddt->ddt_next = MK_FP(0, 0xffff);
pddt->ddt_driveno = driveParam->driveno; pddt->ddt_driveno = driveParam->driveno;
pddt->ddt_logdriveno = nUnits; pddt->ddt_logdriveno = nUnits;
pddt->ddt_LBASupported = driveParam->LBA_supported; pddt->ddt_descflags |= driveParam->descflags;
/* Turn of LBA if not forced and the partition is within 1023 cyls and of the right type */ /* Turn of LBA if not forced and the partition is within 1023 cyls and of the right type */
/* the FileSystem type was internally converted to LBA_xxxx if a non-LBA partition /* the FileSystem type was internally converted to LBA_xxxx if a non-LBA partition
above cylinder 1023 was found */ above cylinder 1023 was found */
if (!InitKernelConfig.ForceLBA && !ExtLBAForce && !IsLBAPartition(pEntry->FileSystem)) if (!InitKernelConfig.ForceLBA && !ExtLBAForce && !IsLBAPartition(pEntry->FileSystem))
pddt->ddt_LBASupported = FALSE; pddt->ddt_descflags &= ~DF_LBA;
pddt->ddt_WriteVerifySupported = driveParam->WriteVerifySupported;
pddt->ddt_ncyl = driveParam->chs.Cylinder; pddt->ddt_ncyl = driveParam->chs.Cylinder;
#ifdef DEBUG #ifdef DEBUG
if (pddt->ddt_LBASupported) if (pddt->ddt_descflags & DF_LBA)
DebugPrintf(("LBA enabled for drive %c:\n", 'A' + nUnits)); DebugPrintf(("LBA enabled for drive %c:\n", 'A' + nUnits));
#endif #endif
@ -658,7 +656,7 @@ int LBA_Get_Drive_Parameters(int drive, struct DriveParamS *driveParam)
if (driveParam->driveno) if (driveParam->driveno)
return driveParam->driveno; return driveParam->driveno;
driveParam->LBA_supported = FALSE; driveParam->descflags = 0;
drive |= 0x80; drive |= 0x80;
@ -727,17 +725,12 @@ int LBA_Get_Drive_Parameters(int drive, struct DriveParamS *driveParam)
goto StandardBios; goto StandardBios;
} }
if (lba_bios_parameters.information & 8)
{
driveParam->WriteVerifySupported = 1;
}
else
driveParam->WriteVerifySupported = 0;
driveParam->total_sectors = lba_bios_parameters.totalSect; driveParam->total_sectors = lba_bios_parameters.totalSect;
/* if we arrive here, success */ /* if we arrive here, success */
driveParam->LBA_supported = TRUE; driveParam->descflags = DF_LBA;
if (lba_bios_parameters.information & 8)
driveParam->descflags |= DF_WRTVERIFY;
StandardBios: /* old way to get parameters */ StandardBios: /* old way to get parameters */
@ -759,7 +752,7 @@ StandardBios: /* old way to get parameters */
printf("BIOS reported 0 sectors/track, assuming 63!\n"); printf("BIOS reported 0 sectors/track, assuming 63!\n");
} }
if (!driveParam->LBA_supported) if (!(driveParam->descflags & DF_LBA))
{ {
driveParam->total_sectors = driveParam->total_sectors =
min(driveParam->chs.Cylinder, 1023) min(driveParam->chs.Cylinder, 1023)
@ -904,7 +897,7 @@ BOOL ScanForPrimaryPartitions(struct DriveParamS * driveParam, int scan_type,
if (chs.Cylinder > 1023 || end.Cylinder > 1023) if (chs.Cylinder > 1023 || end.Cylinder > 1023)
{ {
if (!driveParam->LBA_supported) if (!(driveParam->descflags & DF_LBA))
{ {
printf printf
("can't use LBA partition without LBA support - part %s FS %02x", ("can't use LBA partition without LBA support - part %s FS %02x",
@ -990,7 +983,7 @@ int Read1LBASector(struct DriveParamS *driveParam, unsigned drive,
for (num_retries = 0; num_retries < N_RETRY; num_retries++) for (num_retries = 0; num_retries < N_RETRY; num_retries++)
{ {
regs.d.b.l = drive | 0x80; regs.d.b.l = drive | 0x80;
if (driveParam->LBA_supported) if (driveParam->descflags & DF_LBA)
{ {
dap.number_of_blocks = 1; dap.number_of_blocks = 1;
dap.buffer_address = buffer; dap.buffer_address = buffer;
@ -1281,7 +1274,6 @@ void ReadAllPartitionTables(void)
pddt->ddt_logdriveno = Unit; pddt->ddt_logdriveno = Unit;
pddt->ddt_type = init_getdriveparm(0, &pddt->ddt_defbpb); pddt->ddt_type = init_getdriveparm(0, &pddt->ddt_defbpb);
pddt->ddt_ncyl = (pddt->ddt_type & 7) ? 80 : 40; pddt->ddt_ncyl = (pddt->ddt_type & 7) ? 80 : 40;
pddt->ddt_LBASupported = FALSE;
pddt->ddt_descflags = init_readdasd(0); pddt->ddt_descflags = init_readdasd(0);
pddt->ddt_offset = 0l; pddt->ddt_offset = 0l;