=================================================================== RCS file: /MkLinux/floppy-darwin/floppy_blkdev.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- floppy-darwin/floppy_blkdev.cpp 2002/04/09 22:16:26 1.27 +++ floppy-darwin/floppy_blkdev.cpp 2002/04/12 21:49:32 1.28 @@ -124,30 +124,23 @@ IOReturn org_mklinux_iokit_swim3_driver::doSyncReadWrite(IOMemoryDescriptor *buffer, UInt32 block,UInt32 nblks) { +return doReadWrite(buffer, block, nblks, 0); +} -#define NOTYETDAG -#ifdef NOTYETDAG -//#error UNFINISHED +IOReturn org_mklinux_iokit_swim3_driver::doReadWrite(IOMemoryDescriptor *buffer, UInt32 block, UInt32 nblks, int is_async) +{ + static int return_zeroes = 0; uint_t Result; BSIOStatus retval = kBSIOCompleted; OptionBits direction; -#define IOMALLOC_WORKS -#ifdef IOMALLOC_WORKS char *localbuf; -#else - vm_offset_t localbuf; -#endif IOReturn myIOReturn; int retrycount; unsigned int blocks_per_page = PAGE_SIZE / 512; /* I assume the higher levels of the I/O Kit handle checking write protection */ -#ifndef IOMALLOC_WORKS - /* Round up to the nearest page and add an extra page */ - long int size = ((nblks * 512) + PAGE_SIZE + PAGE_SIZE - 1) & ~PAGE_SIZE; -#endif - // IOLog("swim3: Entered doSyncReadWrite.\n"); + // IOLog("swim3: Entered doReadWrite.\n"); if (!buffer) return kIOReturnNoMemory; direction = (buffer->getDirection() == kIODirectionIn ? kBSRead : kBSWrite); @@ -165,18 +158,10 @@ // IOLog("swim3: allocating buffer.\n"); if (nblks <= blocks_per_page) { -#ifdef IOMALLOC_WORKS localbuf = onepage; -#else - localbuf = (vm_offset_t) onepage; -#endif } else { -#ifdef IOMALLOC_WORKS localbuf = (char *)IOMalloc((nblks * 512) + PAGE_SIZE); if (!localbuf) -#else - if (kmem_alloc_pageable(kernel_map, &localbuf, size) != KERN_SUCCESS) -#endif { IOLog("swim3: Out of MEMORY!\n"); return kIOReturnNoMemory; @@ -192,83 +177,16 @@ org_mklinux_iokit_swim3_busyflag = 1; if (direction == kBSWrite) { - IOMemoryMap *map; - IOLog("Mapping Data in 15\n"); - IOLog("Mapping Data in 14\n"); - IOLog("Mapping Data in 13\n"); - IOLog("Mapping Data in 12\n"); - IOLog("Mapping Data in 11\n"); - IOLog("Mapping Data in 10\n"); - IOLog("Mapping Data in 9\n"); - IOLog("Mapping Data in 8\n"); - IOLog("Mapping Data in 7\n"); - IOLog("Mapping Data in 6\n"); - IOLog("Mapping Data in 5\n"); - IOLog("Mapping Data in 4\n"); - IOLog("Mapping Data in 3\n"); - IOLog("Mapping Data in 2\n"); - IOLog("Mapping Data in 1\n"); - IOLog("Mapping Data!\n"); /* Copy the data to kernel memory for writing */ - map = buffer->map(); - if (!map) { - IOLog("Map in failed. Returning kIOReturnVMError\n"); - if (nblks > blocks_per_page) { -#ifdef IOMALLOC_WORKS - IOFree(localbuf, (nblks * 512) + PAGE_SIZE); -#else - kmem_free(kernel_map, localbuf, size); -#endif - } - org_mklinux_iokit_swim3_busyflag = 0; - return kIOReturnVMError; - } - IOLog("Copying Data in 15\n"); - IOLog("Copying Data in 14\n"); - IOLog("Copying Data in 13\n"); - IOLog("Copying Data in 12\n"); - IOLog("Copying Data in 11\n"); - IOLog("Copying Data in 10\n"); - IOLog("Copying Data in 9\n"); - IOLog("Copying Data in 8\n"); - IOLog("Copying Data in 7\n"); - IOLog("Copying Data in 6\n"); - IOLog("Copying Data in 5\n"); - IOLog("Copying Data in 4\n"); - IOLog("Copying Data in 3\n"); - IOLog("Copying Data in 2\n"); - IOLog("Copying Data in 1\n"); - IOLog("Copying Data!\n"); if (buffer->readBytes(0, (void *)localbuf, nblks * 512) != (nblks * 512)) { IOLog("Write copy failed. Returning kIOReturnVMError\n"); if (nblks > blocks_per_page) { -#ifdef IOMALLOC_WORKS IOFree(localbuf, (nblks * 512) + PAGE_SIZE); -#else - kmem_free(kernel_map, localbuf, size); -#endif } org_mklinux_iokit_swim3_busyflag = 0; return kIOReturnVMError; } - IOLog("Unmapping Data in 15\n"); - IOLog("Unmapping Data in 14\n"); - IOLog("Unmapping Data in 13\n"); - IOLog("Unmapping Data in 12\n"); - IOLog("Unmapping Data in 11\n"); - IOLog("Unmapping Data in 10\n"); - IOLog("Unmapping Data in 9\n"); - IOLog("Unmapping Data in 8\n"); - IOLog("Unmapping Data in 7\n"); - IOLog("Unmapping Data in 6\n"); - IOLog("Unmapping Data in 5\n"); - IOLog("Unmapping Data in 4\n"); - IOLog("Unmapping Data in 3\n"); - IOLog("Unmapping Data in 2\n"); - IOLog("Unmapping Data in 1\n"); - IOLog("Unmapping Data!\n"); - map->unmap(); IOLog("Doing write.\n"); } @@ -304,11 +222,7 @@ myIOReturn=kIOReturnIOError; } if (nblks > blocks_per_page) { -#ifdef IOMALLOC_WORKS IOFree(localbuf, (nblks * 512) + PAGE_SIZE); -#else - kmem_free(kernel_map, localbuf, size); -#endif } org_mklinux_iokit_swim3_busyflag = 0; IOLog("swim3: for block %d-%d, returning %s (FloppyPluginIO returned %d/%x).\n", @@ -326,10 +240,6 @@ "kIOReturnIOError", retval, retval); #endif return myIOReturn; -#else - return kIOReturnIOError; - return kIOReturnUnsupported; -#endif // NOTYETDAG } // virtual IOReturn doSynchronizeCache(void) = 0;