/* * $Log: P:/user/amir/lite/vcs/flsystem.c_v $ * * Rev 1.8 19 Aug 1997 20:04:16 danig * Andray's changes * * Rev 1.7 24 Jul 1997 18:11:48 amirban * Changed to flsystem.c * * Rev 1.6 07 Jul 1997 15:21:48 amirban * Ver 2.0 * * Rev 1.5 29 Aug 1996 14:18:04 amirban * Less assembler * * Rev 1.4 18 Aug 1996 13:48:08 amirban * Comments * * Rev 1.3 09 Jul 1996 14:37:02 amirban * CPU_i386 define * * Rev 1.2 16 Jun 1996 14:02:38 amirban * Use int 1C instead of int 8 * * Rev 1.1 09 Jun 1996 18:16:20 amirban * Added removeTimer * * Rev 1.0 20 Mar 1996 13:33:06 amirban * Initial revision. */ /************************************************************************/ /* */ /* FAT-FTL Lite Software Development Kit */ /* Copyright (C) M-Systems Ltd. 1995-1996 */ /* */ /************************************************************************/ #include "flbase.h" #ifdef NT5PORT #include NTsocketParams driveInfo[SOCKETS]; NTsocketParams * pdriveInfo = driveInfo; VOID *myMalloc(ULONG numberOfBytes) { return ExAllocatePool(NonPagedPool, numberOfBytes); } VOID timerInit(VOID) {}; /* Wait for specified number of milliseconds */ void flDelayMsecs(unsigned milliseconds) { unsigned innerLoop = 0xffffL; unsigned i,j; for(i = 0;i < milliseconds; i++){ for(j = 0;j < innerLoop; j++){ } } } #if POLLING_INTERVAL > 0 VOID (*intervalRoutine_flsystem)(VOID); ULONG timerInterval_flsystem; extern KTIMER timerObject; extern KDPC timerDpc; extern BOOLEAN timerWasStarted; VOID timerRoutine( IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 ) { (*intervalRoutine_flsystem)(); } /* Install an interval timer */ FLStatus flInstallTimer(VOID (*routine)(VOID), unsigned intervalMsec) { intervalRoutine_flsystem = routine; timerInterval_flsystem = intervalMsec; KeInitializeDpc(&timerDpc, timerRoutine, NULL); KeInitializeTimer(&timerObject); startIntervalTimer(); return flOK; } VOID startIntervalTimer(VOID) { LARGE_INTEGER dueTime; dueTime.QuadPart = -((LONG)timerInterval_flsystem * 10); KeSetTimerEx(&timerObject, dueTime, (LONG) timerInterval_flsystem, &timerDpc); timerWasStarted = TRUE; } #ifdef EXIT /* Remove an interval timer */ VOID flRemoveTimer(VOID) { if (timerWasStarted) { KeCancelTimer(&timerObject); timerWasStarted = FALSE; } if (intervalRoutine_flsystem != NULL) { (*intervalRoutine_flsystem)(); /* Call it twice to shut down everything */ (*intervalRoutine_flsystem)(); intervalRoutine_flsystem = NULL; } } #endif /* EXIT */ #endif /* POLLING_INTERVAL */ /* Return current DOS time */ unsigned flCurrentTime(VOID) { return 0; // not used } /* Return current DOS date */ unsigned flCurrentDate(VOID) { return 0; // not used } VOID flSysfunInit(VOID) { timerInit(); } /* Return a random number from 0 to 255 */ unsigned flRandByte(VOID) { LARGE_INTEGER tickCount; KeQueryTickCount(&tickCount); return tickCount.LowPart & 0xff; } /*----------------------------------------------------------------------*/ /* f l C r e a t e M u t e x */ /* */ /* Creates or initializes a mutex */ /* */ /* Parameters: */ /* mutex : Pointer to mutex */ /* */ /* Returns: */ /* FLStatus : 0 on success, otherwise failure */ /*----------------------------------------------------------------------*/ FLStatus flCreateMutex(FLMutex *mutex) { if(mutex){ KeInitializeSpinLock(&mutex->Mutex); return flOK; } DEBUG_PRINT("Failed flCreateMutex()\n"); return flGeneralFailure; } /*----------------------------------------------------------------------*/ /* f l D e l e t e M u t e x */ /* */ /* Deletes a mutex. */ /* */ /* Parameters: */ /* mutex : Pointer to mutex */ /* */ /*----------------------------------------------------------------------*/ VOID flDeleteMutex(FLMutex *mutex) { } /*----------------------------------------------------------------------*/ /* f l T a k e M u t e x */ /* */ /* Try to take mutex, if free. */ /* */ /* Parameters: */ /* mutex : Pointer to mutex */ /* */ /* Returns: */ /* int : TRUE = Mutex taken, FALSE = Mutex not free */ /*----------------------------------------------------------------------*/ FLBoolean flTakeMutex(FLMutex *mutex) { if(mutex){ KeAcquireSpinLock(&mutex->Mutex, &mutex->cIrql ); return TRUE; } DEBUG_PRINT("Failed flTakeMutex() on mutex\n"); return FALSE; } /*----------------------------------------------------------------------*/ /* f l F r e e M u t e x */ /* */ /* Free mutex. */ /* */ /* Parameters: */ /* mutex : Pointer to mutex */ /* */ /*----------------------------------------------------------------------*/ VOID flFreeMutex(FLMutex *mutex) { if(mutex){ KeReleaseSpinLock(&mutex->Mutex, mutex->cIrql); } else{ DEBUG_PRINT("Failed flFreeMutex() on mutex\n"); } } UCHAR flInportb(unsigned portId) { return 0; // not used } VOID flOutportb(unsigned portId, UCHAR value) { // not used } /*----------------------------------------------------------------------*/ /* f l A d d L o n g T o F a r P o i n t e r */ /* */ /* Add unsigned long offset to the far pointer */ /* */ /* Parameters: */ /* ptr : far pointer */ /* offset : offset in bytes */ /* */ /*----------------------------------------------------------------------*/ VOID FAR0* flAddLongToFarPointer(VOID FAR0 *ptr, ULONG offset) { return ((VOID FAR0 *)((UCHAR FAR0*)ptr+offset)); } #ifdef ENVIRONMENT_VARS void FAR0 * NAMING_CONVENTION flmemcpy(void FAR0* dest,const void FAR0 *src,size_t count) { size_t i; unsigned char FAR0 *ldest = (unsigned char FAR0 *)dest; const unsigned char FAR0 *lsrc = (unsigned char FAR0 *)src; for(i=0;( i < count );i++,ldest++,lsrc++) *(ldest) = *(lsrc); return dest; } void FAR0 * NAMING_CONVENTION flmemset(void FAR0* dest,int c,size_t count) { size_t i; unsigned char FAR0 *ldest = (unsigned char FAR0 *)dest; for(i=0;( i < count );i++,ldest++) *(ldest) = (unsigned char)c; return dest; } int NAMING_CONVENTION flmemcmp(const void FAR0* dest,const void FAR0 *src,size_t count) { size_t i; const unsigned char FAR0 *ldest = (unsigned char FAR0 *)dest; const unsigned char FAR0 *lsrc = (unsigned char FAR0 *)src; for(i=0;( i < count );i++,ldest++,lsrc++) if( *(ldest) != *(lsrc) ) return (*(ldest)-*(lsrc)); return 0; } #endif #endif /* NT5PORT */