Lines Matching refs:fs

428 static inline int swim_track(struct floppy_state *fs,  int track)  in swim_track()  argument
430 struct swim __iomem *base = fs->swd->base; in swim_track()
433 ret = swim_seek(base, track - fs->track); in swim_track()
436 fs->track = track; in swim_track()
439 fs->track = 0; in swim_track()
445 static int floppy_eject(struct floppy_state *fs) in floppy_eject() argument
447 struct swim __iomem *base = fs->swd->base; in floppy_eject()
449 swim_drive(base, fs->location); in floppy_eject()
453 fs->disk_in = 0; in floppy_eject()
454 fs->ejected = 1; in floppy_eject()
459 static inline int swim_read_sector(struct floppy_state *fs, in swim_read_sector() argument
463 struct swim __iomem *base = fs->swd->base; in swim_read_sector()
469 swim_track(fs, track); in swim_read_sector()
496 static blk_status_t floppy_read_sectors(struct floppy_state *fs, in floppy_read_sectors() argument
500 struct swim __iomem *base = fs->swd->base; in floppy_read_sectors()
506 swim_drive(base, fs->location); in floppy_read_sectors()
509 track = i / fs->secpercyl; in floppy_read_sectors()
510 x = i % fs->secpercyl; in floppy_read_sectors()
511 side = x / fs->secpertrack; in floppy_read_sectors()
512 sector = x % fs->secpertrack + 1; in floppy_read_sectors()
516 ret = swim_read_sector(fs, side, track, sector, in floppy_read_sectors()
552 struct floppy_state *fs; in do_fd_request() local
558 fs = req->rq_disk->private_data; in do_fd_request()
559 if (blk_rq_pos(req) >= fs->total_secs) in do_fd_request()
561 if (!fs->disk_in) in do_fd_request()
563 if (rq_data_dir(req) == WRITE && fs->write_protected) in do_fd_request()
571 err = floppy_read_sectors(fs, blk_rq_pos(req), in do_fd_request()
589 static int get_floppy_geometry(struct floppy_state *fs, int type, in get_floppy_geometry() argument
597 else if (fs->type == HD_MEDIA) /* High-Density media */ in get_floppy_geometry()
599 else if (fs->head_number == 2) /* double-sided */ in get_floppy_geometry()
607 static void setup_medium(struct floppy_state *fs) in setup_medium() argument
609 struct swim __iomem *base = fs->swd->base; in setup_medium()
613 fs->disk_in = 1; in setup_medium()
614 fs->write_protected = swim_readbit(base, WRITE_PROT); in setup_medium()
622 fs->type = swim_readbit(base, TWOMEG_MEDIA) ? in setup_medium()
624 fs->head_number = swim_readbit(base, SINGLE_SIDED) ? 1 : 2; in setup_medium()
625 get_floppy_geometry(fs, 0, &g); in setup_medium()
626 fs->total_secs = g->size; in setup_medium()
627 fs->secpercyl = g->head * g->sect; in setup_medium()
628 fs->secpertrack = g->sect; in setup_medium()
629 fs->track = 0; in setup_medium()
631 fs->disk_in = 0; in setup_medium()
637 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_open() local
638 struct swim __iomem *base = fs->swd->base; in floppy_open()
641 if (fs->ref_count == -1 || (fs->ref_count && mode & FMODE_EXCL)) in floppy_open()
645 fs->ref_count = -1; in floppy_open()
647 fs->ref_count++; in floppy_open()
651 swim_drive(base, fs->location); in floppy_open()
654 if (fs->ejected) in floppy_open()
655 setup_medium(fs); in floppy_open()
656 if (!fs->disk_in) { in floppy_open()
661 set_capacity(fs->disk, fs->total_secs); in floppy_open()
668 if ((mode & FMODE_WRITE) && fs->write_protected) { in floppy_open()
675 if (fs->ref_count < 0) in floppy_open()
676 fs->ref_count = 0; in floppy_open()
677 else if (fs->ref_count > 0) in floppy_open()
678 --fs->ref_count; in floppy_open()
680 if (fs->ref_count == 0) in floppy_open()
698 struct floppy_state *fs = disk->private_data; in floppy_release() local
699 struct swim __iomem *base = fs->swd->base; in floppy_release()
702 if (fs->ref_count < 0) in floppy_release()
703 fs->ref_count = 0; in floppy_release()
704 else if (fs->ref_count > 0) in floppy_release()
705 --fs->ref_count; in floppy_release()
707 if (fs->ref_count == 0) in floppy_release()
715 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_ioctl() local
723 if (fs->ref_count != 1) in floppy_ioctl()
726 err = floppy_eject(fs); in floppy_ioctl()
741 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_getgeo() local
745 ret = get_floppy_geometry(fs, 0, &g); in floppy_getgeo()
759 struct floppy_state *fs = disk->private_data; in floppy_check_events() local
761 return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; in floppy_check_events()
766 struct floppy_state *fs = disk->private_data; in floppy_revalidate() local
767 struct swim __iomem *base = fs->swd->base; in floppy_revalidate()
769 swim_drive(base, fs->location); in floppy_revalidate()
771 if (fs->ejected) in floppy_revalidate()
772 setup_medium(fs); in floppy_revalidate()
774 if (!fs->disk_in) in floppy_revalidate()
777 fs->ejected = 0; in floppy_revalidate()
779 return !fs->disk_in; in floppy_revalidate()
806 struct floppy_state *fs = &swd->unit[swd->floppy_count]; in swim_add_floppy() local
809 fs->location = location; in swim_add_floppy()
815 fs->type = HD_MEDIA; in swim_add_floppy()
816 fs->head_number = 2; in swim_add_floppy()
818 fs->ref_count = 0; in swim_add_floppy()
819 fs->ejected = 1; in swim_add_floppy()