floppy: do a very minimal style cleanup of the floppy driver

Yes, some of this will likely be replaced in later patches, but I do not see
anyone else coming out of the woodwork with any patches for this driver, so
I'll ignore comments about churn.  I want to get this driver cleaned up, and
if I'm going to do so I want to start with this basic style cleanup to reduce
the reading pain a bit.

Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Jesper Juhl 2007-10-16 23:30:57 -07:00 committed by Linus Torvalds
parent d2da272a4e
commit 06f748c475
1 changed files with 73 additions and 50 deletions

View File

@ -5,6 +5,7 @@
* Copyright (C) 1993, 1994 Alain Knaff * Copyright (C) 1993, 1994 Alain Knaff
* Copyright (C) 1998 Alan Cox * Copyright (C) 1998 Alan Cox
*/ */
/* /*
* 02.12.91 - Changed to static variables to indicate need for reset * 02.12.91 - Changed to static variables to indicate need for reset
* and recalibrate. This makes some things easier (output_byte reset * and recalibrate. This makes some things easier (output_byte reset
@ -149,7 +150,7 @@
#define REALLY_SLOW_IO #define REALLY_SLOW_IO
#define DEBUGT 2 #define DEBUGT 2
#define DCL_DEBUG /* debug disk change line */ #define DCL_DEBUG /* debug disk change line */
/* do print messages for unexpected interrupts */ /* do print messages for unexpected interrupts */
static int print_unex = 1; static int print_unex = 1;
@ -161,10 +162,8 @@ static int print_unex = 1;
#include <linux/workqueue.h> #include <linux/workqueue.h>
#define FDPATCHES #define FDPATCHES
#include <linux/fdreg.h> #include <linux/fdreg.h>
#include <linux/fd.h> #include <linux/fd.h>
#include <linux/hdreg.h> #include <linux/hdreg.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
@ -274,8 +273,7 @@ static inline void fallback_on_nodma_alloc(char **addr, size_t l)
return; /* we have the memory */ return; /* we have the memory */
if (can_use_virtual_dma != 2) if (can_use_virtual_dma != 2)
return; /* no fallback allowed */ return; /* no fallback allowed */
printk printk("DMA memory shortage. Temporarily falling back on virtual DMA\n");
("DMA memory shortage. Temporarily falling back on virtual DMA\n");
*addr = (char *)nodma_mem_alloc(l); *addr = (char *)nodma_mem_alloc(l);
#else #else
return; return;
@ -291,8 +289,8 @@ static int initialising = 1;
#define TOMINOR(x) ((x & 3) | ((x & 4) << 5)) #define TOMINOR(x) ((x & 3) | ((x & 4) << 5))
#define UNIT(x) ((x) & 0x03) /* drive on fdc */ #define UNIT(x) ((x) & 0x03) /* drive on fdc */
#define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */ #define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */
/* reverse mapping from unit and fdc to drive */
#define REVDRIVE(fdc, unit) ((unit) + ((fdc) << 2)) #define REVDRIVE(fdc, unit) ((unit) + ((fdc) << 2))
/* reverse mapping from unit and fdc to drive */
#define DP (&drive_params[current_drive]) #define DP (&drive_params[current_drive])
#define DRS (&drive_state[current_drive]) #define DRS (&drive_state[current_drive])
#define DRWE (&write_errors[current_drive]) #define DRWE (&write_errors[current_drive])
@ -356,7 +354,6 @@ static int inr; /* size of reply buffer, when called from interrupt */
#define R_HEAD (reply_buffer[4]) #define R_HEAD (reply_buffer[4])
#define R_SECTOR (reply_buffer[5]) #define R_SECTOR (reply_buffer[5])
#define R_SIZECODE (reply_buffer[6]) #define R_SIZECODE (reply_buffer[6])
#define SEL_DLY (2*HZ/100) #define SEL_DLY (2*HZ/100)
/* /*
@ -472,8 +469,8 @@ static struct floppy_struct floppy_type[32] = {
{ 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5" */ { 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5" */
{ 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5" */ { 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5" */
{ 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5" */ { 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5" */
{ 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5" */ { 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5" */
{ 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800" }, /* 30 800KB 3.5" */ { 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800" }, /* 30 800KB 3.5" */
{ 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5" */ { 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5" */
}; };
@ -539,12 +536,12 @@ static char *floppy_track_buffer;
static int max_buffer_sectors; static int max_buffer_sectors;
static int *errors; static int *errors;
typedef void (*done_f) (int); typedef void (*done_f)(int);
static struct cont_t { static struct cont_t {
void (*interrupt) (void); /* this is called after the interrupt of the void (*interrupt)(void); /* this is called after the interrupt of the
* main command */ * main command */
void (*redo) (void); /* this is called to retry the operation */ void (*redo)(void); /* this is called to retry the operation */
void (*error) (void); /* this is called to tally an error */ void (*error)(void); /* this is called to tally an error */
done_f done; /* this is called to say if the operation has done_f done; /* this is called to say if the operation has
* succeeded/failed */ * succeeded/failed */
} *cont; } *cont;
@ -694,7 +691,6 @@ static void reschedule_timeout(int drive, const char *message, int marg)
} }
#define INFBOUND(a,b) (a)=max_t(int, a, b) #define INFBOUND(a,b) (a)=max_t(int, a, b)
#define SUPBOUND(a,b) (a)=min_t(int, a, b) #define SUPBOUND(a,b) (a)=min_t(int, a, b)
/* /*
@ -733,6 +729,7 @@ static void reschedule_timeout(int drive, const char *message, int marg)
static int disk_change(int drive) static int disk_change(int drive)
{ {
int fdc = FDC(drive); int fdc = FDC(drive);
#ifdef FLOPPY_SANITY_CHECK #ifdef FLOPPY_SANITY_CHECK
if (time_before(jiffies, UDRS->select_date + UDP->select_delay)) if (time_before(jiffies, UDRS->select_date + UDP->select_delay))
DPRINT("WARNING disk change called early\n"); DPRINT("WARNING disk change called early\n");
@ -892,7 +889,6 @@ static int _lock_fdc(int drive, int interruptible, int line)
set_current_state(TASK_RUNNING); set_current_state(TASK_RUNNING);
remove_wait_queue(&fdc_wait, &wait); remove_wait_queue(&fdc_wait, &wait);
flush_scheduled_work(); flush_scheduled_work();
} }
command_status = FD_COMMAND_NONE; command_status = FD_COMMAND_NONE;
@ -968,7 +964,9 @@ static void floppy_off(unsigned int drive)
*/ */
static void scandrives(void) static void scandrives(void)
{ {
int i, drive, saved_drive; int i;
int drive;
int saved_drive;
if (DP->select_delay) if (DP->select_delay)
return; return;
@ -1146,7 +1144,9 @@ static void show_floppy(void);
/* waits until the fdc becomes ready */ /* waits until the fdc becomes ready */
static int wait_til_ready(void) static int wait_til_ready(void)
{ {
int counter, status; int status;
int counter;
if (FDCS->reset) if (FDCS->reset)
return -1; return -1;
for (counter = 0; counter < 10000; counter++) { for (counter = 0; counter < 10000; counter++) {
@ -1193,7 +1193,8 @@ static int output_byte(char byte)
/* gets the response from the fdc */ /* gets the response from the fdc */
static int result(void) static int result(void)
{ {
int i, status = 0; int i;
int status = 0;
for (i = 0; i < MAX_REPLIES; i++) { for (i = 0; i < MAX_REPLIES; i++) {
if ((status = wait_til_ready()) < 0) if ((status = wait_til_ready()) < 0)
@ -1226,6 +1227,7 @@ static int result(void)
static int need_more_output(void) static int need_more_output(void)
{ {
int status; int status;
if ((status = wait_til_ready()) < 0) if ((status = wait_til_ready()) < 0)
return -1; return -1;
if ((status & (STATUS_READY | STATUS_DIR | STATUS_DMA)) == STATUS_READY) if ((status & (STATUS_READY | STATUS_DIR | STATUS_DMA)) == STATUS_READY)
@ -1309,8 +1311,11 @@ static int fdc_configure(void)
*/ */
static void fdc_specify(void) static void fdc_specify(void)
{ {
unsigned char spec1, spec2; unsigned char spec1;
unsigned long srt, hlt, hut; unsigned char spec2;
unsigned long srt;
unsigned long hlt;
unsigned long hut;
unsigned long dtr = NOMINAL_DTR; unsigned long dtr = NOMINAL_DTR;
unsigned long scale_dtr = NOMINAL_DTR; unsigned long scale_dtr = NOMINAL_DTR;
int hlt_max_code = 0x7f; int hlt_max_code = 0x7f;
@ -1472,7 +1477,6 @@ static int interpret_errors(void)
tell_sector(); tell_sector();
} }
printk("\n"); printk("\n");
} }
if (ST2 & ST2_WC || ST2 & ST2_BC) if (ST2 & ST2_WC || ST2 & ST2_BC)
/* wrong cylinder => recal */ /* wrong cylinder => recal */
@ -1498,7 +1502,10 @@ static int interpret_errors(void)
*/ */
static void setup_rw_floppy(void) static void setup_rw_floppy(void)
{ {
int i, r, flags, dflags; int i;
int r;
int flags;
int dflags;
unsigned long ready_date; unsigned long ready_date;
timeout_fn function; timeout_fn function;
@ -1728,9 +1735,9 @@ 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 */
irqreturn_t floppy_interrupt(int irq, void *dev_id) irqreturn_t floppy_interrupt(int irq, void *dev_id)
{ {
void (*handler) (void) = do_floppy;
int do_print; int do_print;
unsigned long f; unsigned long f;
void (*handler)(void) = do_floppy;
lasthandler = handler; lasthandler = handler;
interruptjiffies = jiffies; interruptjiffies = jiffies;
@ -1915,9 +1922,10 @@ static void floppy_shutdown(unsigned long data)
/*typedef void (*timeout_fn)(unsigned long);*/ /*typedef void (*timeout_fn)(unsigned long);*/
/* start motor, check media-changed condition and write protection */ /* start motor, check media-changed condition and write protection */
static int start_motor(void (*function) (void)) static int start_motor(void (*function)(void))
{ {
int mask, data; int mask;
int data;
mask = 0xfc; mask = 0xfc;
data = UNIT(current_drive); data = UNIT(current_drive);
@ -2020,17 +2028,17 @@ static struct cont_t wakeup_cont = {
.interrupt = empty, .interrupt = empty,
.redo = do_wakeup, .redo = do_wakeup,
.error = empty, .error = empty,
.done = (done_f) empty .done = (done_f)empty
}; };
static struct cont_t intr_cont = { static struct cont_t intr_cont = {
.interrupt = empty, .interrupt = empty,
.redo = process_fd_request, .redo = process_fd_request,
.error = empty, .error = empty,
.done = (done_f) empty .done = (done_f)empty
}; };
static int wait_til_done(void (*handler) (void), int interruptible) static int wait_til_done(void (*handler)(void), int interruptible)
{ {
int ret; int ret;
@ -2049,7 +2057,6 @@ static int wait_til_done(void (*handler) (void), int interruptible)
break; break;
is_alive("wait_til_done"); is_alive("wait_til_done");
schedule(); schedule();
} }
@ -2141,6 +2148,7 @@ static void bad_flp_intr(void)
static void set_floppy(int drive) static void set_floppy(int drive)
{ {
int type = ITYPE(UDRS->fd_device); int type = ITYPE(UDRS->fd_device);
if (type) if (type)
_floppy = floppy_type + type; _floppy = floppy_type + type;
else else
@ -2169,11 +2177,14 @@ static void format_interrupt(void)
#define CT(x) ((x) | 0xc0) #define CT(x) ((x) | 0xc0)
static void setup_format_params(int track) static void setup_format_params(int track)
{ {
int n;
int il;
int count;
int head_shift;
int track_shift;
struct fparm { struct fparm {
unsigned char track, head, sect, size; unsigned char track, head, sect, size;
} *here = (struct fparm *)floppy_track_buffer; } *here = (struct fparm *)floppy_track_buffer;
int il, n;
int count, head_shift, track_shift;
raw_cmd = &default_raw_cmd; raw_cmd = &default_raw_cmd;
raw_cmd->track = track; raw_cmd->track = track;
@ -2344,7 +2355,10 @@ static void request_done(int uptodate)
/* Interrupt handler evaluating the result of the r/w operation */ /* Interrupt handler evaluating the result of the r/w operation */
static void rw_interrupt(void) static void rw_interrupt(void)
{ {
int nr_sectors, ssize, eoc, heads; int eoc;
int ssize;
int heads;
int nr_sectors;
if (R_HEAD >= 2) { if (R_HEAD >= 2) {
/* some Toshiba floppy controllers occasionnally seem to /* some Toshiba floppy controllers occasionnally seem to
@ -2476,7 +2490,8 @@ static void copy_buffer(int ssize, int max_sector, int max_sector_2)
{ {
int remaining; /* number of transferred 512-byte sectors */ int remaining; /* number of transferred 512-byte sectors */
struct bio_vec *bv; struct bio_vec *bv;
char *buffer, *dma_buffer; char *buffer;
char *dma_buffer;
int size; int size;
struct req_iterator iter; struct req_iterator iter;
@ -2578,7 +2593,8 @@ static inline int check_dma_crossing(char *start,
*/ */
static void virtualdmabug_workaround(void) static void virtualdmabug_workaround(void)
{ {
int hard_sectors, end_sector; int hard_sectors;
int end_sector;
if (CT(COMMAND) == FD_WRITE) { if (CT(COMMAND) == FD_WRITE) {
COMMAND &= ~0x80; /* switch off multiple track mode */ COMMAND &= ~0x80; /* switch off multiple track mode */
@ -2610,7 +2626,10 @@ static void virtualdmabug_workaround(void)
static int make_raw_rw_request(void) static int make_raw_rw_request(void)
{ {
int aligned_sector_t; int aligned_sector_t;
int max_sector, max_size, tracksize, ssize; int max_sector;
int max_size;
int tracksize;
int ssize;
if (max_buffer_sectors == 0) { if (max_buffer_sectors == 0) {
printk("VFS: Block I/O scheduled on unopened device\n"); printk("VFS: Block I/O scheduled on unopened device\n");
@ -2777,8 +2796,8 @@ static int make_raw_rw_request(void)
indirect, direct, fsector_t); indirect, direct, fsector_t);
return 0; return 0;
} }
/* check_dma_crossing(raw_cmd->kernel_data, /* check_dma_crossing(raw_cmd->kernel_data,
raw_cmd->length, raw_cmd->length,
"end of make_raw_request [1]");*/ "end of make_raw_request [1]");*/
virtualdmabug_workaround(); virtualdmabug_workaround();
@ -3011,6 +3030,7 @@ static struct cont_t poll_cont = {
static int poll_drive(int interruptible, int flag) static int poll_drive(int interruptible, int flag)
{ {
int ret; int ret;
/* no auto-sense, just clear dcl */ /* no auto-sense, just clear dcl */
raw_cmd = &default_raw_cmd; raw_cmd = &default_raw_cmd;
raw_cmd->flags = flag; raw_cmd->flags = flag;
@ -3173,7 +3193,8 @@ static inline int raw_cmd_copyout(int cmd, char __user *param,
static void raw_cmd_free(struct floppy_raw_cmd **ptr) static void raw_cmd_free(struct floppy_raw_cmd **ptr)
{ {
struct floppy_raw_cmd *next, *this; struct floppy_raw_cmd *next;
struct floppy_raw_cmd *this;
this = *ptr; this = *ptr;
*ptr = NULL; *ptr = NULL;
@ -3245,8 +3266,10 @@ static inline int raw_cmd_copyin(int cmd, char __user *param,
static int raw_cmd_ioctl(int cmd, void __user *param) static int raw_cmd_ioctl(int cmd, void __user *param)
{ {
int drive, ret, ret2;
struct floppy_raw_cmd *my_raw_cmd; struct floppy_raw_cmd *my_raw_cmd;
int drive;
int ret2;
int ret;
if (FDCS->rawcmd <= 1) if (FDCS->rawcmd <= 1)
FDCS->rawcmd = 1; FDCS->rawcmd = 1;
@ -3453,7 +3476,8 @@ static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
#define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0 #define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0
int drive = (long)inode->i_bdev->bd_disk->private_data; int drive = (long)inode->i_bdev->bd_disk->private_data;
int i, type = ITYPE(UDRS->fd_device); int type = ITYPE(UDRS->fd_device);
int i;
int ret; int ret;
int size; int size;
union inparam { union inparam {
@ -3619,8 +3643,7 @@ static void __init config_types(void)
if (!UDP->cmos && FLOPPY1_TYPE) if (!UDP->cmos && FLOPPY1_TYPE)
UDP->cmos = FLOPPY1_TYPE; UDP->cmos = FLOPPY1_TYPE;
/* XXX */ /* FIXME: additional physical CMOS drive detection should go here */
/* additional physical CMOS drive detection should go here */
for (drive = 0; drive < N_DRIVE; drive++) { for (drive = 0; drive < N_DRIVE; drive++) {
unsigned int type = UDP->cmos; unsigned int type = UDP->cmos;
@ -3903,13 +3926,13 @@ static int floppy_revalidate(struct gendisk *disk)
} }
static struct block_device_operations floppy_fops = { static struct block_device_operations floppy_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = floppy_open, .open = floppy_open,
.release = floppy_release, .release = floppy_release,
.ioctl = fd_ioctl, .ioctl = fd_ioctl,
.getgeo = fd_getgeo, .getgeo = fd_getgeo,
.media_changed = check_floppy_change, .media_changed = check_floppy_change,
.revalidate_disk = floppy_revalidate, .revalidate_disk = floppy_revalidate,
}; };
/* /*
@ -4428,8 +4451,8 @@ static int floppy_grab_irq_and_dma(void)
if (FDCS->address != -1) if (FDCS->address != -1)
fd_outb(FDCS->dor, FD_DOR); fd_outb(FDCS->dor, FD_DOR);
/* /*
* The driver will try and free resources and relies on us * The driver will try and free resources and relies on us
* to know if they were allocated or not. * to know if they were allocated or not.
*/ */
fdc = 0; fdc = 0;
irqdma_allocated = 1; irqdma_allocated = 1;