Lines Matching refs:fs
425 static inline int swim_track(struct floppy_state *fs, int track) in swim_track() argument
427 struct swim __iomem *base = fs->swd->base; in swim_track()
430 ret = swim_seek(base, track - fs->track); in swim_track()
433 fs->track = track; in swim_track()
436 fs->track = 0; in swim_track()
442 static int floppy_eject(struct floppy_state *fs) in floppy_eject() argument
444 struct swim __iomem *base = fs->swd->base; in floppy_eject()
446 swim_drive(base, fs->location); in floppy_eject()
450 fs->disk_in = 0; in floppy_eject()
451 fs->ejected = 1; in floppy_eject()
456 static inline int swim_read_sector(struct floppy_state *fs, in swim_read_sector() argument
460 struct swim __iomem *base = fs->swd->base; in swim_read_sector()
466 swim_track(fs, track); in swim_read_sector()
493 static blk_status_t floppy_read_sectors(struct floppy_state *fs, in floppy_read_sectors() argument
497 struct swim __iomem *base = fs->swd->base; in floppy_read_sectors()
503 swim_drive(base, fs->location); in floppy_read_sectors()
506 track = i / fs->secpercyl; in floppy_read_sectors()
507 x = i % fs->secpercyl; in floppy_read_sectors()
508 side = x / fs->secpertrack; in floppy_read_sectors()
509 sector = x % fs->secpertrack + 1; in floppy_read_sectors()
513 ret = swim_read_sector(fs, side, track, sector, in floppy_read_sectors()
528 struct floppy_state *fs = hctx->queue->queuedata; in swim_queue_rq() local
529 struct swim_priv *swd = fs->swd; in swim_queue_rq()
538 if (!fs->disk_in || rq_data_dir(req) == WRITE) { in swim_queue_rq()
544 err = floppy_read_sectors(fs, blk_rq_pos(req), in swim_queue_rq()
564 static int get_floppy_geometry(struct floppy_state *fs, int type, in get_floppy_geometry() argument
572 else if (fs->type == HD_MEDIA) /* High-Density media */ in get_floppy_geometry()
574 else if (fs->head_number == 2) /* double-sided */ in get_floppy_geometry()
582 static void setup_medium(struct floppy_state *fs) in setup_medium() argument
584 struct swim __iomem *base = fs->swd->base; in setup_medium()
588 fs->disk_in = 1; in setup_medium()
589 fs->write_protected = swim_readbit(base, WRITE_PROT); in setup_medium()
597 fs->type = swim_readbit(base, TWOMEG_MEDIA) ? in setup_medium()
599 fs->head_number = swim_readbit(base, SINGLE_SIDED) ? 1 : 2; in setup_medium()
600 get_floppy_geometry(fs, 0, &g); in setup_medium()
601 fs->total_secs = g->size; in setup_medium()
602 fs->secpercyl = g->head * g->sect; in setup_medium()
603 fs->secpertrack = g->sect; in setup_medium()
604 fs->track = 0; in setup_medium()
606 fs->disk_in = 0; in setup_medium()
612 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_open() local
613 struct swim __iomem *base = fs->swd->base; in floppy_open()
616 if (fs->ref_count == -1 || (fs->ref_count && mode & FMODE_EXCL)) in floppy_open()
620 fs->ref_count = -1; in floppy_open()
622 fs->ref_count++; in floppy_open()
626 swim_drive(base, fs->location); in floppy_open()
629 if (fs->ejected) in floppy_open()
630 setup_medium(fs); in floppy_open()
631 if (!fs->disk_in) { in floppy_open()
636 set_capacity(fs->disk, fs->total_secs); in floppy_open()
642 if (bdev_check_media_change(bdev) && fs->disk_in) in floppy_open()
643 fs->ejected = 0; in floppy_open()
644 if ((mode & FMODE_WRITE) && fs->write_protected) { in floppy_open()
651 if (fs->ref_count < 0) in floppy_open()
652 fs->ref_count = 0; in floppy_open()
653 else if (fs->ref_count > 0) in floppy_open()
654 --fs->ref_count; in floppy_open()
656 if (fs->ref_count == 0) in floppy_open()
674 struct floppy_state *fs = disk->private_data; in floppy_release() local
675 struct swim __iomem *base = fs->swd->base; in floppy_release()
678 if (fs->ref_count < 0) in floppy_release()
679 fs->ref_count = 0; in floppy_release()
680 else if (fs->ref_count > 0) in floppy_release()
681 --fs->ref_count; in floppy_release()
683 if (fs->ref_count == 0) in floppy_release()
691 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_ioctl() local
699 if (fs->ref_count != 1) in floppy_ioctl()
702 err = floppy_eject(fs); in floppy_ioctl()
717 struct floppy_state *fs = bdev->bd_disk->private_data; in floppy_getgeo() local
721 ret = get_floppy_geometry(fs, 0, &g); in floppy_getgeo()
735 struct floppy_state *fs = disk->private_data; in floppy_check_events() local
737 return fs->ejected ? DISK_EVENT_MEDIA_CHANGE : 0; in floppy_check_events()
751 struct floppy_state *fs = &swd->unit[swd->floppy_count]; in swim_add_floppy() local
754 fs->location = location; in swim_add_floppy()
760 fs->type = HD_MEDIA; in swim_add_floppy()
761 fs->head_number = 2; in swim_add_floppy()
763 fs->ref_count = 0; in swim_add_floppy()
764 fs->ejected = 1; in swim_add_floppy()