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 ===
int FDD_Install(char **Arguments)
{
Uint8 data;
+ char **args = Arguments;
// Determine Floppy Types (From CMOS)
outb(0x70, 0x10);
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 ) {
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);
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('-');
}
* \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('-');
}
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);