Lines Matching refs:swd
193 struct swim_priv *swd;
426 struct swim __iomem *base = fs->swd->base;
443 struct swim __iomem *base = fs->swd->base;
459 struct swim __iomem *base = fs->swd->base;
496 struct swim __iomem *base = fs->swd->base;
528 struct swim_priv *swd = fs->swd;
532 if (!spin_trylock_irq(&swd->lock))
551 spin_unlock_irq(&swd->lock);
583 struct swim __iomem *base = fs->swd->base;
612 struct swim __iomem *base = fs->swd->base;
674 struct swim __iomem *base = fs->swd->base;
750 struct swim_priv *swd = data;
753 if (drive >= swd->floppy_count)
757 return get_disk_and_module(swd->unit[drive].disk);
760 static int swim_add_floppy(struct swim_priv *swd, enum drive_location location)
762 struct floppy_state *fs = &swd->unit[swd->floppy_count];
763 struct swim __iomem *base = swd->base;
777 swd->floppy_count++;
786 static int swim_floppy_init(struct swim_priv *swd)
790 struct swim __iomem *base = swd->base;
797 swim_add_floppy(swd, INTERNAL_DRIVE);
801 swim_add_floppy(swd, EXTERNAL_DRIVE);
812 spin_lock_init(&swd->lock);
814 for (drive = 0; drive < swd->floppy_count; drive++) {
817 swd->unit[drive].disk = alloc_disk(1);
818 if (swd->unit[drive].disk == NULL) {
823 q = blk_mq_init_sq_queue(&swd->unit[drive].tag_set, &swim_mq_ops,
830 swd->unit[drive].disk->queue = q;
831 blk_queue_bounce_limit(swd->unit[drive].disk->queue,
833 swd->unit[drive].disk->queue->queuedata = &swd->unit[drive];
834 swd->unit[drive].swd = swd;
837 for (drive = 0; drive < swd->floppy_count; drive++) {
838 swd->unit[drive].disk->flags = GENHD_FL_REMOVABLE;
839 swd->unit[drive].disk->major = FLOPPY_MAJOR;
840 swd->unit[drive].disk->first_minor = drive;
841 sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive);
842 swd->unit[drive].disk->fops = &floppy_fops;
843 swd->unit[drive].disk->events = DISK_EVENT_MEDIA_CHANGE;
844 swd->unit[drive].disk->private_data = &swd->unit[drive];
845 set_capacity(swd->unit[drive].disk, 2880);
846 add_disk(swd->unit[drive].disk);
850 floppy_find, NULL, swd);
857 struct gendisk *disk = swd->unit[drive].disk;
864 blk_mq_free_tag_set(&swd->unit[drive].tag_set);
875 struct swim_priv *swd;
906 swd = kzalloc(sizeof(struct swim_priv), GFP_KERNEL);
907 if (!swd) {
911 platform_set_drvdata(dev, swd);
913 swd->base = swim_base;
915 ret = swim_floppy_init(swd);
922 kfree(swd);
931 struct swim_priv *swd = platform_get_drvdata(dev);
937 for (drive = 0; drive < swd->floppy_count; drive++) {
938 del_gendisk(swd->unit[drive].disk);
939 blk_cleanup_queue(swd->unit[drive].disk->queue);
940 blk_mq_free_tag_set(&swd->unit[drive].tag_set);
941 put_disk(swd->unit[drive].disk);
948 for (drive = 0; drive < swd->floppy_count; drive++)
949 floppy_eject(&swd->unit[drive]);
955 kfree(swd);