From: Stefan Ginsberg Date: Sat, 29 Nov 2008 19:35:04 +0000 (+0000) Subject: - Kill off ramdrv, it is deprecated since a long time ago. X-Git-Tag: ReactOS-0.3.8~1165 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=c47ab26e825258808560d0f40150f7468cafaa59 - Kill off ramdrv, it is deprecated since a long time ago. See issue #3422 for more details. svn path=/trunk/; revision=37739 --- diff --git a/rosapps/drivers/directory.rbuild b/rosapps/drivers/directory.rbuild index b4d1368c339..06b2a6f211d 100644 --- a/rosapps/drivers/directory.rbuild +++ b/rosapps/drivers/directory.rbuild @@ -7,8 +7,4 @@ - - - - diff --git a/rosapps/drivers/ramdrv/minix/bitops.c b/rosapps/drivers/ramdrv/minix/bitops.c deleted file mode 100644 index 2acabaf041e..00000000000 --- a/rosapps/drivers/ramdrv/minix/bitops.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * ReactOS kernel - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/* - * Copyright 1992, Linus Torvalds. - */ -/* - * These have to be done with inline assembly: that way the bit-setting - * is guaranteed to be atomic. All bit operations return 0 if the bit - * was cleared before the operation and != 0 if it was not. - * - * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). - */ - -#ifdef __SMP__ -#define LOCK_PREFIX "lock ; " -#else -#define LOCK_PREFIX "" -#endif - -/* - * Function prototypes to keep gcc -Wall happy - */ -extern void set_bit(int nr, volatile void * addr); -extern void clear_bit(int nr, volatile void * addr); -extern void change_bit(int nr, volatile void * addr); -extern int test_and_set_bit(int nr, volatile void * addr); -extern int test_and_clear_bit(int nr, volatile void * addr); -extern int test_and_change_bit(int nr, volatile void * addr); -extern int __constant_test_bit(int nr, const volatile void * addr); -extern int __test_bit(int nr, volatile void * addr); -extern int find_first_zero_bit(void * addr, unsigned size); -extern int find_next_zero_bit (void * addr, int size, int offset); -extern unsigned long ffz(unsigned long word); - -/* - * Some hacks to defeat gcc over-optimizations.. - */ -struct __dummy { unsigned long a[100]; }; -#define ADDR (*(volatile struct __dummy *) addr) -#define CONST_ADDR (*(volatile const struct __dummy *) addr) - -void set_bit(int nr, volatile void * addr) -{ - __asm__ __volatile__( LOCK_PREFIX - "btsl %1,%0" - :"=m" (ADDR) - :"Ir" (nr)); -} - -void clear_bit(int nr, volatile void * addr) -{ - __asm__ __volatile__( LOCK_PREFIX - "btrl %1,%0" - :"=m" (ADDR) - :"Ir" (nr)); -} - -void change_bit(int nr, volatile void * addr) -{ - __asm__ __volatile__( LOCK_PREFIX - "btcl %1,%0" - :"=m" (ADDR) - :"Ir" (nr)); -} - -int test_and_set_bit(int nr, volatile void * addr) -{ - int oldbit; - - __asm__ __volatile__( LOCK_PREFIX - "btsl %2,%1\n\tsbbl %0,%0" - :"=r" (oldbit),"=m" (ADDR) - :"Ir" (nr)); - return oldbit; -} - -int test_and_clear_bit(int nr, volatile void * addr) -{ - int oldbit; - - __asm__ __volatile__( LOCK_PREFIX - "btrl %2,%1\n\tsbbl %0,%0" - :"=r" (oldbit),"=m" (ADDR) - :"Ir" (nr)); - return oldbit; -} - -int test_and_change_bit(int nr, volatile void * addr) -{ - int oldbit; - - __asm__ __volatile__( LOCK_PREFIX - "btcl %2,%1\n\tsbbl %0,%0" - :"=r" (oldbit),"=m" (ADDR) - :"Ir" (nr)); - return oldbit; -} - -/* - * This routine doesn't need to be atomic. - */ -int __constant_test_bit(int nr, const volatile void * addr) -{ - return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0; -} - -int test_bit(int nr, volatile void * addr) -{ - int oldbit; - - __asm__ __volatile__( - "btl %2,%1\n\tsbbl %0,%0" - :"=r" (oldbit) - :"m" (ADDR),"Ir" (nr)); - return oldbit; -} - -#if 0 -#define test_bit(nr,addr) \ -(__builtin_constant_p(nr) ? \ - __constant_test_bit((nr),(addr)) : \ - __test_bit((nr),(addr))) -#endif - -/* - * Find-bit routines.. - */ -int find_first_zero_bit(void * addr, unsigned size) -{ - int d0, d1, d2; - int res; - - if (!size) - return 0; - __asm__("cld\n\t" - "movl $-1,%%eax\n\t" - "xorl %%edx,%%edx\n\t" - "repe; scasl\n\t" - "je 1f\n\t" - "xorl -4(%%edi),%%eax\n\t" - "subl $4,%%edi\n\t" - "bsfl %%eax,%%edx\n" - "1:\tsubl %%ebx,%%edi\n\t" - "shll $3,%%edi\n\t" - "addl %%edi,%%edx" - :"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2) - :"1" ((size + 31) >> 5), "2" (addr), "b" (addr)); - return res; -} - -int find_next_zero_bit (void * addr, int size, int offset) -{ - unsigned long * p = ((unsigned long *) addr) + (offset >> 5); - int set = 0, bit = offset & 31, res; - - if (bit) { - /* - * Look for zero in first byte - */ - __asm__("bsfl %1,%0\n\t" - "jne 1f\n\t" - "movl $32, %0\n" - "1:" - : "=r" (set) - : "r" (~(*p >> bit))); - if (set < (32 - bit)) - return set + offset; - set = 32 - bit; - p++; - } - /* - * No zero yet, search remaining full bytes for a zero - */ - res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr)); - return (offset + set + res); -} - -/* - * ffz = Find First Zero in word. Undefined if no zero exists, - * so code should check against ~0UL first.. - */ -unsigned long ffz(unsigned long word) -{ - __asm__("bsfl %1,%0" - :"=r" (word) - :"r" (~word)); - return word; -} diff --git a/rosapps/drivers/ramdrv/minix/bitops.h b/rosapps/drivers/ramdrv/minix/bitops.h deleted file mode 100644 index 7c0123bbd3a..00000000000 --- a/rosapps/drivers/ramdrv/minix/bitops.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _I386_BITOPS_H -#define _I386_BITOPS_H - -/* - * Copyright 1992, Linus Torvalds. - */ - -/* - * These have to be done with inline assembly: that way the bit-setting - * is guaranteed to be atomic. All bit operations return 0 if the bit - * was cleared before the operation and != 0 if it was not. - * - * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). - */ - -/* - * Function prototypes to keep gcc -Wall happy - */ -extern void set_bit(int nr, volatile void * addr); -extern void clear_bit(int nr, volatile void * addr); -extern void change_bit(int nr, volatile void * addr); -extern int test_and_set_bit(int nr, volatile void * addr); -extern int test_and_clear_bit(int nr, volatile void * addr); -extern int test_and_change_bit(int nr, volatile void * addr); -extern int test_bit(int nr, volatile void * addr); -extern int find_first_zero_bit(void * addr, unsigned size); -extern int find_next_zero_bit (void * addr, int size, int offset); -extern unsigned long ffz(unsigned long word); - -#endif /* _I386_BITOPS_H */ diff --git a/rosapps/drivers/ramdrv/minix/block.c b/rosapps/drivers/ramdrv/minix/block.c deleted file mode 100644 index 33b6813d310..00000000000 --- a/rosapps/drivers/ramdrv/minix/block.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/minix.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include - -//#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ****************************************************************/ - -static unsigned int MinixGetBlock(PDEVICE_OBJECT DeviceObject, - PMINIX_DEVICE_EXTENSION DeviceExt, - struct minix_inode* inode, - ULONG FileOffset) -{ - int block; - PVOID BaseAddress; - ULONG blk; - - blk = FileOffset / BLOCKSIZE; - - DPRINT("MinixGetBlock(inode %x, blk %d)\n",inode,blk); - - /* - * The first few blocks are available in the inode - */ - if (blk < 7) - { - block = inode->i_zone[blk]; - return(block); - } - blk = blk - 7; - - /* - * Retrieve a single-indirect block - */ - if (blk < 512) - { - block = inode->i_zone[7]; - - BaseAddress = ExAllocatePool(NonPagedPool, 512); - - MinixReadSector(DeviceObject, - block, - BaseAddress); - - block = ((PUSHORT)(BaseAddress))[blk]; - - ExFreePool(BaseAddress); - - return(block); - } - - /* - * Get a double indirect block - */ - blk = blk - 512; - block = inode->i_zone[8]; - - BaseAddress = ExAllocatePool(NonPagedPool, 512); - - MinixReadSector(DeviceObject, - block, - BaseAddress); - - block = ((PUSHORT)BaseAddress)[(blk>>9)&511]; - - ExFreePool(BaseAddress); - - - BaseAddress = ExAllocatePool(NonPagedPool, 512); - - MinixReadSector(DeviceObject, - block, - BaseAddress); - - block = ((PUSHORT)BaseAddress)[blk&512]; - - ExFreePool(BaseAddress); - - return(block); -} - -NTSTATUS MinixReadBlock(PDEVICE_OBJECT DeviceObject, - PMINIX_DEVICE_EXTENSION DeviceExt, - struct minix_inode* inode, - ULONG FileOffset, - PULONG DiskOffset) -{ - unsigned int block; - - DPRINT("MinixReadBlock()\n"); - - block = MinixGetBlock(DeviceObject, DeviceExt,inode, FileOffset); - - (*DiskOffset) = block * BLOCKSIZE; - - return(STATUS_SUCCESS); -} diff --git a/rosapps/drivers/ramdrv/minix/blockdev.c b/rosapps/drivers/ramdrv/minix/blockdev.c deleted file mode 100644 index 387280d305d..00000000000 --- a/rosapps/drivers/ramdrv/minix/blockdev.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/minix.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ***************************************************************/ - -BOOLEAN MinixReadPage(PDEVICE_OBJECT DeviceObject, - ULONG Offset, - PVOID Buffer) -{ - ULONG i; - BOOLEAN Result; - - for (i=0; i<4; i++) - { - Result = MinixReadSector(DeviceObject, - (Offset + (i * PAGE_SIZE)) / BLOCKSIZE, - (Buffer + (i * PAGE_SIZE))); - if (!Result) - { - return(Result); - } - } - return(TRUE); -} - -BOOLEAN MinixReadSector(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN PVOID Buffer) -{ - LARGE_INTEGER sectorNumber; - PIRP irp; - IO_STATUS_BLOCK ioStatus; - KEVENT event; - NTSTATUS status; - ULONG sectorSize; - PULONG mbr; - - DPRINT("MinixReadSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n", - pDeviceObject,DiskSector,Buffer); - - sectorNumber.u.HighPart = 0; - sectorNumber.u.LowPart = DiskSector * BLOCKSIZE; - - KeInitializeEvent(&event, NotificationEvent, FALSE); - - sectorSize = BLOCKSIZE; - - mbr = ExAllocatePool(NonPagedPool, sectorSize); - - if (!mbr) { - return FALSE; - } - - - irp = IoBuildSynchronousFsdRequest(IRP_MJ_READ, - pDeviceObject, - mbr, - sectorSize, - §orNumber, - &event, - &ioStatus ); - - if (!irp) { - ExFreePool(mbr); - return FALSE; - } - - status = IoCallDriver(pDeviceObject, - irp); - - if (status == STATUS_PENDING) { - KeWaitForSingleObject(&event, - Suspended, - KernelMode, - FALSE, - NULL); - status = ioStatus.Status; - } - - if (!NT_SUCCESS(status)) { - ExFreePool(mbr); - return FALSE; - } - - RtlCopyMemory(Buffer,mbr,sectorSize); - - ExFreePool(mbr); - return TRUE; -} - -BOOLEAN MinixWriteSector(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN PVOID Buffer) -{ - LARGE_INTEGER sectorNumber; - PIRP irp; - IO_STATUS_BLOCK ioStatus; - KEVENT event; - NTSTATUS status; - ULONG sectorSize; - - DPRINT("MinixWriteSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n", - pDeviceObject,DiskSector,Buffer); - - sectorNumber.u.HighPart = 0; - sectorNumber.u.LowPart = DiskSector * BLOCKSIZE; - - KeInitializeEvent(&event, NotificationEvent, FALSE); - - sectorSize = BLOCKSIZE; - - irp = IoBuildSynchronousFsdRequest(IRP_MJ_WRITE, - pDeviceObject, - Buffer, - sectorSize, - §orNumber, - &event, - &ioStatus ); - - - status = IoCallDriver(pDeviceObject, - irp); - - if (status == STATUS_PENDING) { - KeWaitForSingleObject(&event, - Suspended, - KernelMode, - FALSE, - NULL); - status = ioStatus.Status; - } - - if (!NT_SUCCESS(status)) { - return FALSE; - } - - return TRUE; -} diff --git a/rosapps/drivers/ramdrv/minix/cache.c b/rosapps/drivers/ramdrv/minix/cache.c deleted file mode 100644 index 417932ca76c..00000000000 --- a/rosapps/drivers/ramdrv/minix/cache.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/cache.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -//#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS MinixRequestCacheBlock(PDEVICE_OBJECT DeviceObject, - PBCB Bcb, - ULONG FileOffset, - PVOID* BaseAddress, - PCACHE_SEGMENT* CacheSeg) -{ - BOOLEAN UptoDate; - - CcRosRequestCacheSegment(Bcb, - FileOffset, - BaseAddress, - &UptoDate, - CacheSeg); - if (!UptoDate) - { - MinixReadPage(DeviceObject, - PAGE_ROUND_DOWN(FileOffset), - BaseAddress); - } - BaseAddress = BaseAddress + (FileOffset % PAGE_SIZE); - - return(STATUS_SUCCESS); -} - diff --git a/rosapps/drivers/ramdrv/minix/dir.c b/rosapps/drivers/ramdrv/minix/dir.c deleted file mode 100644 index 0b727c3f6dc..00000000000 --- a/rosapps/drivers/ramdrv/minix/dir.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/minix.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -//#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ****************************************************************/ - -BOOLEAN MinixCompareUnicodeStringToAnsi(PCH AnsiStr, - PWCHAR UnicodeStr, - ULONG MaxLen) -{ - unsigned int i = 0; - - while (ii_size/MINIX_DIR_ENTRY_SIZE);i++) - { - CHECKPOINT; - offset = i*MINIX_DIR_ENTRY_SIZE; - if ((offset%BLOCKSIZE)==0) - { - MinixReadBlock(DeviceObject, - DeviceExt, - dir, - offset/BLOCKSIZE, - &DiskOffset); - MinixReadSector(DeviceObject, - DiskOffset, - Block); - } - current_entry = (struct minix_dir_entry *) - (Block+offset%BLOCKSIZE); - DPRINT("Inode %x Name %.30s\n",current_entry->inode, - current_entry->name); - if (MinixCompareUnicodeStringToAnsi(current_entry->name, - Name,30)) - { - inode = current_entry->inode; - ExFreePool(Block); - DPRINT("MinixDirLookup() = %d\n",inode); - return(inode); - } - } - CHECKPOINT; - ExFreePool(Block); - DPRINT("MinixDirLookup() = %d\n",0); - return(0); -} - -NTSTATUS MinixOpen(PDEVICE_OBJECT DeviceObject, - MINIX_DEVICE_EXTENSION* DeviceExt, - PFILE_OBJECT FileObject, - PMINIX_FSCONTEXT result, - PULONG Information) -{ - PWSTR current; - PWSTR next; - PWSTR string; - struct minix_inode current_dir; - unsigned int current_ino; - - string = ExAllocatePool(NonPagedPool, - 2*(wcslen(FileObject->FileName.Buffer)+1)); - wcscpy(string, FileObject->FileName.Buffer); - - DbgPrint("MinixOpen(DeviceObject %x, DeviceName %S, result %x)\n", - DeviceObject,string,result); - - - next = &string[0]; - current = next+1; - - current_ino = MINIX_ROOT_INO; - - while (next != NULL && current_ino != 0) - { - MinixReadInode(DeviceObject,DeviceExt,current_ino,¤t_dir); - - DPRINT("current %S next %x\n",current,next); - - *next = '\\'; - current = next+1; - next = wcschr(next+1,'\\'); - if (next!=NULL) - { - *next=0; - } - - current_ino = MinixDirLookup(DeviceExt, - DeviceObject, - ¤t_dir, - current); - } - if (next == NULL && current_ino != 0) - { - MinixReadInode(DeviceObject,DeviceExt,current_ino,¤t_dir); - } - else - { - (*Information) = FILE_DOES_NOT_EXIST; - return(STATUS_UNSUCCESSFUL); - } - - result = ExAllocatePool(NonPagedPool, sizeof(MINIX_FSCONTEXT)); - memcpy(&result->inode,¤t_dir,sizeof(struct minix_inode)); - - DPRINT("MinxOpen() = STATUS_SUCCESS\n",0); - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -MinixClose(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - - DPRINT("MinixClose(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - ExFreePool(FileObject->FsContext); - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -MinixDirectoryControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); -// PFILE_OBJECT FileObject = Stack->FileObject; - - if (Stack->MinorFunction != IRP_MN_QUERY_DIRECTORY) - { - return(STATUS_NOT_IMPLEMENTED); - } - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -MinixCreate(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - NTSTATUS Status; - PMINIX_FSCONTEXT result; - MINIX_DEVICE_EXTENSION* DeviceExt; - - DPRINT("MinixCreate(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); - DPRINT("Opening file %x %S\n",FileObject->FileName.Buffer, - FileObject->FileName.Buffer); - DPRINT("FileObject->FileName.Buffer %x\n", - FileObject->FileName.Buffer); - - DeviceExt = (MINIX_DEVICE_EXTENSION *)DeviceObject->DeviceExtension; - result = ExAllocatePool(NonPagedPool,sizeof(struct minix_inode)); - DPRINT("result %x\n",result); - Status = MinixOpen(DeviceExt->AttachedDevice, - DeviceExt, - FileObject, - result, - &Irp->IoStatus.Information); - - if (NT_SUCCESS(Status)) - { - FileObject->FsContext = result; - } - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - DPRINT("Finished MinixCreate()\n"); - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - diff --git a/rosapps/drivers/ramdrv/minix/inode.c b/rosapps/drivers/ramdrv/minix/inode.c deleted file mode 100644 index d7a38c34587..00000000000 --- a/rosapps/drivers/ramdrv/minix/inode.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/minix.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include "bitops.h" -#include - -#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS MinixDeleteInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino) -{ - PULONG Buffer; - ULONG off; - - Buffer = ExAllocatePool(NonPagedPool,BLOCKSIZE); - MinixReadSector(Volume, (ino / 8192)+2, (PVOID)Buffer); - off = ino % 8192; - clear_bit(off%32,&Buffer[off/32]); - MinixWriteSector(Volume, (ino / 8192)+2, (PVOID)Buffer); - return(STATUS_SUCCESS); -} - -static ULONG MinixAllocateInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt) -{ - ULONG i; - PULONG Buffer; - ULONG ino; - - Buffer = ExAllocatePool(NonPagedPool,BLOCKSIZE); - for (i=0; isb->s_imap_blocks; i++) - { - MinixReadSector(Volume,i + 2,Buffer); - ino = find_first_zero_bit(Buffer,8192); - if (ino < 8192) - { - set_bit(ino%32,&Buffer[32]); - MinixWriteSector(Volume,i + 2,Buffer); - ExFreePool(Buffer); - return(ino + (i*8192)); - } - } - ExFreePool(Buffer); - return(0); -} - -ULONG MinixNewInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - struct minix_inode* new_inode) -{ - ULONG ino; - - ino = MinixAllocateInode(Volume,DeviceExt); - if (ino == 0) - { - return(0); - } - MinixWriteInode(Volume,DeviceExt,ino,new_inode); - return(ino); -} - -NTSTATUS MinixWriteInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino, - struct minix_inode* result) -{ - int block; - char* buffer; - struct minix_inode* inodes; - - DPRINT("MinixWriteInode(ino %x, result %x)\n",ino,result); - - buffer = ExAllocatePool(NonPagedPool,1024); - inodes = (struct minix_inode *)buffer; - - block = 2 + DeviceExt->sb->s_imap_blocks + DeviceExt->sb->s_zmap_blocks - + ((ino-1) / MINIX_INODES_PER_BLOCK); - MinixReadSector(Volume,block,buffer); - memcpy(&inodes[(ino-1)%MINIX_INODES_PER_BLOCK],result, - sizeof(struct minix_inode)); - MinixWriteSector(Volume,block,buffer); - - ExFreePool(buffer); - return(STATUS_SUCCESS); -} - -NTSTATUS MinixReadInode(PDEVICE_OBJECT DeviceObject, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino, - struct minix_inode* result) -{ - int block; - struct minix_inode* inodes; - PVOID BaseAddress; - - DPRINT("MinixReadInode(ino %x, result %x)\n",ino,result); - - block = 2 + DeviceExt->sb->s_imap_blocks + DeviceExt->sb->s_zmap_blocks - + ((ino-1) / MINIX_INODES_PER_BLOCK); - DPRINT("Reading block %x offset %x\n",block,block*BLOCKSIZE); - DPRINT("Index %x\n",(ino-1)%MINIX_INODES_PER_BLOCK); - - BaseAddress = ExAllocatePool(NonPagedPool, PAGE_SIZE); - - MinixReadPage(DeviceObject, - block, - BaseAddress); - - inodes = (struct minix_inode *)(BaseAddress + ((block % 4) * 512)); - - memcpy(result, - &inodes[(ino-1)%MINIX_INODES_PER_BLOCK], - sizeof(struct minix_inode)); - DPRINT("result->i_uid %x\n",result->i_uid); - DPRINT("result->i_size %x\n",result->i_size); - - ExFreePool(BaseAddress); - - return(STATUS_SUCCESS); -} diff --git a/rosapps/drivers/ramdrv/minix/minix.h b/rosapps/drivers/ramdrv/minix/minix.h deleted file mode 100644 index 5b9b4780cac..00000000000 --- a/rosapps/drivers/ramdrv/minix/minix.h +++ /dev/null @@ -1,133 +0,0 @@ -#include -#include - -#define MINIX_ROOT_INO 1 - -/* Not the same as the bogus LINK_MAX in . Oh well. */ -#define MINIX_LINK_MAX 250 - -#define MINIX_I_MAP_SLOTS 8 -#define MINIX_Z_MAP_SLOTS 64 -#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */ -#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */ -#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */ -#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */ -#define MINIX_VALID_FS 0x0001 /* Clean fs. */ -#define MINIX_ERROR_FS 0x0002 /* fs has errors. */ - -#define MINIX_INODES_PER_BLOCK ((BLOCKSIZE)/(sizeof (struct minix_inode))) -#define MINIX2_INODES_PER_BLOCK ((BLOCKSIZE)/(sizeof (struct minix2_inode))) - -#define MINIX_V1 0x0001 /* original minix fs */ -#define MINIX_V2 0x0002 /* minix V2 fs */ - - -/* - * This is the original minix inode layout on disk. - * Note the 8-bit gid and atime and ctime. - */ -struct minix_inode { - unsigned short int i_mode; - unsigned short int i_uid; - unsigned long i_size; - unsigned long i_time; - unsigned char i_gid; - unsigned char i_nlinks; - unsigned short int i_zone[9]; -}; - -/* - * The new minix inode has all the time entries, as well as - * long block numbers and a third indirect block (7+1+1+1 - * instead of 7+1+1). Also, some previously 8-bit values are - * now 16-bit. The inode is now 64 bytes instead of 32. - */ -struct minix2_inode { - unsigned short int i_mode; - unsigned short int i_nlinks; - unsigned short int i_uid; - unsigned short int i_gid; - unsigned long i_size; - unsigned long i_atime; - unsigned long i_mtime; - unsigned long i_ctime; - unsigned long i_zone[10]; -}; - -/* - * minix super-block data on disk - */ -struct minix_super_block { - unsigned short int s_ninodes; - unsigned short int s_nzones; - unsigned short int s_imap_blocks; - unsigned short int s_zmap_blocks; - unsigned short int s_firstdatazone; - unsigned short int s_log_zone_size; - unsigned long s_max_size; - unsigned short int s_magic; - unsigned short int s_state; - unsigned long s_zones; -}; - -struct minix_dir_entry { - unsigned short int inode; - char name[0]; -}; -#define MINIX_DIR_ENTRY_SIZE (sizeof(struct minix_dir_entry)+30) - -BOOLEAN MinixReadSector(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN PVOID Buffer); -BOOLEAN MinixWriteSector(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN PVOID Buffer); - -#define BLOCKSIZE (1024) - -//extern PDRIVER_OBJECT DriverObject; - -typedef struct -{ - PDEVICE_OBJECT AttachedDevice; - struct minix_inode root_inode; - char superblock_buf[BLOCKSIZE]; - struct minix_super_block* sb; - PFILE_OBJECT FileObject; -} MINIX_DEVICE_EXTENSION, *PMINIX_DEVICE_EXTENSION; - -typedef struct -{ - struct minix_inode inode; -} MINIX_FSCONTEXT, *PMINIX_FSCONTEXT; - -NTSTATUS STDCALL MinixCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL MinixClose(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL MinixWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL MinixRead(PDEVICE_OBJECT DeviceObject, PIRP Irp); -NTSTATUS STDCALL MinixDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); - -ULONG MinixNewInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - struct minix_inode* new_inode); -NTSTATUS MinixWriteInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino, - struct minix_inode* result); -NTSTATUS MinixReadInode(PDEVICE_OBJECT DeviceObject, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino, - struct minix_inode* result); -NTSTATUS MinixDeleteInode(PDEVICE_OBJECT Volume, - MINIX_DEVICE_EXTENSION* DeviceExt, - ULONG ino); - -NTSTATUS MinixReadBlock(PDEVICE_OBJECT DeviceObject, - PMINIX_DEVICE_EXTENSION DeviceExt, - struct minix_inode* inode, - ULONG FileOffset, - PULONG DiskOffset); - -BOOLEAN MinixReadPage(PDEVICE_OBJECT DeviceObject, - ULONG Offset, - PVOID Buffer); diff --git a/rosapps/drivers/ramdrv/minix/minix.rc b/rosapps/drivers/ramdrv/minix/minix.rc deleted file mode 100644 index b234bf6cbb9..00000000000 --- a/rosapps/drivers/ramdrv/minix/minix.rc +++ /dev/null @@ -1,7 +0,0 @@ -/* $Id$ */ - -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Minix IFS Driver\0" -#define REACTOS_STR_INTERNAL_NAME "minix\0" -#define REACTOS_STR_ORIGINAL_FILENAME "minix.sys\0" -#include diff --git a/rosapps/drivers/ramdrv/minix/minix_fs.h b/rosapps/drivers/ramdrv/minix/minix_fs.h deleted file mode 100644 index 8cfdb9005c7..00000000000 --- a/rosapps/drivers/ramdrv/minix/minix_fs.h +++ /dev/null @@ -1,80 +0,0 @@ -#define MINIX_ROOT_INO 1 - -/* Not the same as the bogus LINK_MAX in . Oh well. */ -#define MINIX_LINK_MAX 250 - -#define MINIX_I_MAP_SLOTS 8 -#define MINIX_Z_MAP_SLOTS 64 -#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */ -#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */ -#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */ -#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */ -#define MINIX_VALID_FS 0x0001 /* Clean fs. */ -#define MINIX_ERROR_FS 0x0002 /* fs has errors. */ - -#define MINIX_INODES_PER_BLOCK ((BLOCKSIZE)/(sizeof (struct minix_inode))) -#define MINIX2_INODES_PER_BLOCK ((BLOCKSIZE)/(sizeof (struct minix2_inode))) - -#define MINIX_V1 0x0001 /* original minix fs */ -#define MINIX_V2 0x0002 /* minix V2 fs */ - - -/* - * This is the original minix inode layout on disk. - * Note the 8-bit gid and atime and ctime. - */ -struct minix_inode { - unsigned short int i_mode; - unsigned short int i_uid; - unsigned long i_size; - unsigned long i_time; - unsigned char i_gid; - unsigned char i_nlinks; - unsigned short int i_zone[9]; -}; - -/* - * The new minix inode has all the time entries, as well as - * long block numbers and a third indirect block (7+1+1+1 - * instead of 7+1+1). Also, some previously 8-bit values are - * now 16-bit. The inode is now 64 bytes instead of 32. - */ -struct minix2_inode { - unsigned short int i_mode; - unsigned short int i_nlinks; - unsigned short int i_uid; - unsigned short int i_gid; - unsigned long i_size; - unsigned long i_atime; - unsigned long i_mtime; - unsigned long i_ctime; - unsigned long i_zone[10]; -}; - -/* - * minix super-block data on disk - */ -struct minix_super_block { - unsigned short int s_ninodes; - unsigned short int s_nzones; - unsigned short int s_imap_blocks; - unsigned short int s_zmap_blocks; - unsigned short int s_firstdatazone; - unsigned short int s_log_zone_size; - unsigned long s_max_size; - unsigned short int s_magic; - unsigned short int s_state; - unsigned long s_zones; -}; - -struct minix_dir_entry { - unsigned short int inode; - char name[0]; -}; -#define MINIX_DIR_ENTRY_SIZE (sizeof(struct minix_dir_entry)+30) - -BOOLEAN MinixReadSector(IN PDEVICE_OBJECT pDeviceObject, - IN ULONG DiskSector, - IN UCHAR* Buffer); - -#define BLOCKSIZE (1024) diff --git a/rosapps/drivers/ramdrv/minix/mount.c b/rosapps/drivers/ramdrv/minix/mount.c deleted file mode 100644 index d8e228d3c48..00000000000 --- a/rosapps/drivers/ramdrv/minix/mount.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/* - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/minix.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -//#define NDEBUG -#include - -#include "minix.h" - -/* GLOBALS *******************************************************************/ - -static PDRIVER_OBJECT DriverObject; - -/* FUNCTIONS ****************************************************************/ - -VOID MinixMount(PDEVICE_OBJECT DeviceToMount) -{ - PDEVICE_OBJECT DeviceObject; - MINIX_DEVICE_EXTENSION* DeviceExt; - - IoCreateDevice(DriverObject, - sizeof(MINIX_DEVICE_EXTENSION), - NULL, - FILE_DEVICE_FILE_SYSTEM, - 0, - FALSE, - &DeviceObject); - DeviceObject->Flags = DeviceObject->Flags | DO_DIRECT_IO; - DeviceExt = DeviceObject->DeviceExtension; - - MinixReadSector(DeviceToMount,1,DeviceExt->superblock_buf); - DeviceExt->sb = (struct minix_super_block *)(DeviceExt->superblock_buf); - - DeviceExt->StorageDevice = DeviceToMount; - DeviceExt->StorageDevice->Vpb->DeviceObject = DeviceObject; - DeviceExt->StorageDevice->Vpb->RealDevice = DeviceExt->StorageDevice; - DeviceExt->StorageDevice->Vpb->Flags |= VPB_MOUNTED; - DeviceObject->StackSize = DeviceExt->StorageDevice->StackSize + 1; - DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; - - DeviceExt->FileObject = IoCreateStreamFileObject(NULL, DeviceObject); -} - -NTSTATUS STDCALL -MinixFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); -// PVPB vpb = Stack->Parameters.Mount.Vpb; - PDEVICE_OBJECT DeviceToMount = Stack->Parameters.Mount.DeviceObject; - NTSTATUS Status; - char* superblock_buf; - struct minix_super_block* sb; - - DbgPrint("MinixFileSystemControl(DeviceObject %x, Irp %x)\n",DeviceObject, - Irp); - DPRINT("DeviceToMount %x\n",DeviceToMount); - - superblock_buf = ExAllocatePool(NonPagedPool,BLOCKSIZE); - - DPRINT("MinixReadSector %x\n",MinixReadSector); - MinixReadSector(DeviceToMount,1,superblock_buf); - sb = (struct minix_super_block *)superblock_buf; - DPRINT("Magic %x\n",sb->s_magic); - DPRINT("Imap blocks %x\n",sb->s_imap_blocks); - DPRINT("Zmap blocks %x\n",sb->s_zmap_blocks); - if (sb->s_magic==MINIX_SUPER_MAGIC2) - { - DPRINT("%s() = STATUS_SUCCESS\n",__FUNCTION__); - MinixMount(DeviceToMount); - Status = STATUS_SUCCESS; - } - else - { - DPRINT("%s() = STATUS_UNRECOGNIZED_VOLUME\n",__FUNCTION__); - Status = STATUS_UNRECOGNIZED_VOLUME; - } - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return(Status); -} - -NTSTATUS STDCALL -DriverEntry(PDRIVER_OBJECT _DriverObject, - PUNICODE_STRING RegistryPath) -/* - * FUNCTION: Called by the system to initalize the driver - * ARGUMENTS: - * DriverObject = object describing this driver - * RegistryPath = path to our configuration entries - * RETURNS: Success or failure - */ -{ - PDEVICE_OBJECT DeviceObject; - NTSTATUS ret; - UNICODE_STRING DeviceName; - - DbgPrint("Minix FSD 0.0.1\n"); - - DriverObject = _DriverObject; - - RtlInitUnicodeString(&DeviceName, - L"\\Device\\Minix"); - ret = IoCreateDevice(DriverObject, - 0, - &DeviceName, - FILE_DEVICE_FILE_SYSTEM, - 0, - FALSE, - &DeviceObject); - if (!NT_SUCCESS(ret)) - { - return(ret); - } - - DeviceObject->Flags = 0; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = MinixClose; - DriverObject->MajorFunction[IRP_MJ_CREATE] = MinixCreate; - DriverObject->MajorFunction[IRP_MJ_READ] = MinixRead; - DriverObject->MajorFunction[IRP_MJ_WRITE] = MinixWrite; - DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = - MinixFileSystemControl; - DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = - MinixDirectoryControl; - DriverObject->DriverUnload = NULL; - - IoRegisterFileSystem(DeviceObject); - - return(STATUS_SUCCESS); -} - diff --git a/rosapps/drivers/ramdrv/minix/rw.c b/rosapps/drivers/ramdrv/minix/rw.c deleted file mode 100644 index 4bf0310e229..00000000000 --- a/rosapps/drivers/ramdrv/minix/rw.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: services/fs/minix/rw.c - * PURPOSE: Minix FSD - * PROGRAMMER: David Welch (welch@mcmail.com) - * UPDATE HISTORY: - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -#define NDEBUG -#include - -#include "minix.h" - -/* FUNCTIONS ****************************************************************/ - -NTSTATUS STDCALL -MinixWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - DPRINT("MinixWrite(DeviceObject %x Irp %x)\n",DeviceObject,Irp); - - Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; - Irp->IoStatus.Information = 0; - return(STATUS_UNSUCCESSFUL); -} - -static NTSTATUS MinixReadFilePage(PDEVICE_OBJECT DeviceObject, - PMINIX_DEVICE_EXTENSION DeviceExt, - PMINIX_FSCONTEXT FsContext, - ULONG Offset, - PVOID* Buffer) -{ - NTSTATUS Status; - ULONG i; - ULONG DiskOffset; - - *Buffer = ExAllocatePool(NonPagedPool, 4096); - - for (i=0; i<4; i++) - { - Status = MinixReadBlock(DeviceObject, - DeviceExt, - &FsContext->inode, - Offset + (i * BLOCKSIZE), - &DiskOffset); - MinixReadSector(DeviceObject, - DiskOffset / BLOCKSIZE, - (*Buffer) + (i * BLOCKSIZE)); - } - return(STATUS_SUCCESS); -} - -NTSTATUS STDCALL -MinixRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - ULONG Length; - PVOID Buffer; - ULONG Offset; - ULONG CurrentOffset; - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - PFILE_OBJECT FileObject = Stack->FileObject; - MINIX_DEVICE_EXTENSION* DeviceExt = DeviceObject->DeviceExtension; - PMINIX_FSCONTEXT FsContext = (PMINIX_FSCONTEXT)FileObject->FsContext; - unsigned int i; - PVOID DiskBuffer; - - DPRINT("MinixRead(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); - - Length = Stack->Parameters.Read.Length; - Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); - Offset = Stack->Parameters.Read.ByteOffset.u.LowPart; - - DPRINT("Length %d Buffer %x Offset %x\n",Length,Buffer,Offset); - - CurrentOffset=Offset; - - DPRINT("inode->i_size %d\n",inode->i_size); - - if (Offset > FsContext->inode.i_size) - { - Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp,IO_NO_INCREMENT); - return(STATUS_UNSUCCESSFUL); - } - if ((Offset+Length) > FsContext->inode.i_size) - { - Length = FsContext->inode.i_size - Offset; - } - - if ((Offset%PAGE_SIZE)!=0) - { - CurrentOffset = Offset - (Offset%PAGE_SIZE); - - MinixReadFilePage(DeviceObject, - DeviceExt, - FsContext, - CurrentOffset, - &DiskBuffer); - - memcpy(Buffer, - DiskBuffer+(Offset%PAGE_SIZE), - min(PAGE_SIZE - (Offset%PAGE_SIZE),Length)); - - ExFreePool(DiskBuffer); - - DPRINT("(BLOCKSIZE - (Offset%BLOCKSIZE)) %d\n", - (BLOCKSIZE - (Offset%BLOCKSIZE))); - DPRINT("Length %d\n",Length); - CurrentOffset = CurrentOffset + PAGE_SIZE; - Buffer = Buffer + PAGE_SIZE - (Offset%PAGE_SIZE); - Length = Length - min(PAGE_SIZE - (Offset%PAGE_SIZE),Length); - DPRINT("CurrentOffset %d Buffer %x Length %d\n",CurrentOffset,Buffer, - Length); - } - for (i=0;i<(Length/PAGE_SIZE);i++) - { - CHECKPOINT; - - DPRINT("Length %d\n",Length); - - MinixReadFilePage(DeviceObject, - DeviceExt, - FsContext, - CurrentOffset, - &DiskBuffer); - memcpy(Buffer, DiskBuffer, PAGE_SIZE); - - ExFreePool(DiskBuffer); - - CurrentOffset = CurrentOffset + PAGE_SIZE; - Buffer = Buffer + PAGE_SIZE; - } - if ((Length%PAGE_SIZE) > 0) - { - CHECKPOINT; - - DPRINT("Length %x Buffer %x\n",(Length%PAGE_SIZE),Buffer); - - MinixReadFilePage(DeviceObject, - DeviceExt, - FsContext, - CurrentOffset, - &DiskBuffer); - - memcpy(Buffer, DiskBuffer, (Length%PAGE_SIZE)); - - ExFreePool(DiskBuffer); - - } - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = Length; - IoCompleteRequest(Irp,IO_NO_INCREMENT); - return(STATUS_SUCCESS); -} diff --git a/rosapps/drivers/ramdrv/ramdrv.c b/rosapps/drivers/ramdrv/ramdrv.c deleted file mode 100644 index 797924eca79..00000000000 --- a/rosapps/drivers/ramdrv/ramdrv.c +++ /dev/null @@ -1,242 +0,0 @@ -#include -#include -#include "ramdrv.h" -#include -#include "bzlib.h" - -static NTSTATUS STDCALL RamdrvDispatchDeviceControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PIO_STACK_LOCATION IrpStack; - ULONG ControlCode, InputLength, OutputLength; - NTSTATUS Status; - - DPRINT("RamdrvDispatchDeviceControl\n"); - - IrpStack = IoGetCurrentIrpStackLocation(Irp); - ControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode; - InputLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength; - OutputLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength; - - switch (ControlCode) - { - case IOCTL_DISK_GET_DRIVE_GEOMETRY: - if (OutputLength < sizeof(DISK_GEOMETRY)) - { - Status = STATUS_INVALID_PARAMETER; - } - else - { - PDISK_GEOMETRY Geometry = Irp->AssociatedIrp.SystemBuffer; - Geometry->MediaType = F3_1Pt44_512; - Geometry->Cylinders.QuadPart = 80; - Geometry->TracksPerCylinder = 2 * 18; - Geometry->SectorsPerTrack = 18; - Geometry->BytesPerSector = 512; - Status = STATUS_SUCCESS; - Irp->IoStatus.Information = sizeof(DISK_GEOMETRY); - } - break; - default: - Status = STATUS_INVALID_DEVICE_REQUEST; - } - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); - return Status; -} - -static NTSTATUS STDCALL RamdrvDispatchReadWrite(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - PRAMDRV_DEVICE_EXTENSION devext = (PRAMDRV_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - PIO_STACK_LOCATION Stk = IoGetCurrentIrpStackLocation( Irp ); - - if( Stk->Parameters.Read.ByteOffset.u.HighPart || - Stk->Parameters.Read.ByteOffset.u.LowPart >= devext->Size ) - { - Irp->IoStatus.Status = STATUS_END_OF_FILE; - Irp->IoStatus.Information = 0; - IoCompleteRequest( Irp, 0 ); - return STATUS_END_OF_FILE; - } - if( (Stk->Parameters.Read.ByteOffset.u.LowPart + Stk->Parameters.Read.Length) > devext->Size ) - Stk->Parameters.Read.Length = devext->Size - Stk->Parameters.Read.ByteOffset.u.LowPart; - if( Stk->MajorFunction == IRP_MJ_READ ) - RtlCopyMemory( MmGetSystemAddressForMdl( Irp->MdlAddress ), - (PVOID)((ULONG_PTR)devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart), - Stk->Parameters.Read.Length ); - else RtlCopyMemory( (PVOID)((ULONG_PTR)devext->Buffer + Stk->Parameters.Read.ByteOffset.u.LowPart), - MmGetSystemAddressForMdl( Irp->MdlAddress ), - Stk->Parameters.Read.Length ); - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = Stk->Parameters.Read.Length; - IoCompleteRequest( Irp, 0 ); - return STATUS_SUCCESS; -} - -static NTSTATUS STDCALL RamdrvDispatchOpenClose(PDEVICE_OBJECT DeviceObject, - PIRP Irp) -{ - DPRINT("RamdrvDispatchOpenClose\n"); - return STATUS_SUCCESS; -} - -NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath) -{ - UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Ramdisk"); - NTSTATUS Status; - PDEVICE_OBJECT DeviceObject; - PRAMDRV_DEVICE_EXTENSION devext; - UNICODE_STRING LinkName = RTL_CONSTANT_STRING(L"\\??\\Z:"); - UNICODE_STRING ImageName = RTL_CONSTANT_STRING(L"\\Device\\Floppy0\\ramdisk.bz2"); - HANDLE file; - OBJECT_ATTRIBUTES objattr; - IO_STATUS_BLOCK iosb; - LARGE_INTEGER allocsize; - HANDLE event; - void *tbuff; - unsigned int dstlen = 1024 * 1440; - FILE_STANDARD_INFORMATION finfo; - ULONG err; - - DPRINT("Ramdisk driver\n"); - - /* Export other driver entry points... */ - DriverObject->MajorFunction[IRP_MJ_CREATE] = RamdrvDispatchOpenClose; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = RamdrvDispatchOpenClose; - DriverObject->MajorFunction[IRP_MJ_READ] = RamdrvDispatchReadWrite; - DriverObject->MajorFunction[IRP_MJ_WRITE] = RamdrvDispatchReadWrite; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = RamdrvDispatchDeviceControl; - - - // create device and symbolic link - Status = IoCreateDevice( DriverObject, - sizeof( RAMDRV_DEVICE_EXTENSION ), - &DeviceName, - FILE_DEVICE_DISK, - 0, - FALSE, - &DeviceObject ); - if( !NT_SUCCESS( Status ) ) - return Status; - DeviceObject->Flags |= DO_DIRECT_IO; - devext = (PRAMDRV_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - devext->Size = 1440 * 1024; - devext->Buffer = ExAllocatePool( PagedPool, devext->Size ); - if( !devext->Buffer ) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - goto cleandevice; - } - IoCreateSymbolicLink( &LinkName, &DeviceName ); - - InitializeObjectAttributes( &objattr, - &ImageName, - 0, - 0, - 0 ); - allocsize.u.LowPart = allocsize.u.HighPart = 0; - - Status = ZwOpenFile( &file, - GENERIC_READ, - &objattr, - &iosb, - FILE_SHARE_READ, - FILE_NO_INTERMEDIATE_BUFFERING ); - - if( !NT_SUCCESS( Status ) ) - { - DPRINT( "Failed to open floppy\n" ); - goto cleanbuffer; - } - - InitializeObjectAttributes( &objattr, - 0, - 0, - 0, - 0 ); - Status = ZwCreateEvent( &event, - 0, - &objattr, - NotificationEvent, - FALSE ); - if( !NT_SUCCESS( Status ) ) - { - DPRINT( "Failed to create event\n" ); - goto cleanfile; - } - - Status = ZwQueryInformationFile( file, - &iosb, - &finfo, - sizeof( finfo ), - FileStandardInformation ); - - if( !NT_SUCCESS( Status ) ) - { - DPRINT1( "Failed to query file information\n" ); - goto cleanevent; - } - tbuff = ExAllocatePool( PagedPool, finfo.EndOfFile.u.LowPart ); - if( !tbuff ) - { - DPRINT1( "Failed to allocate buffer of size %d\n", finfo.EndOfFile.u.LowPart ); - Status = STATUS_INSUFFICIENT_RESOURCES; - goto cleanevent; - } - - Status = ZwReadFile( file, - event, - 0, - 0, - &iosb, - tbuff, - finfo.EndOfFile.u.LowPart, - &allocsize, - 0 ); - - if( !NT_SUCCESS( Status ) ) - { - DPRINT( "Failed to read floppy\n" ); - goto cleantbuff; - } - Status = ZwWaitForSingleObject( event, FALSE, 0 ); - if( Status != STATUS_WAIT_0 || !NT_SUCCESS( iosb.Status ) ) - { - DPRINT( "Failed to read floppy\n" ); - goto cleantbuff; - } - DPRINT( "RAMDRV: Read in %d bytes, decompressing now\n", iosb.Information ); - err = BZ2_bzBuffToBuffDecompress( devext->Buffer, - &dstlen, - tbuff, - iosb.Information, - 1, - 0 ); - if( err == 0 ) - { - DPRINT( "RAMDRV: Image Decompressed\n"); - } - else DbgPrint( "RAMDRV: Failed to decomparess image, error: %d\n", err ); - ExFreePool( tbuff ); - ZwClose( file ); - ZwClose( event ); - return STATUS_SUCCESS; - - cleantbuff: - ExFreePool( tbuff ); - cleanevent: - ZwClose( event ); - cleanfile: - ZwClose( file ); - cleanbuffer: - ExFreePool( devext->Buffer ); - - cleandevice: - IoDeleteDevice( DeviceObject ); - for(;;); - - return Status; -} - diff --git a/rosapps/drivers/ramdrv/ramdrv.h b/rosapps/drivers/ramdrv/ramdrv.h deleted file mode 100644 index c391ae883da..00000000000 --- a/rosapps/drivers/ramdrv/ramdrv.h +++ /dev/null @@ -1,8 +0,0 @@ -typedef struct _RAMDRV_DEVICE_EXTENSION { - void *Buffer; - unsigned long Size; -} RAMDRV_DEVICE_EXTENSION, *PRAMDRV_DEVICE_EXTENSION; - -NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath); - diff --git a/rosapps/drivers/ramdrv/ramdrv.rbuild b/rosapps/drivers/ramdrv/ramdrv.rbuild deleted file mode 100644 index 4b89cc6fadc..00000000000 --- a/rosapps/drivers/ramdrv/ramdrv.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - . - . - ntoskrnl - hal - bzip2 - ramdrv.c - ramdrv.rc - diff --git a/rosapps/drivers/ramdrv/ramdrv.rc b/rosapps/drivers/ramdrv/ramdrv.rc deleted file mode 100644 index 9a0ffbb883b..00000000000 --- a/rosapps/drivers/ramdrv/ramdrv.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "RAM Disk Device Driver\0" -#define REACTOS_STR_INTERNAL_NAME "ramdrv\0" -#define REACTOS_STR_ORIGINAL_FILENAME "ramdrv.sys\0" -#include