Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[safe/jmp/linux-2.6] / drivers / block / swim3.c
index f48c6dd..59ca2b7 100644 (file)
@@ -200,7 +200,7 @@ struct floppy_state {
        int     ejected;
        wait_queue_head_t wait;
        int     wanted;
-       struct device_node*     media_bay; /* NULL when not in bay */
+       struct macio_dev *mdev;
        char    dbdma_cmd_space[5 * sizeof(struct dbdma_cmd)];
 };
 
@@ -303,14 +303,13 @@ static int swim3_readbit(struct floppy_state *fs, int bit)
 static void do_fd_request(struct request_queue * q)
 {
        int i;
-       for(i=0;i<floppy_count;i++)
-       {
-#ifdef CONFIG_PMAC_MEDIABAY
-               if (floppy_states[i].media_bay &&
-                       check_media_bay(floppy_states[i].media_bay, MB_FD))
+
+       for(i=0; i<floppy_count; i++) {
+               struct floppy_state *fs = &floppy_states[i];
+               if (fs->mdev->media_bay &&
+                   check_media_bay(fs->mdev->media_bay) != MB_FD)
                        continue;
-#endif /* CONFIG_PMAC_MEDIABAY */
-               start_request(&floppy_states[i]);
+               start_request(fs);
        }
 }
 
@@ -326,10 +325,9 @@ static void start_request(struct floppy_state *fs)
        }
        while (fs->state == idle) {
                if (!fd_req) {
-                       fd_req = elv_next_request(swim3_queue);
+                       fd_req = blk_fetch_request(swim3_queue);
                        if (!fd_req)
                                break;
-                       blkdev_dequeue_request(fd_req);
                }
                req = fd_req;
 #if 0
@@ -850,10 +848,9 @@ static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
        if ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))
                return -EPERM;
 
-#ifdef CONFIG_PMAC_MEDIABAY
-       if (fs->media_bay && check_media_bay(fs->media_bay, MB_FD))
+       if (fs->mdev->media_bay &&
+           check_media_bay(fs->mdev->media_bay) != MB_FD)
                return -ENXIO;
-#endif
 
        switch (cmd) {
        case FDEJECT:
@@ -877,10 +874,9 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
        int n, err = 0;
 
        if (fs->ref_count == 0) {
-#ifdef CONFIG_PMAC_MEDIABAY
-               if (fs->media_bay && check_media_bay(fs->media_bay, MB_FD))
+               if (fs->mdev->media_bay &&
+                   check_media_bay(fs->mdev->media_bay) != MB_FD)
                        return -ENXIO;
-#endif
                out_8(&sw->setup, S_IBM_DRIVE | S_FCLK_DIV2);
                out_8(&sw->control_bic, 0xff);
                out_8(&sw->mode, 0x95);
@@ -964,10 +960,9 @@ static int floppy_revalidate(struct gendisk *disk)
        struct swim3 __iomem *sw;
        int ret, n;
 
-#ifdef CONFIG_PMAC_MEDIABAY
-       if (fs->media_bay && check_media_bay(fs->media_bay, MB_FD))
+       if (fs->mdev->media_bay &&
+           check_media_bay(fs->mdev->media_bay) != MB_FD)
                return -ENXIO;
-#endif
 
        sw = fs->swim3;
        grab_drive(fs, revalidating, 0);
@@ -999,7 +994,7 @@ static int floppy_revalidate(struct gendisk *disk)
        return ret;
 }
 
-static struct block_device_operations floppy_fops = {
+static const struct block_device_operations floppy_fops = {
        .open           = floppy_open,
        .release        = floppy_release,
        .locked_ioctl   = floppy_ioctl,
@@ -1010,7 +1005,6 @@ static struct block_device_operations floppy_fops = {
 static int swim3_add_device(struct macio_dev *mdev, int index)
 {
        struct device_node *swim = mdev->ofdev.node;
-       struct device_node *mediabay;
        struct floppy_state *fs = &floppy_states[index];
        int rc = -EBUSY;
 
@@ -1037,9 +1031,7 @@ static int swim3_add_device(struct macio_dev *mdev, int index)
        }
        dev_set_drvdata(&mdev->ofdev.dev, fs);
 
-       mediabay = (strcasecmp(swim->parent->type, "media-bay") == 0) ?
-               swim->parent : NULL;
-       if (mediabay == NULL)
+       if (mdev->media_bay == NULL)
                pmac_call_feature(PMAC_FTR_SWIM3_ENABLE, swim, 0, 1);
        
        memset(fs, 0, sizeof(*fs));
@@ -1063,13 +1055,13 @@ static int swim3_add_device(struct macio_dev *mdev, int index)
                goto out_release;
        }
        fs->swim3_intr = macio_irq(mdev, 0);
-       fs->dma_intr = macio_irq(mdev, 1);;
+       fs->dma_intr = macio_irq(mdev, 1);
        fs->cur_cyl = -1;
        fs->cur_sector = -1;
        fs->secpercyl = 36;
        fs->secpertrack = 18;
        fs->total_secs = 2880;
-       fs->media_bay = mediabay;
+       fs->mdev = mdev;
        init_waitqueue_head(&fs->wait);
 
        fs->dma_cmd = (struct dbdma_cmd *) DBDMA_ALIGN(fs->dbdma_cmd_space);
@@ -1094,7 +1086,7 @@ static int swim3_add_device(struct macio_dev *mdev, int index)
        init_timer(&fs->timeout);
 
        printk(KERN_INFO "fd%d: SWIM3 floppy controller %s\n", floppy_count,
-               mediabay ? "in media bay" : "");
+               mdev->media_bay ? "in media bay" : "");
 
        return 0;