diff options
Diffstat (limited to 'kernel/floppy.c')
| -rw-r--r-- | kernel/floppy.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/kernel/floppy.c b/kernel/floppy.c index bbe88df..5f34c56 100644 --- a/kernel/floppy.c +++ b/kernel/floppy.c @@ -32,7 +32,7 @@ void flpydsk_wait_irq (); void flpydsk_check_int (uint32_t* st0, uint32_t* cyl); static volatile int _CurrentDrive=0; -static volatile uint8_t _FloppyDiskIRQ = 0; +static volatile uint8_t _FloppyDiskIRQ; // temporary dma hack //! initialize DMA to use phys addr 1k-64k @@ -173,13 +173,13 @@ void flpydsk_motor_on() log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"starting motor..."); //x86_outb (FLPYDSK_DOR, FLPYDSK_DOR_MASK_DRIVE0_MOTOR | FLPYDSK_DOR_MASK_RESET); x86_outb (FLPYDSK_DOR, 0x1c); - sleep(50); + sleep(10); // wait ~ 1/3 second } + void flpydsk_motor_off() { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"stopping motor..."); x86_outb (FLPYDSK_DOR, 0x0c); - //x86_outb (FLPYDSK_DOR,FLPYDSK_DOR_MASK_RESET); } int flpydsk_calibrate (uint32_t drive) { @@ -310,17 +310,24 @@ void flpydsk_reset() void int_floppy() { - _FloppyDiskIRQ=1; - } void flpydsk_wait_irq() { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"waiting for irq6"); - sleep(25); - while ( _FloppyDiskIRQ == 0); + + while (1) + { + sleep(2); + x86_int_disable(); + if(_FloppyDiskIRQ==1)break; + x86_int_enable(); + + } _FloppyDiskIRQ = 0; + x86_int_enable(); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"irq6 received"); } @@ -536,17 +543,22 @@ void floppy_init() _CurrentDrive=0; _FloppyDiskIRQ = 0; - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"driver init"); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"driver init (wathchdog: 0x%08X)",&_FloppyDiskIRQ); flpydsk_reset (); - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"test read (sector: 0)"); - flpydsk_read_sector(64); + char *dma=0x0500; + + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"test reading"); + + flpydsk_read_sector(65); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"finished reading"); - char *dma=0x0500; + flpydsk_reset (); + flpydsk_read_sector(64); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"finished reading"); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"test read: %s",dma); flpydsk_reset (); |
