diff options
| -rw-r--r-- | Kernel/BlkDev/DskFDC.HC | 15 |
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) |
