Fixed cursor behavior in VTerm
[tpg/acess2.git] / Modules / Storage / FDD / fdd.c
index 6ad2b1a..b0bbf78 100644 (file)
@@ -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);
        

UCC git Repository :: git.ucc.asn.au