Lines Matching +full:sw +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-or-later
24 #include <linux/blk-mq.h>
65 REG(mode);
181 int cur_cyl; /* cylinder head is on, or -1 */
192 int write_prot; /* 1 if write-protected, 0 if not, -1 dunno */
208 #define swim3_err(fmt, arg...) dev_err(&fs->mdev->ofdev.dev, "[fd%d] " fmt, fs->index, arg)
209 #define swim3_warn(fmt, arg...) dev_warn(&fs->mdev->ofdev.dev, "[fd%d] " fmt, fs->index, arg)
210 #define swim3_info(fmt, arg...) dev_info(&fs->mdev->ofdev.dev, "[fd%d] " fmt, fs->index, arg)
213 #define swim3_dbg(fmt, arg...) dev_dbg(&fs->mdev->ofdev.dev, "[fd%d] " fmt, fs->index, arg)
249 static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
251 static int floppy_open(struct block_device *bdev, fmode_t mode);
252 static void floppy_release(struct gendisk *disk, fmode_t mode);
259 struct request *req = fs->cur_req; in swim3_end_request()
269 fs->cur_req = NULL; in swim3_end_request()
275 struct swim3 __iomem *sw = fs->swim3; in swim3_select() local
277 out_8(&sw->select, RELAX); in swim3_select()
279 out_8(&sw->control_bis, SELECT); in swim3_select()
281 out_8(&sw->control_bic, SELECT); in swim3_select()
282 out_8(&sw->select, sel & CA_MASK); in swim3_select()
287 struct swim3 __iomem *sw = fs->swim3; in swim3_action() local
291 out_8(&sw->select, sw->select | LSTRB); in swim3_action()
293 out_8(&sw->select, sw->select & ~LSTRB); in swim3_action()
299 struct swim3 __iomem *sw = fs->swim3; in swim3_readbit() local
304 stat = in_8(&sw->status); in swim3_readbit()
311 struct floppy_state *fs = hctx->queue->queuedata; in swim3_queue_rq()
312 struct request *req = bd->rq; in swim3_queue_rq()
316 if (fs->cur_req || fs->state != idle) { in swim3_queue_rq()
321 fs->cur_req = req; in swim3_queue_rq()
322 if (fs->mdev->media_bay && in swim3_queue_rq()
323 check_media_bay(fs->mdev->media_bay) != MB_FD) { in swim3_queue_rq()
328 if (fs->ejected) { in swim3_queue_rq()
334 if (fs->write_prot < 0) in swim3_queue_rq()
335 fs->write_prot = swim3_readbit(fs, WRITE_PROT); in swim3_queue_rq()
336 if (fs->write_prot) { in swim3_queue_rq()
348 fs->req_cyl = ((long)blk_rq_pos(req)) / fs->secpercyl; in swim3_queue_rq()
349 x = ((long)blk_rq_pos(req)) % fs->secpercyl; in swim3_queue_rq()
350 fs->head = x / fs->secpertrack; in swim3_queue_rq()
351 fs->req_sector = x % fs->secpertrack + 1; in swim3_queue_rq()
352 fs->state = do_transfer; in swim3_queue_rq()
353 fs->retries = 0; in swim3_queue_rq()
365 if (fs->timeout_pending) in set_timeout()
366 del_timer(&fs->timeout); in set_timeout()
367 fs->timeout.expires = jiffies + nticks; in set_timeout()
368 fs->timeout.function = proc; in set_timeout()
369 add_timer(&fs->timeout); in set_timeout()
370 fs->timeout_pending = 1; in set_timeout()
375 struct swim3 __iomem *sw = fs->swim3; in scan_track() local
378 in_8(&sw->intr); /* clear SEEN_SECTOR bit */ in scan_track()
379 in_8(&sw->error); in scan_track()
380 out_8(&sw->intr_enable, SEEN_SECTOR); in scan_track()
381 out_8(&sw->control_bis, DO_ACTION); in scan_track()
388 struct swim3 __iomem *sw = fs->swim3; in seek_track() local
392 sw->nseek = n; in seek_track()
395 sw->nseek = -n; in seek_track()
397 fs->expect_cyl = (fs->cur_cyl >= 0)? fs->cur_cyl + n: -1; in seek_track()
399 in_8(&sw->error); in seek_track()
401 out_8(&sw->intr_enable, SEEK_DONE); in seek_track()
402 out_8(&sw->control_bis, DO_SEEK); in seek_track()
404 fs->settle_time = 0; in seek_track()
410 cp->req_count = cpu_to_le16(count); in init_dma()
411 cp->command = cpu_to_le16(cmd); in init_dma()
412 cp->phy_addr = cpu_to_le32(virt_to_bus(buf)); in init_dma()
413 cp->xfer_status = 0; in init_dma()
419 struct swim3 __iomem *sw = fs->swim3; in setup_transfer() local
420 struct dbdma_cmd *cp = fs->dma_cmd; in setup_transfer()
421 struct dbdma_regs __iomem *dr = fs->dma; in setup_transfer()
422 struct request *req = fs->cur_req; in setup_transfer()
431 n = fs->secpertrack - fs->req_sector + 1; in setup_transfer()
437 fs->req_sector, fs->secpertrack, fs->head, n); in setup_transfer()
439 fs->scount = n; in setup_transfer()
440 swim3_select(fs, fs->head? READ_DATA_1: READ_DATA_0); in setup_transfer()
441 out_8(&sw->sector, fs->req_sector); in setup_transfer()
442 out_8(&sw->nsect, n); in setup_transfer()
443 out_8(&sw->gap3, 0); in setup_transfer()
444 out_le32(&dr->cmdptr, virt_to_bus(cp)); in setup_transfer()
449 init_dma(cp, OUTPUT_MORE, bio_data(req->bio), 512); in setup_transfer()
453 init_dma(cp, INPUT_LAST, bio_data(req->bio), n * 512); in setup_transfer()
456 out_le16(&cp->command, DBDMA_STOP); in setup_transfer()
457 out_8(&sw->control_bic, DO_ACTION | WRITE_SECTORS); in setup_transfer()
458 in_8(&sw->error); in setup_transfer()
459 out_8(&sw->control_bic, DO_ACTION | WRITE_SECTORS); in setup_transfer()
461 out_8(&sw->control_bis, WRITE_SECTORS); in setup_transfer()
462 in_8(&sw->intr); in setup_transfer()
463 out_le32(&dr->control, (RUN << 16) | RUN); in setup_transfer()
465 out_8(&sw->intr_enable, TRANSFER_DONE); in setup_transfer()
466 out_8(&sw->control_bis, DO_ACTION); in setup_transfer()
474 fs->state, fs->req_cyl, fs->cur_cyl); in act()
476 switch (fs->state) { in act()
483 fs->cur_cyl = 0; in act()
484 if (fs->req_cyl == 0) in act()
485 fs->state = do_transfer; in act()
487 fs->state = seeking; in act()
494 if (fs->cur_cyl < 0) { in act()
495 fs->expect_cyl = -1; in act()
496 fs->state = locating; in act()
499 if (fs->req_cyl == fs->cur_cyl) { in act()
501 fs->state = do_transfer; in act()
504 seek_track(fs, fs->req_cyl - fs->cur_cyl); in act()
509 fs->settle_time = (HZ + 32) / 33; in act()
510 set_timeout(fs, fs->settle_time, settle_timeout); in act()
514 if (fs->cur_cyl != fs->req_cyl) { in act()
515 if (fs->retries > 5) { in act()
517 fs->req_cyl, fs->cur_cyl); in act()
519 fs->state = idle; in act()
522 fs->state = seeking; in act()
529 seek_track(fs, -5); in act()
533 swim3_err("Unknown state %d\n", fs->state); in act()
542 struct swim3 __iomem *sw = fs->swim3; in scan_timeout() local
545 swim3_dbg("* scan timeout, state=%d\n", fs->state); in scan_timeout()
548 fs->timeout_pending = 0; in scan_timeout()
549 out_8(&sw->control_bic, DO_ACTION | WRITE_SECTORS); in scan_timeout()
550 out_8(&sw->select, RELAX); in scan_timeout()
551 out_8(&sw->intr_enable, 0); in scan_timeout()
552 fs->cur_cyl = -1; in scan_timeout()
553 if (fs->retries > 5) { in scan_timeout()
555 fs->state = idle; in scan_timeout()
557 fs->state = jogging; in scan_timeout()
566 struct swim3 __iomem *sw = fs->swim3; in seek_timeout() local
569 swim3_dbg("* seek timeout, state=%d\n", fs->state); in seek_timeout()
572 fs->timeout_pending = 0; in seek_timeout()
573 out_8(&sw->control_bic, DO_SEEK); in seek_timeout()
574 out_8(&sw->select, RELAX); in seek_timeout()
575 out_8(&sw->intr_enable, 0); in seek_timeout()
578 fs->state = idle; in seek_timeout()
585 struct swim3 __iomem *sw = fs->swim3; in settle_timeout() local
588 swim3_dbg("* settle timeout, state=%d\n", fs->state); in settle_timeout()
591 fs->timeout_pending = 0; in settle_timeout()
593 out_8(&sw->select, RELAX); in settle_timeout()
594 fs->state = locating; in settle_timeout()
598 out_8(&sw->select, RELAX); in settle_timeout()
599 if (fs->settle_time < 2*HZ) { in settle_timeout()
600 ++fs->settle_time; in settle_timeout()
606 fs->state = idle; in settle_timeout()
614 struct swim3 __iomem *sw = fs->swim3; in xfer_timeout() local
615 struct dbdma_regs __iomem *dr = fs->dma; in xfer_timeout()
619 swim3_dbg("* xfer timeout, state=%d\n", fs->state); in xfer_timeout()
622 fs->timeout_pending = 0; in xfer_timeout()
623 out_le32(&dr->control, RUN << 16); in xfer_timeout()
625 for (n = 0; (in_le32(&dr->status) & ACTIVE) && n < 1000; n++) in xfer_timeout()
627 out_8(&sw->intr_enable, 0); in xfer_timeout()
628 out_8(&sw->control_bic, WRITE_SECTORS | DO_ACTION); in xfer_timeout()
629 out_8(&sw->select, RELAX); in xfer_timeout()
631 (rq_data_dir(fs->cur_req)==WRITE? "writ": "read"), in xfer_timeout()
632 (long)blk_rq_pos(fs->cur_req)); in xfer_timeout()
634 fs->state = idle; in xfer_timeout()
641 struct swim3 __iomem *sw = fs->swim3; in swim3_interrupt() local
647 struct request *req = fs->cur_req; in swim3_interrupt()
649 swim3_dbg("* interrupt, state=%d\n", fs->state); in swim3_interrupt()
652 intr = in_8(&sw->intr); in swim3_interrupt()
653 err = (intr & ERROR_INTR)? in_8(&sw->error): 0; in swim3_interrupt()
654 if ((intr & ERROR_INTR) && fs->state != do_transfer) in swim3_interrupt()
655 swim3_err("Non-transfer error interrupt: state=%d, dir=%x, intr=%x, err=%x\n", in swim3_interrupt()
656 fs->state, rq_data_dir(req), intr, err); in swim3_interrupt()
657 switch (fs->state) { in swim3_interrupt()
660 out_8(&sw->control_bic, DO_ACTION | WRITE_SECTORS); in swim3_interrupt()
661 out_8(&sw->select, RELAX); in swim3_interrupt()
662 out_8(&sw->intr_enable, 0); in swim3_interrupt()
663 del_timer(&fs->timeout); in swim3_interrupt()
664 fs->timeout_pending = 0; in swim3_interrupt()
665 if (sw->ctrack == 0xff) { in swim3_interrupt()
667 fs->cur_cyl = -1; in swim3_interrupt()
668 if (fs->retries > 5) { in swim3_interrupt()
670 fs->state = idle; in swim3_interrupt()
672 fs->state = jogging; in swim3_interrupt()
677 fs->cur_cyl = sw->ctrack; in swim3_interrupt()
678 fs->cur_sector = sw->csect; in swim3_interrupt()
679 if (fs->expect_cyl != -1 && fs->expect_cyl != fs->cur_cyl) in swim3_interrupt()
681 fs->expect_cyl, fs->cur_cyl); in swim3_interrupt()
682 fs->state = do_transfer; in swim3_interrupt()
688 if (sw->nseek == 0) { in swim3_interrupt()
689 out_8(&sw->control_bic, DO_SEEK); in swim3_interrupt()
690 out_8(&sw->select, RELAX); in swim3_interrupt()
691 out_8(&sw->intr_enable, 0); in swim3_interrupt()
692 del_timer(&fs->timeout); in swim3_interrupt()
693 fs->timeout_pending = 0; in swim3_interrupt()
694 if (fs->state == seeking) in swim3_interrupt()
695 ++fs->retries; in swim3_interrupt()
696 fs->state = settling; in swim3_interrupt()
701 out_8(&sw->intr_enable, 0); in swim3_interrupt()
702 del_timer(&fs->timeout); in swim3_interrupt()
703 fs->timeout_pending = 0; in swim3_interrupt()
709 out_8(&sw->intr_enable, 0); in swim3_interrupt()
710 out_8(&sw->control_bic, WRITE_SECTORS | DO_ACTION); in swim3_interrupt()
711 out_8(&sw->select, RELAX); in swim3_interrupt()
712 del_timer(&fs->timeout); in swim3_interrupt()
713 fs->timeout_pending = 0; in swim3_interrupt()
714 dr = fs->dma; in swim3_interrupt()
715 cp = fs->dma_cmd; in swim3_interrupt()
725 if ((intr & ERROR_INTR) == 0 && cp->xfer_status == 0) { in swim3_interrupt()
728 if (cp->xfer_status != 0) in swim3_interrupt()
735 out_le32(&dr->control, (RUN | PAUSE) << 16); in swim3_interrupt()
736 stat = le16_to_cpu(cp->xfer_status); in swim3_interrupt()
737 resid = le16_to_cpu(cp->res_count); in swim3_interrupt()
739 n = fs->scount - 1 - resid / 512; in swim3_interrupt()
742 fs->req_sector += n; in swim3_interrupt()
744 if (fs->retries < 5) { in swim3_interrupt()
745 ++fs->retries; in swim3_interrupt()
752 fs->state = idle; in swim3_interrupt()
759 fs->state, rq_data_dir(req), intr, err); in swim3_interrupt()
761 fs->state = idle; in swim3_interrupt()
764 fs->retries = 0; in swim3_interrupt()
765 if (swim3_end_request(fs, 0, fs->scount << 9)) { in swim3_interrupt()
766 fs->req_sector += fs->scount; in swim3_interrupt()
767 if (fs->req_sector > fs->secpertrack) { in swim3_interrupt()
768 fs->req_sector -= fs->secpertrack; in swim3_interrupt()
769 if (++fs->head > 1) { in swim3_interrupt()
770 fs->head = 0; in swim3_interrupt()
771 ++fs->req_cyl; in swim3_interrupt()
776 fs->state = idle; in swim3_interrupt()
780 swim3_err("Don't know what to do in state %d\n", fs->state); in swim3_interrupt()
798 swim3_dbg("%s", "-> grab drive\n"); in grab_drive()
801 if (fs->state != idle && fs->state != available) { in grab_drive()
802 ++fs->wanted; in grab_drive()
805 wait_event_lock_irq(fs->wait, in grab_drive()
806 fs->state == available, in grab_drive()
808 else if (wait_event_interruptible_lock_irq(fs->wait, in grab_drive()
809 fs->state == available, in grab_drive()
811 --fs->wanted; in grab_drive()
813 return -EINTR; in grab_drive()
815 --fs->wanted; in grab_drive()
817 fs->state = state; in grab_drive()
825 struct request_queue *q = disks[fs->index]->queue; in release_drive()
828 swim3_dbg("%s", "-> release drive\n"); in release_drive()
831 fs->state = idle; in release_drive()
848 for (n = 20; n > 0; --n) { in fd_eject()
850 err = -EINTR; in fd_eject()
860 fs->ejected = 1; in fd_eject()
868 static int floppy_locked_ioctl(struct block_device *bdev, fmode_t mode, in floppy_locked_ioctl() argument
871 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_locked_ioctl()
875 return -EPERM; in floppy_locked_ioctl()
877 if (fs->mdev->media_bay && in floppy_locked_ioctl()
878 check_media_bay(fs->mdev->media_bay) != MB_FD) in floppy_locked_ioctl()
879 return -ENXIO; in floppy_locked_ioctl()
883 if (fs->ref_count != 1) in floppy_locked_ioctl()
884 return -EBUSY; in floppy_locked_ioctl()
890 return -EFAULT; in floppy_locked_ioctl()
893 return -ENOTTY; in floppy_locked_ioctl()
896 static int floppy_ioctl(struct block_device *bdev, fmode_t mode, in floppy_ioctl() argument
902 ret = floppy_locked_ioctl(bdev, mode, cmd, param); in floppy_ioctl()
908 static int floppy_open(struct block_device *bdev, fmode_t mode) in floppy_open() argument
910 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_open()
911 struct swim3 __iomem *sw = fs->swim3; in floppy_open() local
914 if (fs->ref_count == 0) { in floppy_open()
915 if (fs->mdev->media_bay && in floppy_open()
916 check_media_bay(fs->mdev->media_bay) != MB_FD) in floppy_open()
917 return -ENXIO; in floppy_open()
918 out_8(&sw->setup, S_IBM_DRIVE | S_FCLK_DIV2); in floppy_open()
919 out_8(&sw->control_bic, 0xff); in floppy_open()
920 out_8(&sw->mode, 0x95); in floppy_open()
922 out_8(&sw->intr_enable, 0); in floppy_open()
923 out_8(&sw->control_bis, DRIVE_ENABLE | INTR_ENABLE); in floppy_open()
925 fs->write_prot = -1; in floppy_open()
926 fs->cur_cyl = -1; in floppy_open()
931 err = -EINTR; in floppy_open()
939 err = -ENXIO; in floppy_open()
943 } else if (fs->ref_count == -1 || mode & FMODE_EXCL) in floppy_open()
944 return -EBUSY; in floppy_open()
946 if (err == 0 && (mode & FMODE_NDELAY) == 0 in floppy_open()
947 && (mode & (FMODE_READ|FMODE_WRITE))) { in floppy_open()
949 floppy_revalidate(bdev->bd_disk); in floppy_open()
950 if (fs->ejected) in floppy_open()
951 err = -ENXIO; in floppy_open()
954 if (err == 0 && (mode & FMODE_WRITE)) { in floppy_open()
955 if (fs->write_prot < 0) in floppy_open()
956 fs->write_prot = swim3_readbit(fs, WRITE_PROT); in floppy_open()
957 if (fs->write_prot) in floppy_open()
958 err = -EROFS; in floppy_open()
962 if (fs->ref_count == 0) { in floppy_open()
964 out_8(&sw->control_bic, DRIVE_ENABLE | INTR_ENABLE); in floppy_open()
970 if (mode & FMODE_EXCL) in floppy_open()
971 fs->ref_count = -1; in floppy_open()
973 ++fs->ref_count; in floppy_open()
978 static int floppy_unlocked_open(struct block_device *bdev, fmode_t mode) in floppy_unlocked_open() argument
983 ret = floppy_open(bdev, mode); in floppy_unlocked_open()
989 static void floppy_release(struct gendisk *disk, fmode_t mode) in floppy_release() argument
991 struct floppy_state *fs = disk->private_data; in floppy_release()
992 struct swim3 __iomem *sw = fs->swim3; in floppy_release() local
995 if (fs->ref_count > 0) in floppy_release()
996 --fs->ref_count; in floppy_release()
997 else if (fs->ref_count == -1) in floppy_release()
998 fs->ref_count = 0; in floppy_release()
999 if (fs->ref_count == 0) { in floppy_release()
1001 out_8(&sw->control_bic, 0xff); in floppy_release()
1010 struct floppy_state *fs = disk->private_data; in floppy_check_events()
1011 return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; in floppy_check_events()
1016 struct floppy_state *fs = disk->private_data; in floppy_revalidate()
1017 struct swim3 __iomem *sw; in floppy_revalidate() local
1020 if (fs->mdev->media_bay && in floppy_revalidate()
1021 check_media_bay(fs->mdev->media_bay) != MB_FD) in floppy_revalidate()
1022 return -ENXIO; in floppy_revalidate()
1024 sw = fs->swim3; in floppy_revalidate()
1026 out_8(&sw->intr_enable, 0); in floppy_revalidate()
1027 out_8(&sw->control_bis, DRIVE_ENABLE); in floppy_revalidate()
1029 fs->write_prot = -1; in floppy_revalidate()
1030 fs->cur_cyl = -1; in floppy_revalidate()
1032 for (n = HZ; n > 0; --n) { in floppy_revalidate()
1045 fs->ejected = 0; in floppy_revalidate()
1068 struct swim3 __iomem *sw; in swim3_mb_event() local
1073 sw = fs->swim3; in swim3_mb_event()
1079 out_8(&sw->intr_enable, 0); in swim3_mb_event()
1080 in_8(&sw->intr); in swim3_mb_event()
1081 in_8(&sw->error); in swim3_mb_event()
1086 struct device_node *swim = mdev->ofdev.dev.of_node; in swim3_add_device()
1088 int rc = -EBUSY; in swim3_add_device()
1090 fs->mdev = mdev; in swim3_add_device()
1091 fs->index = index; in swim3_add_device()
1095 swim3_err("%s", "No address in device-tree\n"); in swim3_add_device()
1096 return -ENXIO; in swim3_add_device()
1099 swim3_err("%s", "No interrupt in device-tree\n"); in swim3_add_device()
1100 return -ENXIO; in swim3_add_device()
1104 return -EBUSY; in swim3_add_device()
1109 return -EBUSY; in swim3_add_device()
1111 dev_set_drvdata(&mdev->ofdev.dev, fs); in swim3_add_device()
1113 if (mdev->media_bay == NULL) in swim3_add_device()
1116 fs->state = idle; in swim3_add_device()
1117 fs->swim3 = (struct swim3 __iomem *) in swim3_add_device()
1119 if (fs->swim3 == NULL) { in swim3_add_device()
1121 rc = -ENOMEM; in swim3_add_device()
1124 fs->dma = (struct dbdma_regs __iomem *) in swim3_add_device()
1126 if (fs->dma == NULL) { in swim3_add_device()
1128 iounmap(fs->swim3); in swim3_add_device()
1129 rc = -ENOMEM; in swim3_add_device()
1132 fs->swim3_intr = macio_irq(mdev, 0); in swim3_add_device()
1133 fs->dma_intr = macio_irq(mdev, 1); in swim3_add_device()
1134 fs->cur_cyl = -1; in swim3_add_device()
1135 fs->cur_sector = -1; in swim3_add_device()
1136 fs->secpercyl = 36; in swim3_add_device()
1137 fs->secpertrack = 18; in swim3_add_device()
1138 fs->total_secs = 2880; in swim3_add_device()
1139 init_waitqueue_head(&fs->wait); in swim3_add_device()
1141 fs->dma_cmd = (struct dbdma_cmd *) DBDMA_ALIGN(fs->dbdma_cmd_space); in swim3_add_device()
1142 memset(fs->dma_cmd, 0, 2 * sizeof(struct dbdma_cmd)); in swim3_add_device()
1143 fs->dma_cmd[1].command = cpu_to_le16(DBDMA_STOP); in swim3_add_device()
1145 if (mdev->media_bay == NULL || check_media_bay(mdev->media_bay) == MB_FD) in swim3_add_device()
1148 if (request_irq(fs->swim3_intr, swim3_interrupt, 0, "SWIM3", fs)) { in swim3_add_device()
1154 timer_setup(&fs->timeout, NULL, 0); in swim3_add_device()
1157 mdev->media_bay ? "in media bay" : ""); in swim3_add_device()
1162 iounmap(fs->dma); in swim3_add_device()
1163 iounmap(fs->swim3); in swim3_add_device()
1180 return -ENXIO; in swim3_attach()
1190 rc = -ENOMEM; in swim3_attach()
1197 disk->queue = blk_mq_init_sq_queue(&fs->tag_set, &swim3_mq_ops, 2, in swim3_attach()
1199 if (IS_ERR(disk->queue)) { in swim3_attach()
1200 rc = PTR_ERR(disk->queue); in swim3_attach()
1201 disk->queue = NULL; in swim3_attach()
1204 blk_queue_bounce_limit(disk->queue, BLK_BOUNCE_HIGH); in swim3_attach()
1205 disk->queue->queuedata = fs; in swim3_attach()
1211 disk->major = FLOPPY_MAJOR; in swim3_attach()
1212 disk->first_minor = floppy_count; in swim3_attach()
1213 disk->fops = &floppy_fops; in swim3_attach()
1214 disk->private_data = fs; in swim3_attach()
1215 disk->events = DISK_EVENT_MEDIA_CHANGE; in swim3_attach()
1216 disk->flags |= GENHD_FL_REMOVABLE; in swim3_attach()
1217 sprintf(disk->disk_name, "fd%d", floppy_count); in swim3_attach()
1225 blk_cleanup_queue(disk->queue); in swim3_attach()
1226 disk->queue = NULL; in swim3_attach()
1227 blk_mq_free_tag_set(&fs->tag_set); in swim3_attach()
1242 .compatible = "ohare-swim3"