summaryrefslogtreecommitdiffstats
path: root/drivers/block/floppy.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/floppy.c')
-rw-r--r--drivers/block/floppy.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 7179c6f33..bc77f31f8 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -151,6 +151,7 @@ static int use_virtual_dma=0; /* virtual DMA for Intel */
static unsigned short virtual_dma_port=0x3f0;
void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs);
static int set_dor(int fdc, char mask, char data);
+static inline int __get_order(unsigned long size);
#include <asm/floppy.h>
@@ -170,6 +171,20 @@ static int set_dor(int fdc, char mask, char data);
/* Dma Memory related stuff */
+/* Pure 2^n version of get_order */
+static inline int __get_order(unsigned long size)
+{
+ int order;
+
+ size = (size-1) >> (PAGE_SHIFT-1);
+ order = -1;
+ do {
+ size >>= 1;
+ order++;
+ } while (size);
+ return order;
+}
+
#ifndef fd_dma_mem_free
#define fd_dma_mem_free(addr, size) free_pages(addr, __get_order(size))
#endif
@@ -1207,6 +1222,7 @@ static void fdc_specify(void)
/*DPRINT("FIFO enabled\n");*/
}
+#ifndef __sparc__
switch (raw_cmd->rate & 0x03) {
case 3:
dtr = 1000;
@@ -1261,6 +1277,7 @@ static void fdc_specify(void)
output_byte(FDCS->spec1 = spec1);
output_byte(FDCS->spec2 = spec2);
}
+#endif
} /* fdc_specify */
/* Set the FDC's data transfer rate on behalf of the specified drive.
@@ -1534,7 +1551,8 @@ static void seek_floppy(void)
(raw_cmd->flags & FD_RAW_NEED_SEEK))
track = raw_cmd->track;
else {
- setup_rw_floppy(); return;
+ setup_rw_floppy();
+ return;
}
}
@@ -1661,9 +1679,9 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
}
if (handler) {
if(intr_count >= 2)
- schedule_bh( (void *)(void *) handler);
+ schedule_bh( (void *)(void *) handler);
else
- handler();
+ handler();
} else
FDCS->reset = 1;
is_alive("normal interrupt end");
@@ -1709,7 +1727,7 @@ static void reset_fdc(void)
/* Irrelevant for systems with true DMA (i386). */
fd_disable_dma();
- if (FDCS->version >= FDC_82077)
+ if (FDCS->version >= FDC_82072A)
fd_outb(0x80 | (FDCS->dtr &3), FD_STATUS);
else {
fd_outb(FDCS->dor & ~0x04, FD_DOR);
@@ -2748,8 +2766,7 @@ static void process_fd_request(void)
static void do_fd_request(void)
{
if(usage_count == 0) {
- printk("warning: usage count=0, CURRENT=%p exiting\n", CURRENT);
- printk("sect=%ld cmd=%d\n", CURRENT->sector, CURRENT->cmd);
+ printk("warning: usage count=0, CURRENT=%p exiting\n", CURRENT);+ printk("sect=%ld cmd=%d\n", CURRENT->sector, CURRENT->cmd);
return;
}
sti();