Lines Matching refs:fdc
241 struct fdc_data *fdc; /* pointer to controller structure */ member
272 static SYSCTL_NODE(_debug, OID_AUTO, fdc, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
321 fdregwr(struct fdc_data *fdc, int reg, uint8_t v) in fdregwr() argument
324 bus_space_write_1(fdc->iot, fdc->ioh[reg], fdc->ioff[reg], v); in fdregwr()
328 fdregrd(struct fdc_data *fdc, int reg) in fdregrd() argument
331 return bus_space_read_1(fdc->iot, fdc->ioh[reg], fdc->ioff[reg]); in fdregrd()
335 fdctl_wr(struct fdc_data *fdc, u_int8_t v) in fdctl_wr() argument
338 fdregwr(fdc, FDCTL, v); in fdctl_wr()
342 fdout_wr(struct fdc_data *fdc, u_int8_t v) in fdout_wr() argument
345 fdregwr(fdc, FDOUT, v); in fdout_wr()
349 fdsts_rd(struct fdc_data *fdc) in fdsts_rd() argument
352 return fdregrd(fdc, FDSTS); in fdsts_rd()
356 fddsr_wr(struct fdc_data *fdc, u_int8_t v) in fddsr_wr() argument
359 fdregwr(fdc, FDDSR, v); in fddsr_wr()
363 fddata_wr(struct fdc_data *fdc, u_int8_t v) in fddata_wr() argument
366 fdregwr(fdc, FDDATA, v); in fddata_wr()
370 fddata_rd(struct fdc_data *fdc) in fddata_rd() argument
373 return fdregrd(fdc, FDDATA); in fddata_rd()
377 fdin_rd(struct fdc_data *fdc) in fdin_rd() argument
380 return fdregrd(fdc, FDCTL); in fdin_rd()
388 fdbcdr_wr(struct fdc_data *fdc, int iswrite, uint16_t count) in fdbcdr_wr() argument
390 fdregwr(fdc, FDBCDR, (count - 1) & 0xff); in fdbcdr_wr()
391 fdregwr(fdc, FDBCDR + 1, in fdbcdr_wr()
396 fdc_err(struct fdc_data *fdc, const char *s) in fdc_err() argument
398 fdc->fdc_errs++; in fdc_err()
400 if (fdc->fdc_errs < FDC_ERRMAX) in fdc_err()
401 device_printf(fdc->fdc_dev, "%s", s); in fdc_err()
402 else if (fdc->fdc_errs == FDC_ERRMAX) in fdc_err()
403 device_printf(fdc->fdc_dev, "too many errors, not " in fdc_err()
419 fdc_in(struct fdc_data *fdc, int *ptr) in fdc_in() argument
425 i = fdsts_rd(fdc) & (NE7_DIO | NE7_RQM); in fdc_in()
427 i = fddata_rd(fdc); in fdc_in()
433 return (fdc_err(fdc, "ready for output in input\n")); in fdc_in()
437 return (fdc_err(fdc, bootverbose? "input ready timeout\n": 0)); in fdc_in()
441 fdc_out(struct fdc_data *fdc, int x) in fdc_out() argument
447 i = fdsts_rd(fdc) & (NE7_DIO | NE7_RQM); in fdc_out()
449 fddata_wr(fdc, x); in fdc_out()
453 return (fdc_err(fdc, "ready for input in output\n")); in fdc_out()
457 return (fdc_err(fdc, bootverbose? "output ready timeout\n": 0)); in fdc_out()
469 fdc_cmd(struct fdc_data *fdc, int n_out, ...) in fdc_cmd() argument
481 if (fdc_out(fdc, i) < 0) { in fdc_cmd()
486 fdc->flags |= FDC_NEEDS_RESET; in fdc_cmd()
488 return fdc_err(fdc, msg); in fdc_cmd()
494 if (fdc_in(fdc, ptr) != 0) { in fdc_cmd()
499 fdc->flags |= FDC_NEEDS_RESET; in fdc_cmd()
501 return fdc_err(fdc, msg); in fdc_cmd()
509 fdc_reset(struct fdc_data *fdc) in fdc_reset() argument
513 if (fdc->fdct == FDC_ENHANCED) { in fdc_reset()
515 fddsr_wr(fdc, I8207X_DSR_SR); in fdc_reset()
518 fdout_wr(fdc, fdc->fdout & ~(FDO_FRST|FDO_FDMAEN)); in fdc_reset()
521 fdout_wr(fdc, fdc->fdout & ~FDO_FDMAEN); in fdc_reset()
524 fdout_wr(fdc, fdc->fdout); in fdc_reset()
527 if (fdc_cmd(fdc, 3, NE7CMD_SPECIFY, spec1, spec2, 0)) in fdc_reset()
528 device_printf(fdc->fdc_dev, " SPECIFY failed in reset\n"); in fdc_reset()
530 if (fdc->fdct == FDC_ENHANCED) { in fdc_reset()
531 if (fdc_cmd(fdc, 4, in fdc_reset()
540 device_printf(fdc->fdc_dev, in fdc_reset()
543 if (fdc_cmd(fdc, 1, in fdc_reset()
547 device_printf(fdc->fdc_dev, in fdc_reset()
557 fdc_sense_drive(struct fdc_data *fdc, int *st3p) in fdc_sense_drive() argument
561 if (fdc_cmd(fdc, 2, NE7CMD_SENSED, fdc->fd->fdsu, 1, &st3)) in fdc_sense_drive()
562 return (fdc_err(fdc, "Sense Drive Status failed\n")); in fdc_sense_drive()
569 fdc_sense_int(struct fdc_data *fdc, int *st0p, int *cylp) in fdc_sense_int() argument
573 ret = fdc_cmd(fdc, 1, NE7CMD_SENSEI, 1, &st0); in fdc_sense_int()
575 (void)fdc_err(fdc, "sense intr err reading stat reg 0\n"); in fdc_sense_int()
589 if (fdc_in(fdc, &cyl) != 0) in fdc_sense_int()
590 return fdc_err(fdc, "can't get cyl num\n"); in fdc_sense_int()
599 fdc_read_status(struct fdc_data *fdc) in fdc_read_status() argument
604 ret = fdc_in(fdc, &status); in fdc_read_status()
605 fdc->status[i] = status; in fdc_read_status()
611 fdc->flags |= FDC_STAT_VALID; in fdc_read_status()
613 fdc->flags &= ~FDC_STAT_VALID; in fdc_read_status()
624 struct fdc_data *fdc; in fd_select() local
627 fdc = fd->fdc; in fd_select()
628 fdc->fdout &= ~FDO_FDSEL; in fd_select()
629 fdc->fdout |= FDO_FDMAEN | FDO_FRST | fd->fdsu; in fd_select()
630 fdout_wr(fdc, fdc->fdout); in fd_select()
641 mtx_assert(&fd->fdc->fdc_mtx, MA_OWNED); in fd_turnon()
649 bioq_disksort(&fd->fdc->head, bp); in fd_turnon()
653 wakeup(&fd->fdc->head); in fd_turnon()
659 struct fdc_data *fdc; in fd_motor() local
661 fdc = fd->fdc; in fd_motor()
667 fdc->fdout |= (FDO_MOEN0 << fd->fdsu); in fd_motor()
672 fdc->fdout &= ~(FDO_MOEN0 << fd->fdsu); in fd_motor()
674 fdout_wr(fdc, fdc->fdout); in fd_motor()
682 mtx_assert(&fd->fdc->fdc_mtx, MA_OWNED); in fd_turnoff()
709 fdc_pio(struct fdc_data *fdc) in fdc_pio() argument
715 bp = fdc->bp; in fdc_pio()
716 cptr = fdc->fd->fd_ioptr; in fdc_pio()
717 count = fdc->fd->fd_iosize; in fdc_pio()
720 fdbcdr_wr(fdc, 0, count); in fdc_pio()
721 bus_space_read_multi_1(fdc->iot, fdc->ioh[FD_YE_DATAPORT], in fdc_pio()
722 fdc->ioff[FD_YE_DATAPORT], cptr, count); in fdc_pio()
724 bus_space_write_multi_1(fdc->iot, fdc->ioh[FD_YE_DATAPORT], in fdc_pio()
725 fdc->ioff[FD_YE_DATAPORT], cptr, count); in fdc_pio()
726 fdbcdr_wr(fdc, 0, count); /* needed? */ in fdc_pio()
731 fdc_biodone(struct fdc_data *fdc, int error) in fdc_biodone() argument
736 fd = fdc->fd; in fdc_biodone()
737 bp = fdc->bp; in fdc_biodone()
739 mtx_lock(&fdc->fdc_mtx); in fdc_biodone()
742 fdc->bp = NULL; in fdc_biodone()
743 fdc->fd = NULL; in fdc_biodone()
744 mtx_unlock(&fdc->fdc_mtx); in fdc_biodone()
746 if ((debugflags & 2) && fd->fdc->retry > 0) in fdc_biodone()
747 printf("retries: %d\n", fd->fdc->retry); in fdc_biodone()
760 fdc_worker(struct fdc_data *fdc) in fdc_worker() argument
775 bp = fdc->bp; in fdc_worker()
776 fd = fdc->fd; in fdc_worker()
778 (fdc->retry >= retries || (fd->options & FDOPT_NORETRY))) { in fdc_worker()
781 if (fdc->flags & FDC_NEEDS_RESET) { in fdc_worker()
782 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
784 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
786 return (fdc_biodone(fdc, EIO)); in fdc_worker()
793 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
794 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
796 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
800 if (fdc->flags & FDC_NEEDS_RESET) { in fdc_worker()
801 fdc->flags &= ~FDC_NEEDS_RESET; in fdc_worker()
802 fdc_reset(fdc); in fdc_worker()
806 tsleep(fdc, PRIBIO, "fdcrst", hz); in fdc_worker()
809 fdc_sense_int(fdc, &st0, &cyl); in fdc_worker()
815 if (fdc->bp == NULL) { in fdc_worker()
816 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
818 fdc->bp = bioq_takefirst(&fdc->head); in fdc_worker()
819 if (fdc->bp == NULL) in fdc_worker()
820 msleep(&fdc->head, &fdc->fdc_mtx, in fdc_worker()
822 } while (fdc->bp == NULL && in fdc_worker()
823 (fdc->flags & FDC_KTHREAD_EXIT) == 0); in fdc_worker()
824 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
826 if (fdc->bp == NULL) in fdc_worker()
833 bp = fdc->bp; in fdc_worker()
834 fd = fdc->fd = bp->bio_driver1; in fdc_worker()
835 fdc->retry = 0; in fdc_worker()
846 if (fdc->fdct == FDC_ENHANCED) in fdc_worker()
847 fddsr_wr(fdc, fd->ft->trans); in fdc_worker()
849 fdctl_wr(fdc, fd->ft->trans); in fdc_worker()
853 !(fdin_rd(fdc) & FDI_DCHG) && in fdc_worker()
856 return (fdc_biodone(fdc, 0)); in fdc_worker()
864 return (fdc_biodone(fdc, ENXIO)); in fdc_worker()
867 if (fdin_rd(fdc) & FDI_DCHG) { in fdc_worker()
870 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
873 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
881 return (fdc_biodone(fdc, ENXIO)); in fdc_worker()
887 if(fdc_sense_drive(fdc, &st3) != 0) in fdc_worker()
890 return (fdc_biodone(fdc, EROFS)); in fdc_worker()
904 if (fdc->retry == 0 && in fdc_worker()
916 fdc->retry > 2) { in fdc_worker()
918 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fd->fdsu, 0)) in fdc_worker()
920 tsleep(fdc, PRIBIO, "fdrecal", hz); in fdc_worker()
922 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fdc_worker()
931 tsleep(fdc->fd, PRIBIO, "fdhdstl", settle); in fdc_worker()
939 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fd->fdsu, descyl, 0)) in fdc_worker()
941 tsleep(fdc, PRIBIO, "fdseek", hz); in fdc_worker()
943 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fdc_worker()
952 tsleep(fdc->fd, PRIBIO, "fdhdstl", settle); in fdc_worker()
959 fd->fd_ioptr, fdc->retry); in fdc_worker()
965 && !(fdc->flags & FDC_NODMA)) { in fdc_worker()
968 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
969 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
971 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
975 if (fdc->flags & FDC_NODMA) { in fdc_worker()
979 fdbcdr_wr(fdc, 1, fd->fd_iosize); in fdc_worker()
982 fdc_pio(fdc); in fdc_worker()
990 if (fdc_cmd(fdc, 6, in fdc_worker()
1001 if (fdc_cmd(fdc, 2, in fdc_worker()
1008 if (fdc_cmd(fdc, 9, in fdc_worker()
1023 if (fdc_cmd(fdc, 9, in fdc_worker()
1041 i = tsleep(fdc, PRIBIO, "fddata", hz); in fdc_worker()
1044 if (i == 0 && (fdc->flags & FDC_NODMA) && (bp->bio_cmd == BIO_READ)) in fdc_worker()
1045 fdc_pio(fdc); in fdc_worker()
1051 fd->fd_ioptr, fd->fd_iosize, fdc->dmachan); in fdc_worker()
1052 mtx_lock(&fdc->fdc_mtx); in fdc_worker()
1054 mtx_unlock(&fdc->fdc_mtx); in fdc_worker()
1068 fdc->flags |= FDC_NEEDS_RESET; in fdc_worker()
1073 if (fdc_read_status(fdc)) in fdc_worker()
1078 fdc->status[0], fdc->status[1], in fdc_worker()
1079 fdc->status[2], fdc->status[3]); in fdc_worker()
1081 st0 = fdc->status[0] & NE7_ST0_IC; in fdc_worker()
1084 if (st0 == NE7_ST0_IC_AT && fdc->status[1] & NE7_ST1_OR) { in fdc_worker()
1094 fdc->flags |= FDC_NEEDS_RESET; in fdc_worker()
1098 if(st0 == NE7_ST0_IC_AT && fdc->status[2] & NE7_ST2_WC) { in fdc_worker()
1104 fdc->status[0], fdc->status[1], fdc->status[2], in fdc_worker()
1105 fdc->status[3], fdc->status[4], fdc->status[5]); in fdc_worker()
1118 idp->cyl = fdc->status[3]; in fdc_worker()
1119 idp->head = fdc->status[4]; in fdc_worker()
1120 idp->sec = fdc->status[5]; in fdc_worker()
1121 idp->secshift = fdc->status[6]; in fdc_worker()
1138 fdc->retry = 0; in fdc_worker()
1146 return (fdc_biodone(fdc, 0)); in fdc_worker()
1152 struct fdc_data *fdc; in fdc_thread() local
1154 fdc = arg; in fdc_thread()
1157 mtx_lock(&fdc->fdc_mtx); in fdc_thread()
1158 fdc->flags |= FDC_KTHREAD_ALIVE; in fdc_thread()
1159 while ((fdc->flags & FDC_KTHREAD_EXIT) == 0) { in fdc_thread()
1160 mtx_unlock(&fdc->fdc_mtx); in fdc_thread()
1161 i = fdc_worker(fdc); in fdc_thread()
1163 if (fdc->bp != NULL) in fdc_thread()
1164 g_print_bio("", fdc->bp, ""); in fdc_thread()
1167 fdc->retry += i; in fdc_thread()
1168 mtx_lock(&fdc->fdc_mtx); in fdc_thread()
1170 fdc->flags &= ~(FDC_KTHREAD_EXIT | FDC_KTHREAD_ALIVE); in fdc_thread()
1171 mtx_unlock(&fdc->fdc_mtx); in fdc_thread()
1182 struct fdc_data *fdc; in fd_enqueue() local
1184 fdc = fd->fdc; in fd_enqueue()
1185 mtx_lock(&fdc->fdc_mtx); in fd_enqueue()
1191 bioq_disksort(&fdc->head, bp); in fd_enqueue()
1192 wakeup(&fdc->head); in fd_enqueue()
1199 mtx_unlock(&fdc->fdc_mtx); in fd_enqueue()
1208 struct fdc_data *fdc; in fd_probe_disk() local
1212 fdc = fd->fdc; in fd_probe_disk()
1223 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1225 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1226 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fd->fdsu, 0)) in fd_probe_disk()
1228 tsleep(fdc, PRIBIO, "fdrecal", hz); in fd_probe_disk()
1229 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fd_probe_disk()
1235 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fd->fdsu, 1, 0)) in fd_probe_disk()
1237 tsleep(fdc, PRIBIO, "fdseek", hz); in fd_probe_disk()
1238 if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID) in fd_probe_disk()
1241 if (fdin_rd(fdc) & FDI_DCHG) { in fd_probe_disk()
1244 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1246 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1248 if (fdc_sense_drive(fdc, &st3) != 0) in fd_probe_disk()
1252 mtx_lock(&fdc->fdc_mtx); in fd_probe_disk()
1258 mtx_unlock(&fdc->fdc_mtx); in fd_probe_disk()
1413 struct fdc_data *fdc; in fd_access() local
1417 fdc = fd->fdc; in fd_access()
1443 mtx_lock(&fdc->fdc_mtx); in fd_access()
1445 mtx_unlock(&fdc->fdc_mtx); in fd_access()
1448 mtx_lock(&fdc->fdc_mtx); in fd_access()
1450 mtx_unlock(&fdc->fdc_mtx); in fd_access()
1533 fd->fdc->fdc_errs = 0; in fd_ioctl()
1538 if ((fd->fdc->flags & FDC_STAT_VALID) == 0) in fd_ioctl()
1540 memcpy(fsp->status, fd->fdc->status, 7 * sizeof(u_int)); in fd_ioctl()
1554 mtx_lock(&fd->fdc->fdc_mtx); in fd_ioctl()
1556 mtx_unlock(&fd->fdc->fdc_mtx); in fd_ioctl()
1590 fdc_release_resources(struct fdc_data *fdc) in fdc_release_resources() argument
1596 dev = fdc->fdc_dev; in fdc_release_resources()
1597 if (fdc->fdc_intr) in fdc_release_resources()
1598 bus_teardown_intr(dev, fdc->res_irq, fdc->fdc_intr); in fdc_release_resources()
1599 fdc->fdc_intr = NULL; in fdc_release_resources()
1600 if (fdc->res_irq != NULL) in fdc_release_resources()
1601 bus_release_resource(dev, SYS_RES_IRQ, fdc->rid_irq, in fdc_release_resources()
1602 fdc->res_irq); in fdc_release_resources()
1603 fdc->res_irq = NULL; in fdc_release_resources()
1606 if (fdc->resio[i] != NULL && fdc->resio[i] != last) { in fdc_release_resources()
1608 fdc->ridio[i], fdc->resio[i]); in fdc_release_resources()
1609 last = fdc->resio[i]; in fdc_release_resources()
1610 fdc->resio[i] = NULL; in fdc_release_resources()
1613 if (fdc->res_drq != NULL) in fdc_release_resources()
1614 bus_release_resource(dev, SYS_RES_DRQ, fdc->rid_drq, in fdc_release_resources()
1615 fdc->res_drq); in fdc_release_resources()
1616 fdc->res_drq = NULL; in fdc_release_resources()
1656 fdc_initial_reset(device_t dev, struct fdc_data *fdc) in fdc_initial_reset() argument
1664 if (fdsts_rd(fdc) == 0xff) in fdc_initial_reset()
1671 fdout_wr(fdc, 0); in fdc_initial_reset()
1672 fdout_wr(fdc, 0); in fdc_initial_reset()
1673 if (fdsts_rd(fdc) != 0) in fdc_initial_reset()
1679 fdout_wr(fdc, FDO_FRST); in fdc_initial_reset()
1681 if (fdsts_rd(fdc) != 0x80) in fdc_initial_reset()
1685 if (fdc_cmd(fdc, 3, NE7CMD_SPECIFY, NE7_SPEC_1(6, 240), in fdc_initial_reset()
1698 if (fdc_cmd(fdc, 1, NE7CMD_VERSION, 1, &ic_type)) in fdc_initial_reset()
1700 if (fdc_cmd(fdc, 1, 0x18, 1, &part_id)) in fdc_initial_reset()
1708 fdc->fdct = FDC_NE765; in fdc_initial_reset()
1714 fdc->fdct = FDC_ENHANCED; in fdc_initial_reset()
1718 fdc->fdct = FDC_UNKNOWN; in fdc_initial_reset()
1727 struct fdc_data *fdc; in fdc_detach() local
1730 fdc = device_get_softc(dev); in fdc_detach()
1736 if (fdc->fdc_intr) in fdc_detach()
1737 bus_teardown_intr(dev, fdc->res_irq, fdc->fdc_intr); in fdc_detach()
1738 fdc->fdc_intr = NULL; in fdc_detach()
1741 mtx_lock(&fdc->fdc_mtx); in fdc_detach()
1742 fdc->flags |= FDC_KTHREAD_EXIT; in fdc_detach()
1743 wakeup(&fdc->head); in fdc_detach()
1744 while ((fdc->flags & FDC_KTHREAD_ALIVE) != 0) in fdc_detach()
1745 msleep(fdc->fdc_thread, &fdc->fdc_mtx, PRIBIO, "fdcdet", 0); in fdc_detach()
1746 mtx_unlock(&fdc->fdc_mtx); in fdc_detach()
1749 fdout_wr(fdc, 0); in fdc_detach()
1751 if (!(fdc->flags & FDC_NODMA)) in fdc_detach()
1752 isa_dma_release(fdc->dmachan); in fdc_detach()
1753 fdc_release_resources(fdc); in fdc_detach()
1754 mtx_destroy(&fdc->fdc_mtx); in fdc_detach()
1786 struct fdc_data *fdc; in fdc_attach() local
1789 fdc = device_get_softc(dev); in fdc_attach()
1790 fdc->fdc_dev = dev; in fdc_attach()
1791 error = fdc_initial_reset(dev, fdc); in fdc_attach()
1796 error = bus_setup_intr(dev, fdc->res_irq, in fdc_attach()
1798 ((fdc->flags & FDC_NOFAST) ? INTR_MPSAFE : 0), in fdc_attach()
1799 ((fdc->flags & FDC_NOFAST) ? NULL : fdc_intr_fast), in fdc_attach()
1800 ((fdc->flags & FDC_NOFAST) ? fdc_intr : NULL), in fdc_attach()
1801 fdc, &fdc->fdc_intr); in fdc_attach()
1806 if (!(fdc->flags & FDC_NODMA)) { in fdc_attach()
1807 error = isa_dma_acquire(fdc->dmachan); in fdc_attach()
1809 error = isa_dma_init(fdc->dmachan, in fdc_attach()
1812 isa_dma_release(fdc->dmachan); in fdc_attach()
1817 fdc->fdcu = device_get_unit(dev); in fdc_attach()
1818 fdc->flags |= FDC_NEEDS_RESET; in fdc_attach()
1820 mtx_init(&fdc->fdc_mtx, "fdc lock", NULL, MTX_DEF); in fdc_attach()
1823 fdout_wr(fdc, fdc->fdout = 0); in fdc_attach()
1824 bioq_init(&fdc->head); in fdc_attach()
1834 struct fdc_data *fdc; in fdc_start_worker() local
1836 fdc = device_get_softc(dev); in fdc_start_worker()
1837 kproc_create(fdc_thread, fdc, &fdc->fdc_thread, 0, 0, in fdc_start_worker()
1890 struct fdc_data *fdc; in fd_probe() local
1896 fdc = device_get_softc(device_get_parent(dev)); in fd_probe()
1900 fd->fdc = fdc; in fd_probe()
1930 mtx_lock(&fdc->fdc_mtx); in fd_probe()
1935 fdc->fd = fd; in fd_probe()
1936 fdc_reset(fdc); /* XXX reset, then unreset, etc. */ in fd_probe()
1941 if ((fdc_sense_drive(fdc, &st3) == 0) && in fd_probe()
1944 if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fdsu, 10, 0) == 0) { in fd_probe()
1948 fdc_sense_int(fdc, NULL, NULL); in fd_probe()
1960 if (fdc_cmd(fdc, 2, NE7CMD_RECAL, fdsu, 0) == 0) { in fd_probe()
1965 if (fdc_sense_int(fdc, &st0, NULL) == 0 && in fd_probe()
1973 fdc->fd = NULL; in fd_probe()
1974 mtx_unlock(&fdc->fdc_mtx); in fd_probe()
2002 fd->fdc = fdc; in fd_probe()
2005 callout_init_mtx(&fd->toffhandle, &fd->fdc->fdc_mtx, 0); in fd_probe()
2109 DRIVER_MODULE(fd, fdc, fd_driver, fdc_modevent, 0);