Lines Matching +full:i +full:- +full:drive

1 // SPDX-License-Identifier: GPL-2.0-only
9 * - Driver now works interrupt driven
10 * - Support for two drives; should work, but I cannot test that :-(
11 * - Reading is done in whole tracks and buffered to speed up things
12 * - Disk change detection and drive deselecting after motor-off
14 * - Autodetection of disk format (DD/HD); untested yet, because I
15 * don't have an HD drive :-(
18 * - Autodetection works now
19 * - Support for 5 1/4'' disks
20 * - Removed drive type (unknown on atari)
21 * - Do seeks with 8 Mhz
24 * - After errors in multiple read mode try again reading single sectors
26 * - Clean up error handling
27 * - Set blk_size for proper size checking
28 * - Initialize track register when testing presence of floppy
29 * - Implement some ioctl's
32 * - When probing the floppies we should add the FDCCMDADD_H flag since
36 * - MFPDELAY() after each FDC access -> atari
37 * - more/other disk formats
38 * - DMA to the block buffer directly if we have a 32bit DMA
39 * - for medusa, the step rate is always 3ms
40 * - on medusa, use only cache_push()
42 * - Make disk format numbering independent from minors
43 * - Let user set max. supported drive type (speeds up format
47 * - implement some more ioctls
48 * - disk formatting
51 * - increase gap size at start of track for HD/ED disks
54 * - implemented FDSETPRM and FDDEFPRM ioctl
57 * - implemented missing BLK* ioctls
60 * - Formatting
61 * - Maybe a better strategy for disk change detection (does anyone
70 #include <linux/blk-mq.h>
108 #define FDCCMD_RESTORE (0x00) /* - */
112 #define FDCCMD_STOT (0x60) /* - */
113 #define FDCCMD_RDSEC (0x80) /* - TYP 2 Commands */
114 #define FDCCMD_WRSEC (0xa0) /* - " */
115 #define FDCCMD_RDADR (0xc0) /* - */
117 #define FDCCMD_WRTRA (0xf0) /* - */
118 #define FDCCMD_FORCI (0xd0) /* - TYP 4 Command */
127 #define FDCCMDADD_H (0x08) /* wait for spin-up */
138 #define FDCSTAT_SPINUP (0x20) /* motor speed stable (Type I) */
142 #define FDCSTAT_TR00 (0x04) /* Track 00 flag (Type I) */
144 #define FDCSTAT_IDX (0x02) /* Index status (Type I) */
149 /* PSG Port A Bit Nr 0 .. Side Sel .. 0 -> Side 1 1 -> Side 2 */
177 { "D360", 9, 720, 0, 1}, /* 1: 360kb in 720k or 1.2MB drive */
178 { "D720", 9,1440, 0, 0}, /* 2: 720kb in 720k or 1.2MB drive */
240 /* some PC formats :-) */
241 { 8, TYPE_ED }, /* 9: E3280 <- was "CompaQ" == E2880 for PC */
245 { 3, TYPE_DD }, /* 13: H820 <- == D820, 82x10 */
263 { 6, TYPE_HD }, /* 31: H1640 <- was H1600 == h1600 for PC */
275 * MSch: User-provided type information. 'drive' points to
281 * User-provided permanent type information. 'drive' points to
284 * default_params[].blocks > 0 - a bit in unit[].flags might be used for this?)
290 int connected; /* !=0 : drive is connected */
295 int track; /* current head position or -1 if
309 #define UD unit[drive]
310 #define UDT unit[drive].disktype
340 * First, there is a DMA buffer in ST-RAM that is used for floppy DMA
358 static int UseTrackbuffer = -1; /* Do track buffering? */
364 static int read_track; /* non-zero if we are reading whole tracks */
366 #define SECTOR_BUFFER(sec) (TrackBuffer + ((sec)-1)*512)
367 #define IS_BUFFERED(drive,side,track) \ argument
368 (BufferDrive == (drive) && BufferSide == (side) && BufferTrack == (track))
383 static int UserSteprate[FD_MAX_UNITS] = { -1, -1 };
395 #define RECALIBRATE_ERRORS 4 /* After this many errors the drive
423 static void fd_select_drive( int drive );
429 static int do_format(int drive, int type, struct atari_format_descr *desc);
430 static void do_fd_action( int drive );
444 static void setup_req_params( int drive );
447 static void fd_probe( int drive );
448 static int fd_test_drive_present( int drive );
517 /* Select a drive, update the FDC's track register and set the correct
521 static void fd_select_drive( int drive ) in fd_select_drive() argument
526 if (drive == SelectedDrive) in fd_select_drive()
533 sound_ym.wd_data = (tmp | DSKDRVNONE) & ~(drive == 0 ? DSKDRV0 : DSKDRV1); in fd_select_drive()
544 dma_wd.fdc_speed = UDT->fdc_speed; in fd_select_drive()
546 SelectedDrive = drive; in fd_select_drive()
562 /* On Falcon, the drive B select line is used on the printer port, so in fd_deselect()
564 SelectedDrive = -1; in fd_deselect()
571 * counts the index signals, which arrive only if one drive is selected.
579 /* no drive selected, needn't deselect anyone */ in fd_motor_off_timer()
588 /* motor already turned off by FDC -> deselect drives */ in fd_motor_off_timer()
597 * in the drive and the FDC will leave the motor on forever (or, in fd_motor_off_timer()
612 static int drive = 0; in check_change() local
618 if (++drive > 1 || !UD.connected) in check_change()
619 drive = 0; in check_change()
628 ~(drive == 0 ? DSKDRV0 : DSKDRV1); in check_change()
633 DPRINT(( "wpstat[%d] = %d\n", drive, stat )); in check_change()
635 set_bit (drive, &changed_floppies); in check_change()
665 for (cnt = 512/4; cnt; cnt--) in copy_buffer()
718 if (SelectedDrive != -1) in fd_error()
719 SUD.track = -1; in fd_error()
721 /* need to re-run request to recalibrate */ in fd_error()
735 /* ---------- Formatting ---------- */
743 static int do_format(int drive, int type, struct atari_format_descr *desc) in do_format() argument
753 type--; in do_format()
757 return -EINVAL; in do_format()
761 q = unit[drive].disk[type]->queue; in do_format()
775 if (!UDT || desc->track >= UDT->blocks/UDT->spt/2 || desc->head >= 2) { in do_format()
777 ret = -EINVAL; in do_format()
781 nsect = UDT->spt; in do_format()
785 BufferDrive = -1; in do_format()
794 *p++ = desc->track; in do_format()
795 *p++ = desc->head; in do_format()
796 *p++ = (nsect + sect - desc->sect_offset) % nsect + 1; in do_format()
807 FILL( TrackBuffer+BUFFER_SIZE-p, 0x4e ); in do_format()
811 ReqTrack = desc->track; in do_format()
812 ReqSide = desc->head; in do_format()
813 do_fd_action( drive ); in do_format()
818 ret = FormatError ? -EIO : 0; in do_format()
827 * required parameter settings (drive select, side select, track
835 static void do_fd_action( int drive ) in do_fd_action() argument
841 if (IS_BUFFERED( drive, ReqSide, ReqTrack )) { in do_fd_action()
846 setup_req_params( drive ); in do_fd_action()
864 if (SelectedDrive != drive) in do_fd_action()
865 fd_select_drive( drive ); in do_fd_action()
867 if (UD.track == -1) in do_fd_action()
869 else if (UD.track != ReqTrack << UDT->stretch) in do_fd_action()
908 dma_wd.fdc_speed = SUDT->fdc_speed; in fd_calibrate_done()
920 /* Seek the drive to the requested track. The drive must have been
926 if (SUD.track == ReqTrack << SUDT->stretch) { in fd_seek()
937 FDC_WRITE( FDCREG_DATA, ReqTrack << SUDT->stretch); in fd_seek()
956 dma_wd.fdc_speed = SUDT->fdc_speed; in fd_seek_done()
961 SUD.track = -1; in fd_seek_done()
965 SUD.track = ReqTrack << SUDT->stretch; in fd_seek_done()
1015 if (SUDT->stretch) { in fd_rwsec()
1018 FDC_WRITE( FDCREG_TRACK, track >> SUDT->stretch); in fd_rwsec()
1046 dma_wd.fdc_acces_seccount = read_track ? SUDT->spt : 1; in fd_rwsec()
1066 * search for the first non-existent sector and need 1 sec to in fd_rwsec()
1067 * recognise that it isn't present :-( in fd_rwsec()
1111 if (addr >= PhysTrackBuffer + SUDT->spt*512) { in fd_readtrack_check()
1122 /* No error until now -- the FDC would have interrupted in fd_readtrack_check()
1156 if (SUDT->stretch) { in fd_rwsec_done1()
1159 FDC_WRITE( FDCREG_TRACK, track << SUDT->stretch); in fd_rwsec_done1()
1178 searched for a non-existent sector! */ in fd_rwsec_done1()
1179 !(read_track && FDC_READ(FDCREG_SECTOR) > SUDT->spt)) { in fd_rwsec_done1()
1182 if (SUDT[-1].blocks > ReqBlock) { in fd_rwsec_done1()
1184 SUDT--; in fd_rwsec_done1()
1186 SUDT->blocks); in fd_rwsec_done1()
1192 printk(KERN_INFO "fd%d: Auto-detected floppy type %s\n", in fd_rwsec_done1()
1193 SelectedDrive, SUDT->name ); in fd_rwsec_done1()
1201 SUDT->blocks); in fd_rwsec_done1()
1207 dma_wd.fdc_speed = SUDT->fdc_speed; in fd_rwsec_done1()
1211 BufferDrive = -1; in fd_rwsec_done1()
1262 BufferDrive = -1; in fd_rwsec_done1()
1280 if (SUDT->stretch) { in fd_writetrack()
1283 FDC_WRITE(FDCREG_TRACK,track >> SUDT->stretch); in fd_writetrack()
1373 * no matter what :-( To save time, the seek goes to the track we're
1389 /* we must wait for the IRQ here, because the ST-DMA in finish_fdc()
1406 * last seek command, the WP bit still reads wrong :-(( in finish_fdc_done()
1421 /* The detection of disk changes is a dark chapter in Atari history :-(
1422 * Because the "Drive ready" signal isn't present in the Atari
1425 * problem by introducing tri-state logic ("maybe changed") and
1428 * filesystem used on the disk and thus the contents of block 0. I've
1439 struct atari_floppy_struct *p = disk->private_data; in floppy_check_events()
1440 unsigned int drive = p - unit; in floppy_check_events() local
1441 if (test_bit (drive, &fake_change)) { in floppy_check_events()
1445 if (test_bit (drive, &changed_floppies)) { in floppy_check_events()
1450 /* WP is on -> could be changed: to be sure, buffers should be in floppy_check_events()
1461 struct atari_floppy_struct *p = disk->private_data; in floppy_revalidate()
1462 unsigned int drive = p - unit; in floppy_revalidate() local
1464 if (test_bit(drive, &changed_floppies) || in floppy_revalidate()
1465 test_bit(drive, &fake_change) || !p->disktype) { in floppy_revalidate()
1468 BufferDrive = -1; in floppy_revalidate()
1469 clear_bit(drive, &fake_change); in floppy_revalidate()
1470 clear_bit(drive, &changed_floppies); in floppy_revalidate()
1472 formats, for 'permanent user-defined' parameter: in floppy_revalidate()
1474 if (default_params[drive].blocks == 0) in floppy_revalidate()
1477 UDT = &default_params[drive]; in floppy_revalidate()
1485 static void setup_req_params( int drive ) in setup_req_params() argument
1489 ReqTrack = block / UDT->spt; in setup_req_params()
1490 ReqSector = block - ReqTrack * UDT->spt + 1; in setup_req_params()
1496 read_track = (ReqCmd == READ && unit[drive].error_count == 0); in setup_req_params()
1507 struct atari_floppy_struct *floppy = bd->rq->q->disk->private_data; in ataflop_queue_rq()
1508 int drive = floppy - unit; in ataflop_queue_rq() local
1509 int type = floppy->type; in ataflop_queue_rq()
1511 DPRINT(("Queue request: drive %d type %d sectors %d of %d last %d\n", in ataflop_queue_rq()
1512 drive, type, blk_rq_cur_sectors(bd->rq), in ataflop_queue_rq()
1513 blk_rq_sectors(bd->rq), bd->last)); in ataflop_queue_rq()
1524 fd_request = bd->rq; in ataflop_queue_rq()
1525 unit[drive].error_count = 0; in ataflop_queue_rq()
1533 /* drive not connected */ in ataflop_queue_rq()
1534 printk(KERN_ERR "Unknown Device: fd%d\n", drive ); in ataflop_queue_rq()
1544 set_capacity(bd->rq->q->disk, UDT->blocks); in ataflop_queue_rq()
1550 if (--type >= NUM_DISK_MINORS) { in ataflop_queue_rq()
1551 printk(KERN_WARNING "fd%d: invalid disk format", drive ); in ataflop_queue_rq()
1557 printk(KERN_WARNING "fd%d: unsupported disk format", drive ); in ataflop_queue_rq()
1564 set_capacity(bd->rq->q->disk, UDT->blocks); in ataflop_queue_rq()
1574 ReqBuffer = bio_data(fd_request->bio); in ataflop_queue_rq()
1575 setup_req_params( drive ); in ataflop_queue_rq()
1576 do_fd_action( drive ); in ataflop_queue_rq()
1588 struct gendisk *disk = bdev->bd_disk; in fd_locked_ioctl()
1589 struct atari_floppy_struct *floppy = disk->private_data; in fd_locked_ioctl()
1590 int drive = floppy - unit; in fd_locked_ioctl() local
1591 int type = floppy->type; in fd_locked_ioctl()
1602 if (--type >= NUM_DISK_MINORS) in fd_locked_ioctl()
1603 return -ENODEV; in fd_locked_ioctl()
1605 return -ENODEV; in fd_locked_ioctl()
1610 drive, dtp, dtp->name); in fd_locked_ioctl()
1614 return -ENXIO; in fd_locked_ioctl()
1619 getprm.size = dtp->blocks; in fd_locked_ioctl()
1620 getprm.sect = dtp->spt; in fd_locked_ioctl()
1622 getprm.track = dtp->blocks/dtp->spt/2; in fd_locked_ioctl()
1623 getprm.stretch = dtp->stretch; in fd_locked_ioctl()
1625 return -EFAULT; in fd_locked_ioctl()
1634 * Currently, the drive geometry is cleared after each in fd_locked_ioctl()
1641 if (floppy->ref != 1 && floppy->ref != -1) in fd_locked_ioctl()
1642 return -EBUSY; in fd_locked_ioctl()
1644 return -EFAULT; in fd_locked_ioctl()
1647 * or the next access will revalidate - and clear UDT :-( in fd_locked_ioctl()
1655 drive, setprm.size, setprm.sect, setprm.stretch); in fd_locked_ioctl()
1659 /* refuse to re-set a predefined type for now */ in fd_locked_ioctl()
1661 return -EINVAL; in fd_locked_ioctl()
1667 * TODO: add user-defined format to head of autoprobe list ? in fd_locked_ioctl()
1668 * Useful to include the user-type for future autodetection! in fd_locked_ioctl()
1674 /* skip this one, invalid for drive ... */ in fd_locked_ioctl()
1681 if ( dtp->blocks == setprm.size in fd_locked_ioctl()
1682 && dtp->spt == setprm.sect in fd_locked_ioctl()
1683 && dtp->stretch == setprm.stretch ) { in fd_locked_ioctl()
1686 drive, dtp->name, dtp); in fd_locked_ioctl()
1688 set_capacity(disk, UDT->blocks); in fd_locked_ioctl()
1692 default_params[drive].name = dtp->name; in fd_locked_ioctl()
1693 default_params[drive].spt = dtp->spt; in fd_locked_ioctl()
1694 default_params[drive].blocks = dtp->blocks; in fd_locked_ioctl()
1695 default_params[drive].fdc_speed = dtp->fdc_speed; in fd_locked_ioctl()
1696 default_params[drive].stretch = dtp->stretch; in fd_locked_ioctl()
1704 /* no matching disk type found above - setting user_params */ in fd_locked_ioctl()
1708 dtp = &default_params[drive]; in fd_locked_ioctl()
1711 dtp = &user_params[drive]; in fd_locked_ioctl()
1713 dtp->name = "user format"; in fd_locked_ioctl()
1714 dtp->blocks = setprm.size; in fd_locked_ioctl()
1715 dtp->spt = setprm.sect; in fd_locked_ioctl()
1717 dtp->fdc_speed = 3; in fd_locked_ioctl()
1719 dtp->fdc_speed = 0; in fd_locked_ioctl()
1720 dtp->stretch = setprm.stretch; in fd_locked_ioctl()
1724 drive, dtp->blocks, dtp->spt, dtp->stretch); in fd_locked_ioctl()
1727 if (setprm.track != dtp->blocks/dtp->spt/2 || in fd_locked_ioctl()
1730 return -EINVAL; in fd_locked_ioctl()
1734 set_capacity(disk, UDT->blocks); in fd_locked_ioctl()
1744 return -EINVAL; in fd_locked_ioctl()
1748 if (floppy->ref != 1 && floppy->ref != -1) in fd_locked_ioctl()
1749 return -EBUSY; in fd_locked_ioctl()
1751 return -EFAULT; in fd_locked_ioctl()
1752 return do_format(drive, type, &fmt_desc); in fd_locked_ioctl()
1756 default_params[drive].blocks = 0; in fd_locked_ioctl()
1762 BufferDrive = -1; in fd_locked_ioctl()
1763 set_bit(drive, &fake_change); in fd_locked_ioctl()
1765 bdev_mark_dead(disk->part0, true); in fd_locked_ioctl()
1770 return -EINVAL; in fd_locked_ioctl()
1786 /* Initialize the 'unit' variable for drive 'drive' */
1788 static void __init fd_probe( int drive ) in fd_probe() argument
1793 if (!fd_test_drive_present( drive )) in fd_probe()
1798 switch( UserSteprate[drive] ) { in fd_probe()
1811 default: /* should be -1 for "not set by user" */ in fd_probe()
1822 /* This function tests the physical presence of a floppy drive (not
1826 * signal. This should now be raised if there is a drive connected
1827 * (and there is no hardware failure :-) Otherwise, the drive is
1831 static int __init fd_test_drive_present( int drive ) in fd_test_drive_present() argument
1837 if (drive >= (MACH_IS_FALCON ? 1 : 2)) return( 0 ); in fd_test_drive_present()
1838 fd_select_drive( drive ); in fd_test_drive_present()
1875 * floppies, additionally start the disk-change and motor-off timers.
1880 int drive, cnt = 0; in config_types() local
1886 printk(KERN_INFO "Probing floppy drive(s):\n"); in config_types()
1887 for( drive = 0; drive < FD_MAX_UNITS; drive++ ) { in config_types()
1888 fd_probe( drive ); in config_types()
1890 printk(KERN_INFO "fd%d\n", drive); in config_types()
1900 * interrupts on this IRQ line :-( in config_types()
1918 * drive with different device numbers.
1923 struct atari_floppy_struct *p = disk->private_data; in floppy_open()
1924 int type = disk->first_minor >> 2; in floppy_open()
1927 if (p->ref && p->type != type) in floppy_open()
1928 return -EBUSY; in floppy_open()
1930 if (p->ref == -1 || (p->ref && mode & BLK_OPEN_EXCL)) in floppy_open()
1931 return -EBUSY; in floppy_open()
1933 p->ref = -1; in floppy_open()
1935 p->ref++; in floppy_open()
1937 p->type = type; in floppy_open()
1946 if (p->wpstat) { in floppy_open()
1947 if (p->ref < 0) in floppy_open()
1948 p->ref = 0; in floppy_open()
1950 p->ref--; in floppy_open()
1951 return -EROFS; in floppy_open()
1971 struct atari_floppy_struct *p = disk->private_data; in floppy_release()
1973 if (p->ref < 0) in floppy_release()
1974 p->ref = 0; in floppy_release()
1975 else if (!p->ref--) { in floppy_release()
1977 p->ref = 0; in floppy_release()
1994 static int ataflop_alloc_disk(unsigned int drive, unsigned int type) in ataflop_alloc_disk() argument
2001 disk = blk_mq_alloc_disk(&unit[drive].tag_set, &lim, NULL); in ataflop_alloc_disk()
2005 disk->major = FLOPPY_MAJOR; in ataflop_alloc_disk()
2006 disk->first_minor = drive + (type << 2); in ataflop_alloc_disk()
2007 disk->minors = 1; in ataflop_alloc_disk()
2008 sprintf(disk->disk_name, "fd%d", drive); in ataflop_alloc_disk()
2009 disk->fops = &floppy_fops; in ataflop_alloc_disk()
2010 disk->flags |= GENHD_FL_NO_PART; in ataflop_alloc_disk()
2011 disk->events = DISK_EVENT_MEDIA_CHANGE; in ataflop_alloc_disk()
2012 disk->private_data = &unit[drive]; in ataflop_alloc_disk()
2015 unit[drive].disk[type] = disk; in ataflop_alloc_disk()
2021 int drive = MINOR(dev) & 3; in ataflop_probe() local
2025 type--; in ataflop_probe()
2027 if (drive >= FD_MAX_UNITS || type >= NUM_DISK_MINORS) in ataflop_probe()
2029 if (unit[drive].disk[type]) in ataflop_probe()
2031 if (ataflop_alloc_disk(drive, type)) in ataflop_probe()
2033 if (add_disk(unit[drive].disk[type])) in ataflop_probe()
2035 unit[drive].registered[type] = true; in ataflop_probe()
2039 put_disk(unit[drive].disk[type]); in ataflop_probe()
2040 unit[drive].disk[type] = NULL; in ataflop_probe()
2045 int i; in atari_floppy_cleanup() local
2048 for (i = 0; i < FD_MAX_UNITS; i++) { in atari_floppy_cleanup()
2050 if (!unit[i].disk[type]) in atari_floppy_cleanup()
2052 del_gendisk(unit[i].disk[type]); in atari_floppy_cleanup()
2053 put_disk(unit[i].disk[type]); in atari_floppy_cleanup()
2055 blk_mq_free_tag_set(&unit[i].tag_set); in atari_floppy_cleanup()
2067 if (!fs->disk[type]) in atari_cleanup_floppy_disk()
2069 if (fs->registered[type]) in atari_cleanup_floppy_disk()
2070 del_gendisk(fs->disk[type]); in atari_cleanup_floppy_disk()
2071 put_disk(fs->disk[type]); in atari_cleanup_floppy_disk()
2073 blk_mq_free_tag_set(&fs->tag_set); in atari_cleanup_floppy_disk()
2078 int i; in atari_floppy_init() local
2082 /* Amiga, Mac, ... don't have Atari-compatible floppy :-) */ in atari_floppy_init()
2083 return -ENODEV; in atari_floppy_init()
2085 for (i = 0; i < FD_MAX_UNITS; i++) { in atari_floppy_init()
2086 memset(&unit[i].tag_set, 0, sizeof(unit[i].tag_set)); in atari_floppy_init()
2087 unit[i].tag_set.ops = &ataflop_mq_ops; in atari_floppy_init()
2088 unit[i].tag_set.nr_hw_queues = 1; in atari_floppy_init()
2089 unit[i].tag_set.nr_maps = 1; in atari_floppy_init()
2090 unit[i].tag_set.queue_depth = 2; in atari_floppy_init()
2091 unit[i].tag_set.numa_node = NUMA_NO_NODE; in atari_floppy_init()
2092 ret = blk_mq_alloc_tag_set(&unit[i].tag_set); in atari_floppy_init()
2096 ret = ataflop_alloc_disk(i, 0); in atari_floppy_init()
2098 blk_mq_free_tag_set(&unit[i].tag_set); in atari_floppy_init()
2104 /* not set by user -> use default: for now, we turn in atari_floppy_init()
2107 card. But the test is too hard :-( */ in atari_floppy_init()
2111 SelectedDrive = -1; in atari_floppy_init()
2112 BufferDrive = -1; in atari_floppy_init()
2117 ret = -ENOMEM; in atari_floppy_init()
2123 BufferDrive = BufferSide = BufferTrack = -1; in atari_floppy_init()
2125 for (i = 0; i < FD_MAX_UNITS; i++) { in atari_floppy_init()
2126 unit[i].track = -1; in atari_floppy_init()
2127 unit[i].flags = 0; in atari_floppy_init()
2128 ret = add_disk(unit[i].disk[0]); in atari_floppy_init()
2131 unit[i].registered[0] = true; in atari_floppy_init()
2149 while (--i >= 0) in atari_floppy_init()
2150 atari_cleanup_floppy_disk(&unit[i]); in atari_floppy_init()
2159 int i; in atari_floppy_setup() local
2175 printk(KERN_ERR "ataflop_setup: bad drive type\n" ); in atari_floppy_setup()
2182 for( i = 3; i <= ints[0] && i-3 < FD_MAX_UNITS; ++i ) { in atari_floppy_setup()
2183 if (ints[i] != 2 && ints[i] != 3 && ints[i] != 6 && ints[i] != 12) in atari_floppy_setup()
2186 UserSteprate[i-3] = ints[i]; in atari_floppy_setup()