Lines Matching refs:fdc

239 	struct	fdc_data *fdc;	/* pointer to controller structure */  member
270 static SYSCTL_NODE(_debug, OID_AUTO, fdc, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
319 fdregwr(struct fdc_data *fdc, int reg, uint8_t v) in fdregwr() argument
322 bus_space_write_1(fdc->iot, fdc->ioh[reg], fdc->ioff[reg], v); in fdregwr()
326 fdregrd(struct fdc_data *fdc, int reg) in fdregrd() argument
329 return bus_space_read_1(fdc->iot, fdc->ioh[reg], fdc->ioff[reg]); in fdregrd()
333 fdctl_wr(struct fdc_data *fdc, u_int8_t v) in fdctl_wr() argument
336 fdregwr(fdc, FDCTL, v); in fdctl_wr()
340 fdout_wr(struct fdc_data *fdc, u_int8_t v) in fdout_wr() argument
343 fdregwr(fdc, FDOUT, v); in fdout_wr()
347 fdsts_rd(struct fdc_data *fdc) in fdsts_rd() argument
350 return fdregrd(fdc, FDSTS); in fdsts_rd()
354 fddsr_wr(struct fdc_data *fdc, u_int8_t v) in fddsr_wr() argument
357 fdregwr(fdc, FDDSR, v); in fddsr_wr()
361 fddata_wr(struct fdc_data *fdc, u_int8_t v) in fddata_wr() argument
364 fdregwr(fdc, FDDATA, v); in fddata_wr()
368 fddata_rd(struct fdc_data *fdc) in fddata_rd() argument
371 return fdregrd(fdc, FDDATA); in fddata_rd()
375 fdin_rd(struct fdc_data *fdc) in fdin_rd() argument
378 return fdregrd(fdc, FDCTL); in fdin_rd()
386 fdbcdr_wr(struct fdc_data *fdc, int iswrite, uint16_t count) in fdbcdr_wr() argument
388 fdregwr(fdc, FDBCDR, (count - 1) & 0xff); in fdbcdr_wr()
389 fdregwr(fdc, FDBCDR + 1, in fdbcdr_wr()
394 fdc_err(struct fdc_data *fdc, const char *s) in fdc_err() argument
396 fdc->fdc_errs++; in fdc_err()
398 if (fdc->fdc_errs < FDC_ERRMAX) in fdc_err()
399 device_printf(fdc->fdc_dev, "%s", s); in fdc_err()
400 else if (fdc->fdc_errs == FDC_ERRMAX) in fdc_err()
401 device_printf(fdc->fdc_dev, "too many errors, not " in fdc_err()
417 fdc_in(struct fdc_data *fdc, int *ptr) in fdc_in() argument
423 i = fdsts_rd(fdc) & (NE7_DIO | NE7_RQM); in fdc_in()
425 i = fddata_rd(fdc); in fdc_in()
431 return (fdc_err(fdc, "ready for output in input\n")); in fdc_in()
435 return (fdc_err(fdc, bootverbose? "input ready timeout\n": 0)); in fdc_in()
439 fdc_out(struct fdc_data *fdc, int x) in fdc_out() argument
445 i = fdsts_rd(fdc) & (NE7_DIO | NE7_RQM); in fdc_out()
447 fddata_wr(fdc, x); in fdc_out()
451 return (fdc_err(fdc, "ready for input in output\n")); in fdc_out()
455 return (fdc_err(fdc, bootverbose? "output ready timeout\n": 0)); in fdc_out()
467 fdc_cmd(struct fdc_data *fdc, int n_out, ...) in fdc_cmd() argument
479 if (fdc_out(fdc, i) < 0) { in fdc_cmd()
484 fdc->flags |= FDC_NEEDS_RESET; in fdc_cmd()
486 return fdc_err(fdc, msg); in fdc_cmd()
492 if (fdc_in(fdc, ptr) != 0) { in fdc_cmd()
497 fdc->flags |= FDC_NEEDS_RESET; in fdc_cmd()
499 return fdc_err(fdc, msg); in fdc_cmd()
507 fdc_reset(struct fdc_data *fdc) in fdc_reset() argument
511 if (fdc->fdct == FDC_ENHANCED) { in fdc_reset()
513 fddsr_wr(fdc, I8207X_DSR_SR); in fdc_reset()
516 fdout_wr(fdc, fdc->fdout & ~(FDO_FRST|FDO_FDMAEN)); in fdc_reset()
519 fdout_wr(fdc, fdc->fdout & ~FDO_FDMAEN); in fdc_reset()
522 fdout_wr(fdc, fdc->fdout); in fdc_reset()
525 if (fdc_cmd(fdc, 3, NE7CMD_SPECIFY, spec1, spec2, 0)) in fdc_reset()
526 device_printf(fdc->fdc_dev, " SPECIFY failed in reset\n"); in fdc_reset()
528 if (fdc->fdct == FDC_ENHANCED) { in fdc_reset()
529 if (fdc_cmd(fdc, 4, in fdc_reset()
538 device_printf(fdc->fdc_dev, in fdc_reset()
541 if (fdc_cmd(fdc, 1, in fdc_reset()
545 device_printf(fdc->fdc_dev, in fdc_reset()
555 fdc_sense_drive(struct fdc_data *fdc, int *st3p) in fdc_sense_drive() argument
559 if (fdc_cmd(fdc, 2, NE7CMD_SENSED, fdc->fd->fdsu, 1, &st3)) in fdc_sense_drive()
560 return (fdc_err(fdc, "Sense Drive Status failed\n")); in fdc_sense_drive()
567 fdc_sense_int(struct fdc_data *fdc, int *st0p, int *cylp) in fdc_sense_int() argument
571 ret = fdc_cmd(fdc, 1, NE7CMD_SENSEI, 1, &st0); in fdc_sense_int()
573 (void)fdc_err(fdc, "sense intr err reading stat reg 0\n"); in fdc_sense_int()
587 if (fdc_in(fdc, &cyl) != 0) in fdc_sense_int()
588 return fdc_err(fdc, "can't get cyl num\n"); in fdc_sense_int()
597 fdc_read_status(struct fdc_data *fdc) in fdc_read_status() argument
602 ret = fdc_in(fdc, &status); in fdc_read_status()
603 fdc->status[i] = status; in fdc_read_status()
609 fdc->flags |= FDC_STAT_VALID; in fdc_read_status()
611 fdc->flags &= ~FDC_STAT_VALID; in fdc_read_status()
622 struct fdc_data *fdc; in fd_select() local
625 fdc = fd->fdc; in fd_select()
626 fdc->fdout &= ~FDO_FDSEL; in fd_select()
627 fdc->fdout |= FDO_FDMAEN | FDO_FRST | fd->fdsu; in fd_select()
628 fdout_wr(fdc, fdc->fdout); in fd_select()
639 mtx_assert(&fd->fdc->fdc_mtx, MA_OWNED); in fd_turnon()
647 bioq_disksort(&fd->fdc->head, bp); in fd_turnon()
651 wakeup(&fd->fdc->head); in fd_turnon()
657 struct fdc_data *fdc; in fd_motor() local
659 fdc = fd->fdc; in fd_motor()
665 fdc->fdout |= (FDO_MOEN0 << fd->fdsu); in fd_motor()
670 fdc->fdout &= ~(FDO_MOEN0 << fd->fdsu); in fd_motor()
672 fdout_wr(fdc, fdc->fdout); in fd_motor()
680 mtx_assert(&fd->fdc->fdc_mtx, MA_OWNED); in fd_turnoff()
707 fdc_pio(struct fdc_data *fdc) in fdc_pio() argument
713 bp = fdc->bp; in fdc_pio()
714 cptr = fdc->fd->fd_ioptr; in fdc_pio()
715 count = fdc->fd->fd_iosize; in fdc_pio()
718 fdbcdr_wr(fdc, 0, count); in fdc_pio()
719 bus_space_read_multi_1(fdc->iot, fdc->ioh[FD_YE_DATAPORT], in fdc_pio()
720 fdc->ioff[FD_YE_DATAPORT], cptr, count); in fdc_pio()
722 bus_space_write_multi_1(fdc->iot, fdc->ioh[FD_YE_DATAPORT], in fdc_pio()
723 fdc->ioff[FD_YE_DATAPORT], cptr, count); in fdc_pio()
724 fdbcdr_wr(fdc, 0, count); /* needed? */ in fdc_pio()
729 fdc_biodone(struct fdc_data *fdc, int error) in fdc_biodone() argument
734 fd = fdc->fd; in fdc_biodone()
735 bp = fdc->bp; in fdc_biodone()
737 mtx_lock(&fdc->fdc_mtx); in fdc_biodone()
740 fdc->bp = NULL; in fdc_biodone()
741 fdc->fd = NULL; in fdc_biodone()
742 mtx_unlock(&fdc->fdc_mtx); in fdc_biodone()
744 if ((debugflags & 2) && fd->fdc->retry > 0) in fdc_biodone()
745 printf("retries: %d\n", fd->fdc->retry); in fdc_biodone()
758 fdc_worker(struct fdc_data *fdc) in fdc_worker() argument
773 bp = fdc->bp; in fdc_worker()
774 fd = fdc->fd; in fdc_worker()
776 (fdc->retry >= retries || (fd->options & FDOPT_NORETRY))) { in fdc_worker()
779 if (fdc->flags & FDC_NEEDS_RESET) { in fdc_worker()
780 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
782 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
784 return (fdc_biodone(fdc, EIO)); in fdc_worker()
791 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
792 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
794 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
798 if (fdc->flags & FDC_NEEDS_RESET) { in fdc_worker()
799 fdc->flags &= ~FDC_NEEDS_RESET; in fdc_worker()
800 fdc_reset(fdc); in fdc_worker()
804 tsleep(fdc, PRIBIO, "fdcrst", hz); in fdc_worker()
807 fdc_sense_int(fdc, &st0, &cyl); in fdc_worker()
813 if (fdc->bp == NULL) { in fdc_worker()
814 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
816 fdc->bp = bioq_takefirst(&fdc->head); in fdc_worker()
817 if (fdc->bp == NULL) in fdc_worker()
818 msleep(&fdc->head, &fdc->fdc_mtx, in fdc_worker()
820 } while (fdc->bp == NULL && in fdc_worker()
821 (fdc->flags & FDC_KTHREAD_EXIT) == 0); in fdc_worker()
822 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
824 if (fdc->bp == NULL) in fdc_worker()
831 bp = fdc->bp; in fdc_worker()
832 fd = fdc->fd = bp->bio_driver1; in fdc_worker()
833 fdc->retry = 0; in fdc_worker()
844 if (fdc->fdct == FDC_ENHANCED) in fdc_worker()
845 fddsr_wr(fdc, fd->ft->trans); in fdc_worker()
847 fdctl_wr(fdc, fd->ft->trans); in fdc_worker()
851 !(fdin_rd(fdc) & FDI_DCHG) && in fdc_worker()
854 return (fdc_biodone(fdc, 0)); in fdc_worker()
862 return (fdc_biodone(fdc, ENXIO)); in fdc_worker()
865 if (fdin_rd(fdc) & FDI_DCHG) { in fdc_worker()
868 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
871 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
879 return (fdc_biodone(fdc, ENXIO)); in fdc_worker()
885 if(fdc_sense_drive(fdc, &st3) != 0) in fdc_worker()
888 return (fdc_biodone(fdc, EROFS)); in fdc_worker()
902 if (fdc->retry == 0 && in fdc_worker()
914 fdc->retry > 2) { in fdc_worker()
916 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fd->fdsu, 0)) in fdc_worker()
918 tsleep(fdc, PRIBIO, "fdrecal", hz); in fdc_worker()
920 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fdc_worker()
929 tsleep(fdc->fd, PRIBIO, "fdhdstl", settle); in fdc_worker()
937 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fd->fdsu, descyl, 0)) in fdc_worker()
939 tsleep(fdc, PRIBIO, "fdseek", hz); in fdc_worker()
941 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fdc_worker()
950 tsleep(fdc->fd, PRIBIO, "fdhdstl", settle); in fdc_worker()
957 fd->fd_ioptr, fdc->retry); in fdc_worker()
963 && !(fdc->flags & FDC_NODMA)) { in fdc_worker()
966 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
967 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
969 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
973 if (fdc->flags & FDC_NODMA) { in fdc_worker()
977 fdbcdr_wr(fdc, 1, fd->fd_iosize); in fdc_worker()
980 fdc_pio(fdc); in fdc_worker()
988 if (fdc_cmd(fdc, 6, in fdc_worker()
999 if (fdc_cmd(fdc, 2, in fdc_worker()
1006 if (fdc_cmd(fdc, 9, in fdc_worker()
1021 if (fdc_cmd(fdc, 9, in fdc_worker()
1039 i = tsleep(fdc, PRIBIO, "fddata", hz); in fdc_worker()
1042 if (i == 0 && (fdc->flags & FDC_NODMA) && (bp->bio_cmd == BIO_READ)) in fdc_worker()
1043 fdc_pio(fdc); in fdc_worker()
1049 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
1050 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
1052 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
1066 fdc->flags |= FDC_NEEDS_RESET; in fdc_worker()
1071 if (fdc_read_status(fdc)) in fdc_worker()
1076 fdc->status[0], fdc->status[1], in fdc_worker()
1077 fdc->status[2], fdc->status[3]); in fdc_worker()
1079 st0 = fdc->status[0] & NE7_ST0_IC; in fdc_worker()
1082 if (st0 == NE7_ST0_IC_AT && fdc->status[1] & NE7_ST1_OR) { in fdc_worker()
1092 fdc->flags |= FDC_NEEDS_RESET; in fdc_worker()
1096 if(st0 == NE7_ST0_IC_AT && fdc->status[2] & NE7_ST2_WC) { in fdc_worker()
1102 fdc->status[0], fdc->status[1], fdc->status[2], in fdc_worker()
1103 fdc->status[3], fdc->status[4], fdc->status[5]); in fdc_worker()
1116 idp->cyl = fdc->status[3]; in fdc_worker()
1117 idp->head = fdc->status[4]; in fdc_worker()
1118 idp->sec = fdc->status[5]; in fdc_worker()
1119 idp->secshift = fdc->status[6]; in fdc_worker()
1136 fdc->retry = 0; in fdc_worker()
1144 return (fdc_biodone(fdc, 0)); in fdc_worker()
1150 struct fdc_data *fdc; in fdc_thread() local
1152 fdc = arg; in fdc_thread()
1155 mtx_lock(&fdc->fdc_mtx); in fdc_thread()
1156 fdc->flags |= FDC_KTHREAD_ALIVE; in fdc_thread()
1157 while ((fdc->flags & FDC_KTHREAD_EXIT) == 0) { in fdc_thread()
1158 mtx_unlock(&fdc->fdc_mtx); in fdc_thread()
1159 i = fdc_worker(fdc); in fdc_thread()
1161 if (fdc->bp != NULL) in fdc_thread()
1162 g_print_bio("", fdc->bp, ""); in fdc_thread()
1165 fdc->retry += i; in fdc_thread()
1166 mtx_lock(&fdc->fdc_mtx); in fdc_thread()
1168 fdc->flags &= ~(FDC_KTHREAD_EXIT | FDC_KTHREAD_ALIVE); in fdc_thread()
1169 mtx_unlock(&fdc->fdc_mtx); in fdc_thread()
1180 struct fdc_data *fdc; in fd_enqueue() local
1182 fdc = fd->fdc; in fd_enqueue()
1183 mtx_lock(&fdc->fdc_mtx); in fd_enqueue()
1189 bioq_disksort(&fdc->head, bp); in fd_enqueue()
1190 wakeup(&fdc->head); in fd_enqueue()
1197 mtx_unlock(&fdc->fdc_mtx); in fd_enqueue()
1206 struct fdc_data *fdc; in fd_probe_disk() local
1210 fdc = fd->fdc; in fd_probe_disk()
1221 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1223 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1224 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fd->fdsu, 0)) in fd_probe_disk()
1226 tsleep(fdc, PRIBIO, "fdrecal", hz); in fd_probe_disk()
1227 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fd_probe_disk()
1233 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fd->fdsu, 1, 0)) in fd_probe_disk()
1235 tsleep(fdc, PRIBIO, "fdseek", hz); in fd_probe_disk()
1236 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fd_probe_disk()
1239 if (fdin_rd(fdc) & FDI_DCHG) { in fd_probe_disk()
1242 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1244 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1246 if (fdc_sense_drive(fdc, &st3) != 0) in fd_probe_disk()
1250 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1256 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1411 struct fdc_data *fdc; in fd_access() local
1415 fdc = fd->fdc; in fd_access()
1441 mtx_lock(&fdc->fdc_mtx); in fd_access()
1443 mtx_unlock(&fdc->fdc_mtx); in fd_access()
1446 mtx_lock(&fdc->fdc_mtx); in fd_access()
1448 mtx_unlock(&fdc->fdc_mtx); in fd_access()
1531 fd->fdc->fdc_errs = 0; in fd_ioctl()
1536 if ((fd->fdc->flags & FDC_STAT_VALID) == 0) in fd_ioctl()
1538 memcpy(fsp->status, fd->fdc->status, 7 * sizeof(u_int)); in fd_ioctl()
1552 mtx_lock(&fd->fdc->fdc_mtx); in fd_ioctl()
1554 mtx_unlock(&fd->fdc->fdc_mtx); in fd_ioctl()
1588 fdc_release_resources(struct fdc_data *fdc) in fdc_release_resources() argument
1594 dev = fdc->fdc_dev; in fdc_release_resources()
1595 if (fdc->fdc_intr) in fdc_release_resources()
1596 bus_teardown_intr(dev, fdc->res_irq, fdc->fdc_intr); in fdc_release_resources()
1597 fdc->fdc_intr = NULL; in fdc_release_resources()
1598 if (fdc->res_irq != NULL) in fdc_release_resources()
1599 bus_release_resource(dev, SYS_RES_IRQ, fdc->rid_irq, in fdc_release_resources()
1600 fdc->res_irq); in fdc_release_resources()
1601 fdc->res_irq = NULL; in fdc_release_resources()
1604 if (fdc->resio[i] != NULL && fdc->resio[i] != last) { in fdc_release_resources()
1606 fdc->ridio[i], fdc->resio[i]); in fdc_release_resources()
1607 last = fdc->resio[i]; in fdc_release_resources()
1608 fdc->resio[i] = NULL; in fdc_release_resources()
1611 if (fdc->res_drq != NULL) in fdc_release_resources()
1612 bus_release_resource(dev, SYS_RES_DRQ, fdc->rid_drq, in fdc_release_resources()
1613 fdc->res_drq); in fdc_release_resources()
1614 fdc->res_drq = NULL; in fdc_release_resources()
1654 fdc_initial_reset(device_t dev, struct fdc_data *fdc) in fdc_initial_reset() argument
1662 if (fdsts_rd(fdc) == 0xff) in fdc_initial_reset()
1669 fdout_wr(fdc, 0); in fdc_initial_reset()
1670 fdout_wr(fdc, 0); in fdc_initial_reset()
1671 if (fdsts_rd(fdc) != 0) in fdc_initial_reset()
1677 fdout_wr(fdc, FDO_FRST); in fdc_initial_reset()
1679 if (fdsts_rd(fdc) != 0x80) in fdc_initial_reset()
1683 if (fdc_cmd(fdc, 3, NE7CMD_SPECIFY, NE7_SPEC_1(6, 240), in fdc_initial_reset()
1696 if (fdc_cmd(fdc, 1, NE7CMD_VERSION, 1, &ic_type)) in fdc_initial_reset()
1698 if (fdc_cmd(fdc, 1, 0x18, 1, &part_id)) in fdc_initial_reset()
1706 fdc->fdct = FDC_NE765; in fdc_initial_reset()
1712 fdc->fdct = FDC_ENHANCED; in fdc_initial_reset()
1716 fdc->fdct = FDC_UNKNOWN; in fdc_initial_reset()
1725 struct fdc_data *fdc; in fdc_detach() local
1728 fdc = device_get_softc(dev); in fdc_detach()
1734 if (fdc->fdc_intr) in fdc_detach()
1735 bus_teardown_intr(dev, fdc->res_irq, fdc->fdc_intr); in fdc_detach()
1736 fdc->fdc_intr = NULL; in fdc_detach()
1739 mtx_lock(&fdc->fdc_mtx); in fdc_detach()
1740 fdc->flags |= FDC_KTHREAD_EXIT; in fdc_detach()
1741 wakeup(&fdc->head); in fdc_detach()
1742 while ((fdc->flags & FDC_KTHREAD_ALIVE) != 0) in fdc_detach()
1743 msleep(fdc->fdc_thread, &fdc->fdc_mtx, PRIBIO, "fdcdet", 0); in fdc_detach()
1744 mtx_unlock(&fdc->fdc_mtx); in fdc_detach()
1747 fdout_wr(fdc, 0); in fdc_detach()
1749 if (!(fdc->flags & FDC_NODMA)) in fdc_detach()
1750 isa_dma_release(fdc->dmachan); in fdc_detach()
1751 fdc_release_resources(fdc); in fdc_detach()
1752 mtx_destroy(&fdc->fdc_mtx); in fdc_detach()
1784 struct fdc_data *fdc; in fdc_attach() local
1787 fdc = device_get_softc(dev); in fdc_attach()
1788 fdc->fdc_dev = dev; in fdc_attach()
1789 error = fdc_initial_reset(dev, fdc); in fdc_attach()
1794 error = bus_setup_intr(dev, fdc->res_irq, in fdc_attach()
1796 ((fdc->flags & FDC_NOFAST) ? INTR_MPSAFE : 0), in fdc_attach()
1797 ((fdc->flags & FDC_NOFAST) ? NULL : fdc_intr_fast), in fdc_attach()
1798 ((fdc->flags & FDC_NOFAST) ? fdc_intr : NULL), in fdc_attach()
1799 fdc, &fdc->fdc_intr); in fdc_attach()
1804 if (!(fdc->flags & FDC_NODMA)) { in fdc_attach()
1805 error = isa_dma_acquire(fdc->dmachan); in fdc_attach()
1807 error = isa_dma_init(fdc->dmachan, in fdc_attach()
1810 isa_dma_release(fdc->dmachan); in fdc_attach()
1815 fdc->fdcu = device_get_unit(dev); in fdc_attach()
1816 fdc->flags |= FDC_NEEDS_RESET; in fdc_attach()
1818 mtx_init(&fdc->fdc_mtx, "fdc lock", NULL, MTX_DEF); in fdc_attach()
1821 fdout_wr(fdc, fdc->fdout = 0); in fdc_attach()
1822 bioq_init(&fdc->head); in fdc_attach()
1832 struct fdc_data *fdc; in fdc_start_worker() local
1834 fdc = device_get_softc(dev); in fdc_start_worker()
1835 kproc_create(fdc_thread, fdc, &fdc->fdc_thread, 0, 0, in fdc_start_worker()
1887 struct fdc_data *fdc; in fd_probe() local
1893 fdc = device_get_softc(device_get_parent(dev)); in fd_probe()
1897 fd->fdc = fdc; in fd_probe()
1927 mtx_lock(&fdc->fdc_mtx); in fd_probe()
1932 fdc->fd = fd; in fd_probe()
1933 fdc_reset(fdc); /* XXX reset, then unreset, etc. */ in fd_probe()
1938 if ((fdc_sense_drive(fdc, &st3) == 0) && in fd_probe()
1941 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fdsu, 10, 0) == 0) { in fd_probe()
1945 fdc_sense_int(fdc, NULL, NULL); in fd_probe()
1957 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fdsu, 0) == 0) { in fd_probe()
1962 if (fdc_sense_int(fdc, &st0, NULL) == 0 && in fd_probe()
1970 fdc->fd = NULL; in fd_probe()
1971 mtx_unlock(&fdc->fdc_mtx); in fd_probe()
1999 fd->fdc = fdc; in fd_probe()
2002 callout_init_mtx(&fd->toffhandle, &fd->fdc->fdc_mtx, 0); in fd_probe()
2106 DRIVER_MODULE(fd, fdc, fd_driver, fdc_modevent, 0);