X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FStorage%2FFDD%2Ffdd.c;h=b0bbf784d3b03f467de96e044e25835f6884f70f;hb=a928d1d2a70761eece125cdbe9950ec0b1112ce3;hp=6ad2b1a118488b6a6b75c4301a4d9480a77c492f;hpb=a79ebcb3a2e206251f44e99376ec2ed6c2bacc63;p=tpg%2Facess2.git diff --git a/Modules/Storage/FDD/fdd.c b/Modules/Storage/FDD/fdd.c index 6ad2b1a1..b0bbf784 100644 --- a/Modules/Storage/FDD/fdd.c +++ b/Modules/Storage/FDD/fdd.c @@ -105,9 +105,9 @@ void FDD_int_SendByte(int base, char byte); void FDD_Reset(int id); void FDD_Recalibrate(int disk); int FDD_int_SeekTrack(int disk, int head, int track); -void FDD_int_TimerCallback(int arg); -void FDD_int_StopMotor(int disk); -void FDD_int_StartMotor(int disk); +void FDD_int_TimerCallback(void *Arg); +void FDD_int_StopMotor(void *Arg); +void FDD_int_StartMotor(int Disk); int FDD_int_GetDims(int type, int lba, int *c, int *h, int *s, int *spt); // === GLOBALS === @@ -136,6 +136,7 @@ tDevFS_Driver gFDD_DriverInfo = { int FDD_Install(char **Arguments) { Uint8 data; + char **args = Arguments; // Determine Floppy Types (From CMOS) outb(0x70, 0x10); @@ -145,6 +146,14 @@ int FDD_Install(char **Arguments) gFDD_Devices[0].track[0] = -1; gFDD_Devices[1].track[1] = -1; + if(args) { + for(;*args;args++) + { + if(strcmp(*args, "disable")==0) + return MODULE_ERR_NOTNEEDED; + } + } + Log_Log("FDD", "Detected Disk 0: %s and Disk 1: %s", cFDD_TYPES[data>>4], cFDD_TYPES[data&0xF]); if( data == 0 ) { @@ -208,7 +217,7 @@ void FDD_UnloadModule() LOCK(&glFDD); for(i=0;i<4;i++) { Time_RemoveTimer(gFDD_Devices[i].timer); - FDD_int_StopMotor(i); + FDD_int_StopMotor((void *)(Uint)i); } RELEASE(&glFDD); //IRQ_Clear(6); @@ -218,7 +227,7 @@ void FDD_UnloadModule() * \fn char *FDD_ReadDir(tVFS_Node *Node, int pos) * \brief Read Directory */ -char *FDD_ReadDir(tVFS_Node *Node, int Pos) +char *FDD_ReadDir(tVFS_Node *UNUSED(Node), int Pos) { char name[2] = "0\0"; @@ -235,7 +244,7 @@ char *FDD_ReadDir(tVFS_Node *Node, int Pos) * \fn tVFS_Node *FDD_FindDir(tVFS_Node *Node, char *filename); * \brief Find File Routine (for vfs_node) */ -tVFS_Node *FDD_FindDir(tVFS_Node *Node, char *Filename) +tVFS_Node *FDD_FindDir(tVFS_Node *UNUSED(Node), char *Filename) { int i; @@ -278,14 +287,11 @@ static const char *casIOCTLS[] = {DRV_IOCTLNAMES,DRV_DISK_IOCTLNAMES,NULL}; * \fn int FDD_IOCtl(tVFS_Node *Node, int id, void *data) * \brief Stub ioctl function */ -int FDD_IOCtl(tVFS_Node *Node, int ID, void *Data) +int FDD_IOCtl(tVFS_Node *UNUSED(Node), int ID, void *Data) { switch(ID) { - case DRV_IOCTL_TYPE: return DRV_TYPE_DISK; - case DRV_IOCTL_IDENT: return ModUtil_SetIdent(Data, "FDD"); - case DRV_IOCTL_VERSION: return FDD_VERSION; - case DRV_IOCTL_LOOKUP: return ModUtil_LookupString((char**)casIOCTLS, Data); + BASE_IOCTLS(DRV_TYPE_DISK, "FDD", FDD_VERSION, casIOCTLS); case DISK_IOCTL_GETBLOCKSIZE: return 512; @@ -726,7 +732,7 @@ void FDD_Recalibrate(int disk) FDD_SensInt(cPORTBASE[disk>>1], NULL, NULL); LOG("Stopping Motor"); - FDD_int_StopMotor(disk); + gFDD_Devices[disk].timer = Time_CreateTimer(MOTOR_OFF_DELAY, FDD_int_StopMotor, (void*)(Uint)disk); LEAVE('-'); } @@ -766,13 +772,14 @@ void FDD_Reset(int id) * \fn void FDD_int_TimerCallback() * \brief Called by timer */ -void FDD_int_TimerCallback(int arg) +void FDD_int_TimerCallback(void *Arg) { - ENTER("iarg", arg); - if(gFDD_Devices[arg].motorState == 1) - gFDD_Devices[arg].motorState = 2; - Time_RemoveTimer(gFDD_Devices[arg].timer); - gFDD_Devices[arg].timer = -1; + int disk = (Uint)Arg; + ENTER("iarg", disk); + if(gFDD_Devices[disk].motorState == 1) + gFDD_Devices[disk].motorState = 2; + Time_RemoveTimer(gFDD_Devices[disk].timer); + gFDD_Devices[disk].timer = -1; LEAVE('-'); } @@ -787,16 +794,16 @@ void FDD_int_StartMotor(int disk) state |= 1 << (4+disk); outb( cPORTBASE[ disk>>1 ] + PORT_DIGOUTPUT, state ); gFDD_Devices[disk].motorState = 1; - gFDD_Devices[disk].timer = Time_CreateTimer(MOTOR_ON_DELAY, FDD_int_TimerCallback, (void*)(tVAddr)disk); + gFDD_Devices[disk].timer = Time_CreateTimer(MOTOR_ON_DELAY, FDD_int_TimerCallback, (void*)(Uint)disk); } /** * \fn void FDD_int_StopMotor(int disk) * \brief Stops FDD Motor */ -void FDD_int_StopMotor(int disk) +void FDD_int_StopMotor(void *Arg) { - Uint8 state; + Uint8 state, disk = (Uint)Arg; if( IS_LOCKED(&glFDD) ) return ; ENTER("iDisk", disk);