Lines Matching refs:fdc

209 CFATTACH_DECL_NEW(fdc, sizeof(struct fdc_softc),
406 fdprint(void *aux, const char *fdc) in fdprint() argument
410 if (!fdc) in fdprint()
418 struct fdc_softc *fdc = device_private(self); in fdcattach() local
424 fdc->sc_dev = self; in fdcattach()
425 fdc->sc_state = DEVIDLE; in fdcattach()
426 TAILQ_INIT(&fdc->sc_drives); in fdcattach()
435 (void)fdcresult(fdc); in fdcattach()
444 callout_init(&fdc->sc_timo_ch, 0); in fdcattach()
445 callout_init(&fdc->sc_intr_ch, 0); in fdcattach()
474 struct fdc_softc *fdc = device_private(parent); in fdprobe() local
501 n = fdcresult(fdc); in fdprobe()
508 printf(" %x", fdc->sc_status[i]); in fdprobe()
512 intr_arg = (void*)fdc; in fdprobe()
513 if (n != 2 || (fdc->sc_status[0] & 0xf8) != 0x20) in fdprobe()
527 struct fdc_softc *fdc = device_private(parent); in fdattach() local
549 fdc->sc_fd[drive] = fd; in fdattach()
658 struct fdc_softc *fdc; in fdstrategy() local
660 fdc = device_private(device_parent(fd->sc_dev)); in fdstrategy()
661 if (fdc->sc_state == DEVIDLE) { in fdstrategy()
663 fdcstart(fdc); in fdstrategy()
679 struct fdc_softc *fdc = device_private(device_parent(fd->sc_dev)); in fdstart() local
680 int active = fdc->sc_drives.tqh_first != 0; in fdstart()
684 TAILQ_INSERT_TAIL(&fdc->sc_drives, fd, sc_drivechain); in fdstart()
688 fdcstart(fdc); in fdstart()
694 struct fdc_softc *fdc = device_private(device_parent(fd->sc_dev)); in fdfinish() local
705 TAILQ_REMOVE(&fdc->sc_drives, fd, sc_drivechain); in fdfinish()
707 TAILQ_INSERT_TAIL(&fdc->sc_drives, fd, sc_drivechain); in fdfinish()
717 fdc->sc_state = DEVIDLE; in fdfinish()
735 fd_set_motor(struct fdc_softc *fdc, int reset) in fd_set_motor() argument
741 if ((fd = fdc->sc_drives.tqh_first) != NULL) in fd_set_motor()
748 if ((fd = fdc->sc_fd[n]) && (fd->sc_flags & FD_MOTOR)) in fd_set_motor()
757 struct fdc_softc *fdc = device_private(device_parent(fd->sc_dev)); in fd_motor_off() local
762 fd_set_motor(fdc, 0); in fd_motor_off()
770 struct fdc_softc *fdc = device_private(device_parent(fd->sc_dev)); in fd_motor_on() local
775 if ((fdc->sc_drives.tqh_first == fd) && (fdc->sc_state == MOTORWAIT)) in fd_motor_on()
776 (void) fdcintr(fdc); in fd_motor_on()
781 fdcresult(struct fdc_softc *fdc) in fdcresult() argument
792 if (n >= sizeof(fdc->sc_status)) { in fdcresult()
796 fdc->sc_status[n++] = rd_fdc_reg(fddata); in fdcresult()
854 fdcstart(struct fdc_softc *fdc) in fdcstart() argument
860 if (fdc->sc_state != DEVIDLE) { in fdcstart()
865 (void) fdcintr(fdc); in fdcstart()
869 fdcpstatus(struct fdc_softc *fdc) in fdcpstatus() argument
873 snprintb(bits, sizeof(bits), NE7_ST0BITS, fdc->sc_status[0]); in fdcpstatus()
875 snprintb(bits, sizeof(bits), NE7_ST1BITS, fdc->sc_status[1]); in fdcpstatus()
877 snprintb(bits, sizeof(bits), NE7_ST2BITS, fdc->sc_status[2]); in fdcpstatus()
880 fdc->sc_status[3], fdc->sc_status[4], fdc->sc_status[5]); in fdcpstatus()
886 struct fdc_softc *fdc = device_private(device_parent(self)); in fdcstatus() local
891 (void) fdcresult(fdc); in fdcstatus()
902 snprintb(bits, sizeof(bits), NE7_ST0BITS, fdc->sc_status[0]); in fdcstatus()
903 printf(" (st0 %s cyl %d)\n", bits, fdc->sc_status[1]); in fdcstatus()
906 fdcpstatus(fdc); in fdcstatus()
919 struct fdc_softc *fdc = arg; in fdctimeout() local
920 struct fd_softc *fd = fdc->sc_drives.tqh_first; in fdctimeout()
927 fdc->sc_state++; in fdctimeout()
929 fdc->sc_state = DEVIDLE; in fdctimeout()
931 (void) fdcintr(fdc); in fdctimeout()
949 struct fdc_softc *fdc = arg; in fdcintr() local
950 #define st0 fdc->sc_status[0] in fdcintr()
951 #define st1 fdc->sc_status[1] in fdcintr()
952 #define cyl fdc->sc_status[1] in fdcintr()
962 fd = fdc->sc_drives.tqh_first; in fdcintr()
964 fdc->sc_state = DEVIDLE; in fdcintr()
972 TAILQ_REMOVE(&fdc->sc_drives, fd, sc_drivechain); in fdcintr()
980 switch (fdc->sc_state) { in fdcintr()
982 fdc->sc_errors = 0; in fdcintr()
983 fdc->sc_overruns = 0; in fdcintr()
989 fdc->sc_state = MOTORWAIT; in fdcintr()
994 struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1]; in fdcintr()
1000 fd_set_motor(fdc, 0); in fdcintr()
1001 fdc->sc_state = MOTORWAIT; in fdcintr()
1008 fd_set_motor(fdc, 0); in fdcintr()
1027 fdc->sc_state = SEEKWAIT; in fdcintr()
1032 callout_reset(&fdc->sc_timo_ch, 4 * hz, fdctimeout, fdc); in fdcintr()
1084 fdc->sc_errors = 4; in fdcintr()
1085 fdcretry(fdc); in fdcintr()
1107 fdc->sc_state = IOCOMPLETE; in fdcintr()
1112 callout_reset(&fdc->sc_timo_ch, 2 * hz, fdctimeout, fdc); in fdcintr()
1116 callout_stop(&fdc->sc_timo_ch); in fdcintr()
1117 fdc->sc_state = SEEKCOMPLETE; in fdcintr()
1119 callout_reset(&fdc->sc_intr_ch, hz / 50, fdcpseudointr, fdc); in fdcintr()
1128 if (fdcresult(fdc) != 2 || (st0 & 0xf8) != 0x20 || in fdcintr()
1133 fdcretry(fdc); in fdcintr()
1143 fdcretry(fdc); in fdcintr()
1147 callout_stop(&fdc->sc_timo_ch); in fdcintr()
1152 if (fdcresult(fdc) != 7 || (st1 & 0x37) != 0) { in fdcintr()
1157 if ((st1 & 0x10) && (++fdc->sc_overruns < 4)) { in fdcintr()
1158 fdc->sc_state = DOSEEK; in fdcintr()
1167 fdcretry(fdc); in fdcintr()
1170 if (fdc->sc_errors) { in fdcintr()
1174 fdc->sc_errors = 0; in fdcintr()
1176 fdc->sc_overruns = 0; in fdcintr()
1189 fd_set_motor(fdc, 1); in fdcintr()
1191 fd_set_motor(fdc, 0); in fdcintr()
1192 fdc->sc_state = RESETCOMPLETE; in fdcintr()
1193 callout_reset(&fdc->sc_timo_ch, hz / 2, fdctimeout, fdc); in fdcintr()
1197 callout_stop(&fdc->sc_timo_ch); in fdcintr()
1201 (void) fdcresult(fdc); in fdcintr()
1210 fdc->sc_state = RECALWAIT; in fdcintr()
1211 callout_reset(&fdc->sc_timo_ch, 5 * hz, fdctimeout, fdc); in fdcintr()
1215 callout_stop(&fdc->sc_timo_ch); in fdcintr()
1216 fdc->sc_state = RECALCOMPLETE; in fdcintr()
1218 callout_reset(&fdc->sc_intr_ch, hz / 30, fdcpseudointr, fdc); in fdcintr()
1223 if (fdcresult(fdc) != 2 || (st0 & 0xf8) != 0x20 || cyl != 0) { in fdcintr()
1227 fdcretry(fdc); in fdcintr()
1251 fdcretry(struct fdc_softc *fdc) in fdcretry() argument
1256 fd = fdc->sc_drives.tqh_first; in fdcretry()
1262 switch (fdc->sc_errors) { in fdcretry()
1265 fdc->sc_state = DOSEEK; in fdcretry()
1270 fdc->sc_state = DORECAL; in fdcretry()
1275 fdc->sc_state = DORESET; in fdcretry()
1284 fdcpstatus(fdc); in fdcretry()
1289 fdc->sc_errors++; in fdcretry()