Lines Matching defs:wdc
1 /* $NetBSD: wdc.c,v 1.310 2022/05/31 08:43:15 andvar Exp $ */
61 __KERNEL_RCSID(0, "$NetBSD: wdc.c,v 1.310 2022/05/31 08:43:15 andvar Exp $");
178 * Initialize the "shadow register" handles for a standard wdc controller.
191 wdc_allocate_regs(struct wdc_softc *wdc)
194 wdc->regs = malloc(wdc->sc_atac.atac_nchannels *
207 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
248 if (atabus_alloc_drives(chp, wdc->wdc_maxdrives) != 0) {
297 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
298 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
303 if (atabus_alloc_drives(chp, wdc->wdc_maxdrives) != 0) {
322 if (wdc->select)
323 wdc->select(chp,1);
331 if (wdc->select)
332 wdc->select(chp,0);
420 (wdc->cap & WDC_CAPABILITY_PREATA) == 0) {
430 if (wdc->select)
431 wdc->select(chp,i);
495 struct wdc_softc *wdc;
499 wdc = kmem_zalloc(sizeof(*wdc), KM_SLEEP);
503 ch->ch_atac = &wdc->sc_atac;
504 wdc->regs = wdr;
507 wdc->reset = (do_reset != NULL) ? do_reset : wdc_do_reset;
516 kmem_free(wdc, sizeof(*wdc));
524 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
525 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
535 * Sanity check to see if the wdc channel responds at all.
538 if ((wdc->cap & WDC_CAPABILITY_NO_EXTRA_RESETS) == 0) {
540 if (wdc->select)
541 wdc->select(chp,0);
549 if (wdc->select)
550 wdc->select(chp,1);
570 if (wdc->select)
571 wdc->select(chp,0);
630 if (wdc->select)
631 wdc->select(chp,1);
700 if (wdc->select)
701 wdc->select(chp,0);
708 if (wdc->select)
709 wdc->select(chp,0);
719 wdc->reset(chp, RESET_POLL);
723 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL))
746 for (drive = 0; drive < wdc->wdc_maxdrives; drive++) {
749 if (wdc->select)
750 wdc->select(chp,drive);
796 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
798 KASSERT(wdc->wdc_maxdrives > 0 && wdc->wdc_maxdrives <= WDC_MAXDRIVES);
801 if (wdc->datain_pio == NULL)
802 wdc->datain_pio = wdc_datain_pio;
803 if (wdc->dataout_pio == NULL)
804 wdc->dataout_pio = wdc_dataout_pio;
806 if (wdc->reset == NULL)
807 wdc->reset = wdc_do_reset;
886 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
887 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
926 wdc->dma_status =
927 (*wdc->dma_finish)(wdc->dma_arg, chp->ch_channel,
929 if (wdc->dma_status & WDC_DMAST_NOIRQ) {
969 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1014 (*wdc->dma_finish)(wdc->dma_arg,
1030 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1031 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1039 wdc->reset(chp, poll);
1057 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL))
1067 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1068 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1073 if (wdc->select)
1074 wdc->select(chp,0);
1079 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL)) {
1085 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL))
1091 if (wdc->irqack)
1092 wdc->irqack(chp);
1100 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1101 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1116 if (wdc->select)
1117 wdc->select(chp,0);
1135 if (wdc->select)
1136 wdc->select(chp,1);
1207 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1208 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1320 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1324 wdc->dma_status =
1325 (*wdc->dma_finish)(wdc->dma_arg,
1327 if ((wdc->dma_status & WDC_DMAST_NOIRQ) == 0)
1332 wdc->dma_status = (*wdc->dma_finish)(wdc->dma_arg,
1344 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1373 wdc->dma_status =
1374 (*wdc->dma_finish)(wdc->dma_arg, chp->ch_channel,
1429 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1430 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1440 if (wdc->select)
1441 wdc->select(chp,drive);
1456 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL))
1500 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1501 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1578 if (wdc->irqack)
1579 wdc->irqack(chp);
1585 wdc->datain_pio(chp, drive_flags, data, bcount);
1597 wdc->dataout_pio(chp, drive_flags, data, bcount);
1627 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1628 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1660 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL)) {
1678 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL)) {
1702 if (! (wdc->cap & WDC_CAPABILITY_NO_AUXCTL))
1758 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1759 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1766 if (wdc->select)
1767 wdc->select(chp,drive);
1794 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1795 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1803 KASSERT(drive < wdc->wdc_maxdrives);
1805 if (wdc->select)
1806 wdc->select(chp,drive);
1812 if (wdc->cap & WDC_CAPABILITY_WIDEREGS) {
1861 struct wdc_softc *wdc = CHAN_TO_WDC(chp);
1862 struct wdc_regs *wdr = &wdc->regs[chp->ch_channel];
1868 if (wdc->select)
1869 wdc->select(chp,drive);