298 lines
7.4 KiB
C
298 lines
7.4 KiB
C
/*
|
|
* $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 <ntddk.h>
|
|
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 */
|