Lines Matching refs:fs

426 static inline int swim_track(struct floppy_state *fs,  int track)  in swim_track()  argument
428 struct swim __iomem *base = fs->swd->base; in swim_track()
431 ret = swim_seek(base, track - fs->track); in swim_track()
434 fs->track = track; in swim_track()
437 fs->track = 0; in swim_track()
443 static int floppy_eject(struct floppy_state *fs) in floppy_eject() argument
445 struct swim __iomem *base = fs->swd->base; in floppy_eject()
447 swim_drive(base, fs->location); in floppy_eject()
451 fs->disk_in = 0; in floppy_eject()
452 fs->ejected = 1; in floppy_eject()
457 static inline int swim_read_sector(struct floppy_state *fs, in swim_read_sector() argument
461 struct swim __iomem *base = fs->swd->base; in swim_read_sector()
467 swim_track(fs, track); in swim_read_sector()
494 static blk_status_t floppy_read_sectors(struct floppy_state *fs, in floppy_read_sectors() argument
498 struct swim __iomem *base = fs->swd->base; in floppy_read_sectors()
504 swim_drive(base, fs->location); in floppy_read_sectors()
507 track = i / fs->secpercyl; in floppy_read_sectors()
508 x = i % fs->secpercyl; in floppy_read_sectors()
509 side = x / fs->secpertrack; in floppy_read_sectors()
510 sector = x % fs->secpertrack + 1; in floppy_read_sectors()
514 ret = swim_read_sector(fs, side, track, sector, in floppy_read_sectors()
529 struct floppy_state *fs = hctx->queue->queuedata; in swim_queue_rq() local
530 struct swim_priv *swd = fs->swd; in swim_queue_rq()
539 if (!fs->disk_in || rq_data_dir(req) == WRITE) { in swim_queue_rq()
545 err = floppy_read_sectors(fs, blk_rq_pos(req), in swim_queue_rq()
565 static int get_floppy_geometry(struct floppy_state *fs, int type, in get_floppy_geometry() argument
573 else if (fs->type == HD_MEDIA) /* High-Density media */ in get_floppy_geometry()
575 else if (fs->head_number == 2) /* double-sided */ in get_floppy_geometry()
583 static void setup_medium(struct floppy_state *fs) in setup_medium() argument
585 struct swim __iomem *base = fs->swd->base; in setup_medium()
589 fs->disk_in = 1; in setup_medium()
590 fs->write_protected = swim_readbit(base, WRITE_PROT); in setup_medium()
598 fs->type = swim_readbit(base, TWOMEG_MEDIA) ? in setup_medium()
600 fs->head_number = swim_readbit(base, SINGLE_SIDED) ? 1 : 2; in setup_medium()
601 get_floppy_geometry(fs, 0, &g); in setup_medium()
602 fs->total_secs = g->size; in setup_medium()
603 fs->secpercyl = g->head * g->sect; in setup_medium()
604 fs->secpertrack = g->sect; in setup_medium()
605 fs->track = 0; in setup_medium()
607 fs->disk_in = 0; in setup_medium()
613 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_open() local
614 struct swim __iomem *base = fs->swd->base; in floppy_open()
617 if (fs->ref_count == -1 || (fs->ref_count && mode & FMODE_EXCL)) in floppy_open()
621 fs->ref_count = -1; in floppy_open()
623 fs->ref_count++; in floppy_open()
627 swim_drive(base, fs->location); in floppy_open()
630 if (fs->ejected) in floppy_open()
631 setup_medium(fs); in floppy_open()
632 if (!fs->disk_in) { in floppy_open()
637 set_capacity(fs->disk, fs->total_secs); in floppy_open()
643 if (bdev_check_media_change(bdev) && fs->disk_in) in floppy_open()
644 fs->ejected = 0; in floppy_open()
645 if ((mode & FMODE_WRITE) && fs->write_protected) { in floppy_open()
652 if (fs->ref_count < 0) in floppy_open()
653 fs->ref_count = 0; in floppy_open()
654 else if (fs->ref_count > 0) in floppy_open()
655 --fs->ref_count; in floppy_open()
657 if (fs->ref_count == 0) in floppy_open()
675 struct floppy_state *fs = disk->private_data; in floppy_release() local
676 struct swim __iomem *base = fs->swd->base; in floppy_release()
679 if (fs->ref_count < 0) in floppy_release()
680 fs->ref_count = 0; in floppy_release()
681 else if (fs->ref_count > 0) in floppy_release()
682 --fs->ref_count; in floppy_release()
684 if (fs->ref_count == 0) in floppy_release()
692 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_ioctl() local
700 if (fs->ref_count != 1) in floppy_ioctl()
703 err = floppy_eject(fs); in floppy_ioctl()
718 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_getgeo() local
722 ret = get_floppy_geometry(fs, 0, &g); in floppy_getgeo()
736 struct floppy_state *fs = disk->private_data; in floppy_check_events() local
738 return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; in floppy_check_events()
752 struct floppy_state *fs = &swd->unit[swd->floppy_count]; in swim_add_floppy() local
755 fs->location = location; in swim_add_floppy()
761 fs->type = HD_MEDIA; in swim_add_floppy()
762 fs->head_number = 2; in swim_add_floppy()
764 fs->ref_count = 0; in swim_add_floppy()
765 fs->ejected = 1; in swim_add_floppy()
776 static void swim_cleanup_floppy_disk(struct floppy_state *fs) in swim_cleanup_floppy_disk() argument
778 struct gendisk *disk = fs->disk; in swim_cleanup_floppy_disk()
783 if (fs->registered) in swim_cleanup_floppy_disk()
784 del_gendisk(fs->disk); in swim_cleanup_floppy_disk()
787 blk_mq_free_tag_set(&fs->tag_set); in swim_cleanup_floppy_disk()