[ros-diffs] [ros-arm-bringup] 34661: - Double fail: Fix a math bug, calculate the actual offset in the mapping and return it, and don't forget to return the total length read too.

ros-arm-bringup at svn.reactos.org ros-arm-bringup at svn.reactos.org
Tue Jul 22 08:40:00 CEST 2008


Author: ros-arm-bringup
Date: Tue Jul 22 01:40:00 2008
New Revision: 34661

URL: http://svn.reactos.org/svn/reactos?rev=34661&view=rev
Log:
- Double fail: Fix a math bug, calculate the actual offset in the mapping and return it, and don't forget to return the total length read too.


Modified:
    trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c

Modified: trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c?rev=34661&r1=34660&r2=34661&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/class/ramdisk/ramdisk.c [iso-8859-1] Tue Jul 22 01:40:00 2008
@@ -276,6 +276,7 @@
 {
     PHYSICAL_ADDRESS PhysicalAddress;
     PVOID MappedBase;
+    ULONG PageOffset;
     SIZE_T ActualLength;
     LARGE_INTEGER ActualOffset;
     LARGE_INTEGER ActualPages;
@@ -295,13 +296,13 @@
     //
     // Convert to pages
     //
-    ActualOffset.QuadPart = BYTES_TO_PAGES(ActualOffset.QuadPart);
+    ActualPages.QuadPart = BYTES_TO_PAGES(ActualOffset.QuadPart);
     DPRINT1("Offset in pages is: %d\n", ActualOffset);
     
     //
     // Now add the base page
     //
-    ActualPages.QuadPart = DeviceExtension->BasePage + ActualOffset.QuadPart;
+    ActualPages.QuadPart = DeviceExtension->BasePage + ActualPages.QuadPart;
     DPRINT1("Ramdisk mapped at page: %d, actual page is: %I64d\n",
             DeviceExtension->BasePage, ActualPages);
     
@@ -324,9 +325,21 @@
     DPRINT1("Length in bytes: %d\n", ActualLength);
     
     //
+    // Get the offset within the page
+    //
+    PageOffset = BYTE_OFFSET(ActualOffset.QuadPart);
+    DPRINT1("Page offset: %lx\n", PageOffset);
+    
+    //
     // Map the I/O Space from the loader
     //
     MappedBase = MmMapIoSpace(PhysicalAddress, ActualLength, MmCached);
+    
+    //
+    // Return actual offset within the page as well as the length
+    //
+    if (MappedBase) MappedBase = (PVOID)((ULONG_PTR)MappedBase + PageOffset);
+    *OutputLength = Length;
     DPRINT1("Mapped at: %p\n", MappedBase);
     return MappedBase;
 }



More information about the Ros-diffs mailing list