Kernel/x86 - Clean up some of the task switching code (possibly a little broken)
[tpg/acess2.git] / KernelLand / Kernel / drvutil_disk.c
index db4d631..a57917d 100644 (file)
 #include <api_drv_disk.h>
 
 // --- Disk Driver Helpers ---
-Uint64 DrvUtil_ReadBlock(Uint64 Start, Uint64 Length, void *Buffer,
-       tDrvUtil_Read_Callback ReadBlocks, Uint64 BlockSize, void *Argument)
+size_t DrvUtil_ReadBlock(Uint64 Start, size_t Length, void *Buffer,
+       tDrvUtil_Read_Callback ReadBlocks, size_t BlockSize, void *Argument)
 {
        Uint8   tmp[BlockSize]; // C99
        Uint64  block = Start / BlockSize;
         int    offset = Start - block * BlockSize;
-        int    leading = BlockSize - offset;
+       size_t  leading = BlockSize - offset;
        Uint64  num;
         int    tailings;
-       Uint64  ret;
+       size_t  ret;
        
        ENTER("XStart XLength pBuffer pReadBlocks XBlockSize pArgument",
                Start, Length, Buffer, ReadBlocks, BlockSize, Argument);
@@ -49,6 +49,7 @@ Uint64 DrvUtil_ReadBlock(Uint64 Start, Uint64 Length, void *Buffer,
        else {
                num = Length / BlockSize;
                tailings = Length % BlockSize;
+               leading = 0;
        }
        
        // Read central blocks
@@ -57,6 +58,7 @@ Uint64 DrvUtil_ReadBlock(Uint64 Start, Uint64 Length, void *Buffer,
                LOG("Reading %i blocks", num);
                ret = ReadBlocks(block, num, Buffer, Argument);
                if(ret != num ) {
+                       LOG("Incomplete read (%i != %i)", ret, num);
                        LEAVE('X', leading + ret * BlockSize);
                        return leading + ret * BlockSize;
                }
@@ -80,17 +82,17 @@ Uint64 DrvUtil_ReadBlock(Uint64 Start, Uint64 Length, void *Buffer,
        return Length;
 }
 
-Uint64 DrvUtil_WriteBlock(Uint64 Start, Uint64 Length, const void *Buffer,
+size_t DrvUtil_WriteBlock(Uint64 Start, size_t Length, const void *Buffer,
        tDrvUtil_Read_Callback ReadBlocks, tDrvUtil_Write_Callback WriteBlocks,
-       Uint64 BlockSize, void *Argument)
+       size_t BlockSize, void *Argument)
 {
        Uint8   tmp[BlockSize]; // C99
        Uint64  block = Start / BlockSize;
-        int    offset = Start - block * BlockSize;
-        int    leading = BlockSize - offset;
+       size_t  offset = Start - block * BlockSize;
+       size_t  leading = BlockSize - offset;
        Uint64  num;
         int    tailings;
-       Uint64  ret;
+       size_t  ret;
        
        ENTER("XStart XLength pBuffer pReadBlocks pWriteBlocks XBlockSize pArgument",
                Start, Length, Buffer, ReadBlocks, WriteBlocks, BlockSize, Argument);

UCC git Repository :: git.ucc.asn.au