summaryrefslogtreecommitdiff
path: root/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/BlkDev/DskFDC.HC15
1 files changed, 12 insertions, 3 deletions
diff --git a/Kernel/BlkDev/DskFDC.HC b/Kernel/BlkDev/DskFDC.HC
index 874873b..73102c6 100644
--- a/Kernel/BlkDev/DskFDC.HC
+++ b/Kernel/BlkDev/DskFDC.HC
@@ -335,16 +335,21 @@ U0 FDCRBlks(CDrv *dv,U8 *buf,I64 blk,I64 cnt)
U0 FDCReadBlks(CBlkDev *bd,U8 *buf,I64 blk,I64 cnt)
{
I64 retries=3;
- U8 c,h,s,st0;
+ U64 c,h,s,st0;
Bool unlock=BlkDevLock(bd);
+ FDCMotor(bd,ON);
+
retry:
- if (retries) throw('BlkDev');
+ if (retries) {
+ FDCMotor(bd,OFF);
+ throw('BlkDev');
+ }
FDCSelDrv(bd);
c=blk/(bd->heads*bd->spt);
- h=blk/bd->spt%heads;
+ h=blk/bd->spt%bd->heads;
s=blk%bd->spt+1;
st0=FDCReadData(bd,c,h,s,s+cnt-1);
@@ -355,6 +360,10 @@ U0 FDCReadBlks(CBlkDev *bd,U8 *buf,I64 blk,I64 cnt)
}
MemCpy(buf,&FDC_DMA,cnt*bd->blk_size);
+
+ FDCMotor(bd,OFF);
+
+ if (unlock) BlkDevUnlock(bd);
}
U0 FDCWBlks(CDrv *dv,U8 *buf,I64 blk,I64 cnt)