Lines Matching defs:xdc
140 * XDC_GO: start iopb ADDR (DVMA addr in a u_long) on XDC
142 #define XDC_GO(XDC, ADDR) { \
143 (XDC)->xdc_iopbaddr0 = ((ADDR) & 0xff); \
145 (XDC)->xdc_iopbaddr1 = ((ADDR) & 0xff); \
147 (XDC)->xdc_iopbaddr2 = ((ADDR) & 0xff); \
149 (XDC)->xdc_iopbaddr3 = (ADDR); \
150 (XDC)->xdc_iopbamod = XDC_ADDRMOD; \
151 (XDC)->xdc_csr = XDC_ADDIOPB; /* go! */ \
155 * XDC_WAIT: wait for XDC's csr "BITS" to come on in "TIME".
158 #define XDC_WAIT(XDC, LCV, TIME, BITS) { \
161 if ((XDC)->xdc_csr & (BITS)) break; \
277 CFATTACH_DECL_NEW(xdc, sizeof(struct xdc_softc),
451 * xdcmatch: determine if xdc is present or not. we do a
452 * soft reset to detect the xdc.
458 struct xdc *xdc = (void *)handle; /* XXX */
461 xdc->xdc_csr = XDC_RESET;
462 XDC_WAIT(xdc, del, XDC_RESETUSEC, XDC_RESET);
475 if (vme_space_alloc(ct, va->r[0].offset, sizeof(struct xdc), mod))
478 error = vme_probe(ct, va->r[0].offset, sizeof(struct xdc),
480 vme_space_free(va->va_vct, va->r[0].offset, sizeof(struct xdc), mod);
497 struct xdc_softc *xdc = device_private(self);
506 xdc->sc_dev = self;
512 xdc->dmatag = va->va_bdt;
515 if (vme_space_alloc(ct, va->r[0].offset, sizeof(struct xdc), mod))
516 panic("xdc: vme alloc");
518 if (vme_space_map(ct, va->r[0].offset, sizeof(struct xdc),
520 panic("xdc: vme_map");
522 xdc->xdc = (struct xdc *) bh; /* XXX */
523 xdc->ipl = va->ilevel;
524 xdc->vector = va->ivector;
527 xdc->sc_drives[lcv] = NULL;
548 &xdc->auxmap)) != 0) {
550 aprint_error_dev(xdc->sc_dev, "DMA buffer map create error %d\n",
567 &xdc->iopmap)) != 0) {
569 aprint_error_dev(xdc->sc_dev, "DMA buffer map create error %d\n",
575 if ((error = xd_dmamem_alloc(xdc->dmatag, xdc->iopmap, &seg, &rseg,
577 (void **)&xdc->iopbase,
579 aprint_error_dev(xdc->sc_dev, "DMA buffer alloc error %d\n",
583 xdc->dvmaiopb = (struct xd_iopb *)(u_long)BUS_ADDR_PADDR(busaddr);
585 memset(xdc->iopbase, 0, XDC_MAXIOPB * sizeof(struct xd_iopb));
587 xdc->reqs = malloc(XDC_MAXIOPB * sizeof(struct xd_iorq),
594 xdc->reqs[lcv].iopb = &xdc->iopbase[lcv];
595 xdc->reqs[lcv].dmaiopb = &xdc->dvmaiopb[lcv];
596 xdc->freereq[lcv] = lcv;
597 xdc->iopbase[lcv].fixd = 1; /* always the same */
598 xdc->iopbase[lcv].naddrmod = XDC_ADDRMOD; /* always the same */
599 xdc->iopbase[lcv].intr_vec = xdc->vector; /* always the same */
611 &xdc->reqs[lcv].dmamap)) != 0) {
613 aprint_error_dev(xdc->sc_dev, "DMA buffer map create error %d\n",
618 xdc
619 xdc->nrun = 0;
620 xdc->waithead = xdc->waitend = xdc->nwait = 0;
621 xdc->ndone = 0;
625 bufq_alloc(&xdc->sc_wq, "fcfs", 0);
626 callout_init(&xdc->sc_tick_ch, 0);
636 rqno = xdc_cmd(xdc, XDCMD_RDP, XDFUN_CTL, 0, 0, 0, 0, XD_SUB_POLL);
641 ctl = (struct xd_iopb_ctrl *) &xdc->iopbase[rqno];
643 if (xdc->reqs[rqno].errnum)
644 printf(": %s: ", xdc_e2str(xdc->reqs[rqno].errnum));
646 XDC_DONE(xdc, rqno, error);
651 XDC_DONE(xdc, rqno, error);
655 rqno = xdc_cmd(xdc, XDCMD_WRP, XDFUN_CTL, 0, 0, 0, 0, XD_SUB_POLL);
656 XDC_DONE(xdc, rqno, error);
658 aprint_error_dev(xdc->sc_dev, "controller config error: %s\n",
665 vme_intr_establish(ct, ih, IPL_BIO, xdcintr, xdc);
666 evcnt_attach_dynamic(&xdc->sc_intrcnt, EVCNT_TYPE_INTR, NULL,
667 device_xname(xdc->sc_dev), "intr");
678 callout_reset(&xdc->sc_tick_ch, XDC_TICKCNT, xdc_tick, xdc);
712 struct xdc_softc *xdc = device_private(parent);
736 xd->parent = xdc;
740 xdc->sc_drives[xa->driveno] = xd;
762 if ((error = xd_dmamem_alloc(xdc->dmatag, xdc->auxmap, &seg, &rseg,
766 aprint_error_dev(xdc->sc_dev, "DMA buffer alloc error %d\n",
774 rqno = xdc_cmd(xdc, XDCMD_RST, 0, xd->xd_drive, 0, 0, 0, fmode);
775 XDC_DONE(xdc, rqno, error);
788 rqno = xdc_cmd(xdc, XDCMD_WRP, XDFUN_FMT, xd->xd_drive, 0, 0, 0, fmode);
789 XDC_DONE(xdc, rqno, error);
797 rqno = xdc_cmd(xdc, XDCMD_RDP, XDFUN_DRV, xd->xd_drive, 0, 0, 0, fmode);
799 driopb = (struct xd_iopb_drive *) &xdc->iopbase[rqno];
802 XDC_DONE(xdc, rqno, error);
820 rqno = xdc_cmd(xdc, XDCMD_WRP, XDFUN_DRV, xd->xd_drive, 0, 0, 0, fmode);
821 XDC_DONE(xdc, rqno, error);
829 rqno = xdc_cmd(xdc, XDCMD_RD, 0, xd->xd_drive, 0, 1, dmaddr, fmode);
830 XDC_DONE(xdc, rqno, error);
856 rqno = xdc_cmd(xdc, XDCMD_WRP, XDFUN_DRV, xd->xd_drive, 0, 0, 0, fmode);
857 XDC_DONE(xdc, rqno, error);
872 rqno = xdc_cmd(xdc, XDCMD_RD, 0, xd->xd_drive, blk, 1, dmaddr, fmode);
873 XDC_DONE(xdc, rqno, error);
902 xd_dmamem_free(xdc->dmatag, xdc->auxmap,
1366 xdc_rqinit(struct xd_iorq *rq, struct xdc_softc *xdc, struct xd_softc *xd, int md, u_long blk, int cnt, void *db, struct buf *bp)
1368 rq->xdc = xdc;
1408 : iorq->xdc->ipl;
1426 iorq->xdc->ipl;
1443 iorq->xdc->ipl;
1461 : iorq->xdc->ipl;
1666 if (xdcsc->xdc->xdc_csr & XDC_ADDING) {
1668 printf("xdc_submit_iorq: XDC not ready (ADDING)\n");
1701 XDC_GO(xdcsc->xdc, iopbaddr); /* go! */
1737 struct xdc *xdc = xdcsc->xdc;
1748 XDC_WAIT(xdc, count, XDC_MAXTIME, (XDC_REMIOPB | XDC_F_ERROR));
1802 * xdc_reset: reset one drive. NOTE: assumes xdc was just reset.
1816 XDC_GO(xdcsc->xdc, addr); /* go! */
1817 XDC_WAIT(xdcsc->xdc, del, XDC_RESETUSEC, XDC_REMIOPB);
1821 xdcsc->xdc->xdc_csr = XDC_RESET;
1822 XDC_WAIT(xdcsc->xdc, del, XDC_RESETUSEC, XDC_RESET);
1826 xdcsc->xdc->xdc_csr = XDC_CLRRIO; /* clear RIO */
1848 xdcsc->xdc->xdc_csr = XDC_RESET;
1849 XDC_WAIT(xdcsc->xdc, del, XDC_RESETUSEC, XDC_RESET);
1943 (xdcsc->xdc->xdc_csr & XDC_ADDING) == 0) {
1959 struct xdc *xdc = xdcsc->xdc;
1964 if (xdc->xdc_csr & XDC_F_ERROR) {
1970 errnum = xdc->xdc_f_err;
1993 if (xdc->xdc_csr & XDC_REMIOPB) {
1994 xdc->xdc_csr = XDC_CLRRIO;
2130 : device_xname(iorq->xdc->sc_dev));
2280 xdcsc->xdc->xdc_csr, xdcsc->nwait, xdcsc->nfree, xdcsc->nrun,
2291 /* reduce ttl for each request if one goes to zero, reset xdc */