lkml.org 
[lkml]   [2002]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectPC-9800 patch for 2.5.47-ac4: Update floppy98.c
    This patch updates floppy driver for PC-9800.
    Synchronized with latest drivers/block/floppy.c.

    diffstat:
    drivers/block/floppy98.c | 57 ++++++++++++++++++++++++++++-------------------
    1 files changed, 34 insertions(+), 23 deletions(-)

    --
    Osamu Tomita
    tomita@cinet.co.jp--- linux-2.5.47-ac1/drivers/block/floppy98.c.ac1 Wed Nov 13 09:25:33 2002
    +++ linux-2.5.47-ac1/drivers/block/floppy98.c Wed Nov 13 10:28:40 2002
    @@ -176,7 +176,15 @@


    #include <linux/fd.h>
    +#define FLOPPY98_MOTOR_MASK 0x08
    +
    +#define FDPATCHES
    #include <linux/hdreg.h>
    +#define FD98_STATUS (0 + FD_IOPORT )
    +#define FD98_DATA (2 + FD_IOPORT )
    +#define FD_MODE (4 + FD_IOPORT )
    +#define FD_MODE_CHANGE 0xbe
    +#define FD_EMODE_CHANGE 0x4be

    #include <linux/errno.h>
    #include <linux/slab.h>
    @@ -585,7 +593,7 @@
    static void floppy_start(void);
    static void process_fd_request(void);
    static void recalibrate_floppy(void);
    -static void floppy_shutdown(void);
    +static void floppy_shutdown(unsigned long);

    static int floppy_grab_irq_and_dma(void);
    static void floppy_release_irq_and_dma(void);
    @@ -659,7 +667,7 @@
    }

    typedef void (*timeout_fn)(unsigned long);
    -static struct timer_list fd_timeout ={ function: (timeout_fn) floppy_shutdown };
    +static struct timer_list fd_timeout = TIMER_INITIALIZER(floppy_shutdown, 0, 0);

    static const char *timeout_message;

    @@ -784,10 +792,10 @@
    fd_outb(newdor, FD_MODE);
    }

    - if (newdor & FLOPPY_MOTOR_MASK)
    + if (newdor & FLOPPY98_MOTOR_MASK)
    floppy_grab_irq_and_dma();

    - if (olddor & FLOPPY_MOTOR_MASK)
    + if (olddor & FLOPPY98_MOTOR_MASK)
    floppy_release_irq_and_dma();

    return olddor;
    @@ -828,7 +836,7 @@
    if (FDCS->rawcmd == 2)
    reset_fdc_info(1);

    - if (fd_inb(FD_STATUS) != STATUS_READY)
    + if (fd_inb(FD98_STATUS) != STATUS_READY)
    FDCS->reset = 1;
    }

    @@ -991,7 +999,7 @@
    schedule_work(&floppy_work);
    }

    -static struct timer_list fd_timer;
    +static struct timer_list fd_timer = TIMER_INITIALIZER(NULL, 0, 0);

    static void cancel_activity(void)
    {
    @@ -1146,7 +1154,7 @@
    if (FDCS->reset)
    return -1;
    for (counter = 0; counter < READY_DELAY; counter++) {
    - status = fd_inb(FD_STATUS);
    + status = fd_inb(FD98_STATUS);
    if (status & STATUS_READY)
    return status;
    }
    @@ -1167,7 +1175,7 @@
    if ((status = wait_til_ready()) < 0)
    return -1;
    if ((status & (STATUS_READY|STATUS_DIR|STATUS_DMA)) == STATUS_READY){
    - fd_outb(byte,FD_DATA);
    + fd_outb(byte,FD98_DATA);
    #ifdef FLOPPY_SANITY_CHECK
    output_log[output_log_pos].data = byte;
    output_log[output_log_pos].status = status;
    @@ -1203,7 +1211,7 @@
    return i;
    }
    if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY))
    - reply_buffer[i] = fd_inb(FD_DATA);
    + reply_buffer[i] = fd_inb(FD98_DATA);
    else
    break;
    }
    @@ -1793,7 +1801,7 @@
    printk("\n");
    #endif

    - printk("status=%x\n", fd_inb(FD_STATUS));
    + printk("status=%x\n", fd_inb(FD98_STATUS));
    printk("fdc_busy=%lu\n", fdc_busy);
    if (do_floppy)
    printk("do_floppy=%p\n", do_floppy);
    @@ -1812,7 +1820,7 @@
    printk("\n");
    }

    -static void floppy_shutdown(void)
    +static void floppy_shutdown(unsigned long data)
    {
    unsigned long flags;

    @@ -2198,15 +2206,16 @@
    DRS->track = NEED_2_RECAL;
    }

    -static void set_floppy(kdev_t device)
    +static void set_floppy(int drive)
    {
    - if (TYPE(device)) {
    + int type = ITYPE(UDRS->fd_device);
    + if (type) {
    auto_detect_mode = 0;
    - _floppy = TYPE(device) + floppy_type;
    + _floppy = floppy_type + type;
    } else if (auto_detect_mode == 0) {
    auto_detect_mode = 1;
    retry_auto_detect = 0;
    - _floppy = current_type[DRIVE(device)];
    + _floppy = current_type[drive];
    }
    #ifdef PC9800_DEBUG_FLOPPY2
    printk("set_floppy: set floppy type=%d\n", (int)(_floppy - floppy_type));
    @@ -2316,7 +2325,7 @@
    int drive=DRIVE(device);

    LOCK_FDC(drive,1);
    - set_floppy(device);
    + set_floppy(drive);
    if (!_floppy ||
    _floppy->track > DP->tracks ||
    tmp_format_req->track >= _floppy->track ||
    @@ -2344,7 +2353,7 @@
    {
    if (end_that_request_first(req, uptodate, current_count_sectors))
    return;
    - add_blkdev_randomness(MAJOR_NR);
    + add_disk_randomness(req->rq_disk);
    floppy_off((int)req->rq_disk->private_data);
    blkdev_dequeue_request(req);
    end_that_request_last(req);
    @@ -2678,7 +2687,7 @@
    return 0;
    }

    - set_fdc(DRIVE(current_req->rq_dev));
    + set_fdc((int)current_req->rq_disk->private_data);

    raw_cmd = &default_raw_cmd;
    raw_cmd->flags = FD_RAW_SPIN | FD_RAW_NEED_DISK | FD_RAW_NEED_DISK |
    @@ -2949,7 +2958,7 @@
    static void redo_fd_request(void)
    {
    #define REPEAT {request_done(0); continue; }
    - kdev_t device;
    + int drive;
    int tmp;

    lastredo = jiffies;
    @@ -2966,11 +2975,11 @@
    }
    current_req = req;
    }
    - device = current_req->rq_dev;
    - set_fdc(DRIVE(device));
    + drive = (int)current_req->rq_disk->private_data;
    + set_fdc(drive);
    reschedule_timeout(current_reqD, "redo fd request", 0);

    - set_floppy(device);
    + set_floppy(drive);
    raw_cmd = & default_raw_cmd;
    raw_cmd->flags = 0;
    if (start_motor(redo_fd_request)) return;
    @@ -3665,7 +3674,7 @@
    if (type)
    return -EINVAL;
    LOCK_FDC(drive,1);
    - set_floppy(device);
    + set_floppy(drive);
    CALL(i = raw_cmd_ioctl(cmd,(void *) param));
    process_fd_request();
    return i;
    @@ -4251,6 +4260,7 @@
    int err;

    raw_cmd = NULL;
    + FDC1 = 0x90;

    for (i=0; i<N_DRIVE; i++) {
    disks[i] = alloc_disk(1);
    @@ -4372,6 +4382,7 @@
    }

    for (drive = 0; drive < N_DRIVE; drive++) {
    + init_timer(&motor_off_timer[drive]);
    motor_off_timer[drive].data = drive;
    motor_off_timer[drive].function = motor_off_callback;
    if (!(allowed_drive_mask & (1 << drive)))
    \
     
     \ /
      Last update: 2005-03-22 13:31    [W:0.031 / U:29.612 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site