Commit f36b42e7 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] floppy98.c build fixes

From: "Randy.Dunlap" <rddunlap@osdl.org>

floppy98.c (along with other PC-9800 files) has not been updated lately.  It
won't build currently (2.6.5).

This patch makes floppy98 build cleanly.
parent 13ba0403
...@@ -168,8 +168,11 @@ static int print_unex=1; ...@@ -168,8 +168,11 @@ static int print_unex=1;
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/version.h> #include <linux/version.h>
#define FDPATCHES
#include <linux/fdreg.h> #include <linux/fdreg.h>
#include <linux/blkdev.h>
#include <linux/blkpg.h>
#include <linux/cdrom.h> /* for the compatibility eject ioctl */
#include <linux/completion.h>
/* /*
* 1998/1/21 -- Richard Gooch <rgooch@atnf.csiro.au> -- devfs support * 1998/1/21 -- Richard Gooch <rgooch@atnf.csiro.au> -- devfs support
...@@ -179,7 +182,6 @@ static int print_unex=1; ...@@ -179,7 +182,6 @@ static int print_unex=1;
#include <linux/fd.h> #include <linux/fd.h>
#define FLOPPY98_MOTOR_MASK 0x08 #define FLOPPY98_MOTOR_MASK 0x08
#define FDPATCHES
#include <linux/hdreg.h> #include <linux/hdreg.h>
#define FD98_STATUS (0 + FD_IOPORT ) #define FD98_STATUS (0 + FD_IOPORT )
#define FD98_DATA (2 + FD_IOPORT ) #define FD98_DATA (2 + FD_IOPORT )
...@@ -250,9 +252,10 @@ static int use_virtual_dma; ...@@ -250,9 +252,10 @@ static int use_virtual_dma;
*/ */
static spinlock_t floppy_lock = SPIN_LOCK_UNLOCKED; static spinlock_t floppy_lock = SPIN_LOCK_UNLOCKED;
static struct completion device_release;
static unsigned short virtual_dma_port=0x3f0; static unsigned short virtual_dma_port=0x3f0;
void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs); irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs);
static int set_mode(char mask, char data); static int set_mode(char mask, char data);
static void register_devfs_entries (int drive) __init; static void register_devfs_entries (int drive) __init;
...@@ -987,9 +990,9 @@ static void empty(void) ...@@ -987,9 +990,9 @@ static void empty(void)
static DECLARE_WORK(floppy_work, NULL, NULL); static DECLARE_WORK(floppy_work, NULL, NULL);
static void schedule_bh( void (*handler)(void*) ) static void schedule_bh(void (*handler) (void))
{ {
PREPARE_WORK(&floppy_work, handler, NULL); PREPARE_WORK(&floppy_work, (void (*)(void *))handler, NULL);
schedule_work(&floppy_work); schedule_work(&floppy_work);
} }
...@@ -1627,7 +1630,7 @@ static void print_result(char *message, int inr) ...@@ -1627,7 +1630,7 @@ static void print_result(char *message, int inr)
} }
/* interrupt handler. Note that this can be called externally on the Sparc */ /* interrupt handler. Note that this can be called externally on the Sparc */
void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs) irqreturn_t floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
{ {
void (*handler)(void) = do_floppy; void (*handler)(void) = do_floppy;
int do_print; int do_print;
...@@ -1648,7 +1651,7 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1648,7 +1651,7 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
printk("floppy interrupt on bizarre fdc %d\n",fdc); printk("floppy interrupt on bizarre fdc %d\n",fdc);
printk("handler=%p\n", handler); printk("handler=%p\n", handler);
is_alive("bizarre fdc"); is_alive("bizarre fdc");
return; return IRQ_NONE;
} }
FDCS->reset = 0; FDCS->reset = 0;
...@@ -1661,7 +1664,7 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1661,7 +1664,7 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
* activity. * activity.
*/ */
do_print = !handler && !initialising; do_print = !handler && print_unex && !initialising;
inr = result(); inr = result();
if (inr && do_print) if (inr && do_print)
...@@ -1701,13 +1704,16 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -1701,13 +1704,16 @@ void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
} while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2); } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2);
} }
if (handler) { if (handler) {
schedule_bh( (void *)(void *) handler); schedule_bh(handler);
} else { } else {
#if 0 #if 0
FDCS->reset = 1; FDCS->reset = 1;
#endif #endif
} }
is_alive("normal interrupt end"); is_alive("normal interrupt end");
/* FIXME! Was it really for us? */
return IRQ_HANDLED;
} }
static void recalibrate_floppy(void) static void recalibrate_floppy(void)
...@@ -4231,11 +4237,16 @@ static int __init floppy_setup(char *str) ...@@ -4231,11 +4237,16 @@ static int __init floppy_setup(char *str)
static int have_no_fdc= -ENODEV; static int have_no_fdc= -ENODEV;
static void floppy_device_release(struct device *dev)
{
complete(&device_release);
}
static struct platform_device floppy_device = { static struct platform_device floppy_device = {
.name = "floppy", .name = "floppy",
.id = 0, .id = 0,
.dev = { .dev = {
.name = "Floppy Drive", .release = floppy_device_release,
}, },
}; };
...@@ -4267,10 +4278,8 @@ int __init floppy_init(void) ...@@ -4267,10 +4278,8 @@ int __init floppy_init(void)
} }
devfs_mk_dir (NULL, "floppy", NULL); devfs_mk_dir (NULL, "floppy", NULL);
if (register_blkdev(FLOPPY_MAJOR,"fd")) { if ((err = register_blkdev(FLOPPY_MAJOR,"fd")))
err = -EBUSY;
goto out; goto out;
}
for (i=0; i<N_DRIVE; i++) { for (i=0; i<N_DRIVE; i++) {
disks[i]->major = FLOPPY_MAJOR; disks[i]->major = FLOPPY_MAJOR;
...@@ -4288,7 +4297,7 @@ int __init floppy_init(void) ...@@ -4288,7 +4297,7 @@ int __init floppy_init(void)
else else
floppy_sizes[i] = MAX_DISK_SIZE << 1; floppy_sizes[i] = MAX_DISK_SIZE << 1;
floppy_queue = blk_init_queue(do_fd_request, &floppy_lock) floppy_queue = blk_init_queue(do_fd_request, &floppy_lock);
if (!floppy_queue) if (!floppy_queue)
goto out_queue; goto out_queue;
...@@ -4628,10 +4637,14 @@ void cleanup_module(void) ...@@ -4628,10 +4637,14 @@ void cleanup_module(void)
{ {
int drive; int drive;
init_completion(&device_release);
platform_device_unregister(&floppy_device); platform_device_unregister(&floppy_device);
blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256);
unregister_blkdev(FLOPPY_MAJOR, "fd"); unregister_blkdev(FLOPPY_MAJOR, "fd");
for (drive = 0; drive < N_DRIVE; drive++) { for (drive = 0; drive < N_DRIVE; drive++) {
del_timer_sync(&motor_off_timer[drive]);
if ((allowed_drive_mask & (1 << drive)) && if ((allowed_drive_mask & (1 << drive)) &&
fdc_state[FDC(drive)].version != FDC_NONE) { fdc_state[FDC(drive)].version != FDC_NONE) {
del_gendisk(disks[drive]); del_gendisk(disks[drive]);
...@@ -4641,9 +4654,17 @@ void cleanup_module(void) ...@@ -4641,9 +4654,17 @@ void cleanup_module(void)
} }
devfs_remove("floppy"); devfs_remove("floppy");
del_timer_sync(&fd_timeout);
del_timer_sync(&fd_timer);
blk_cleanup_queue(floppy_queue); blk_cleanup_queue(floppy_queue);
if (usage_count)
floppy_release_irq_and_dma();
/* eject disk, if any */ /* eject disk, if any */
fd_eject(0); fd_eject(0);
wait_for_completion(&device_release);
} }
MODULE_PARM(floppy,"s"); MODULE_PARM(floppy,"s");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment