Module Name: src Committed By: ragge Date: Tue Mar 20 13:30:40 UTC 2018
Modified Files: src/sys/arch/vax/boot/boot: if_qe.c Log Message: Change the driver to map the data structures onto the qbus. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/vax/boot/boot/if_qe.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/vax/boot/boot/if_qe.c diff -u src/sys/arch/vax/boot/boot/if_qe.c:1.9 src/sys/arch/vax/boot/boot/if_qe.c:1.10 --- src/sys/arch/vax/boot/boot/if_qe.c:1.9 Mon Oct 26 19:16:58 2009 +++ src/sys/arch/vax/boot/boot/if_qe.c Tue Mar 20 13:30:40 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_qe.c,v 1.9 2009/10/26 19:16:58 cegger Exp $ */ +/* $NetBSD: if_qe.c,v 1.10 2018/03/20 13:30:40 ragge Exp $ */ /* * Copyright (c) 1998 Roar Thronęs. All rights reserved. @@ -69,8 +69,8 @@ static struct qe_softc { char qein[2048], qeout[2048];/* Packet buffers */ } qe_softc; -static struct qe_softc *sc = &qe_softc; -static int addr; +static struct qe_softc *sc = &qe_softc, *psc; +static int addr, ubaddr; #define QE_WCSR(csr, val) \ (*((volatile u_short *)(addr + (csr))) = (val)) @@ -111,6 +111,9 @@ qe_init(u_char *eaddr) QE_WCSR(QE_CSR_CSR, QE_RESET); QE_WCSR(QE_CSR_CSR, QE_RCSR(QE_CSR_CSR) & ~QE_RESET); + ubaddr = ubmap(0, (int)sc, sizeof(struct qe_softc)); + psc = (struct qe_softc *)ubaddr; + for (i = 0; i < 6; i++) { sc->setup_pkt[i][1] = QE_RCSR(i * 2); sc->setup_pkt[i+8][1] = QE_RCSR(i * 2); @@ -125,13 +128,13 @@ qe_init(u_char *eaddr) memset((void *)sc->rring, 0, sizeof(struct qe_ring)); sc->rring->qe_buf_len = -64; - sc->rring->qe_addr_lo = (short)((int)sc->setup_pkt); - sc->rring->qe_addr_hi = (short)((int)sc->setup_pkt >> 16); + sc->rring->qe_addr_lo = LOWORD(psc->setup_pkt); + sc->rring->qe_addr_hi = HIWORD(psc->setup_pkt); memset((void *)sc->tring, 0, sizeof(struct qe_ring)); sc->tring->qe_buf_len = -64; - sc->tring->qe_addr_lo = (short)((int)sc->setup_pkt); - sc->tring->qe_addr_hi = (short)((int)sc->setup_pkt >> 16); + sc->tring->qe_addr_lo = LOWORD(psc->setup_pkt); + sc->tring->qe_addr_hi = HIWORD(psc->setup_pkt); sc->rring[0].qe_flag = sc->rring[0].qe_status1 = QE_NOTYET; sc->rring->qe_addr_hi |= QE_VALID; @@ -141,10 +144,10 @@ qe_init(u_char *eaddr) QE_WCSR(QE_CSR_CSR, QE_XMIT_INT | QE_RCV_INT); - QE_WCSR(QE_CSR_RCLL, LOWORD(sc->rring)); - QE_WCSR(QE_CSR_RCLH, HIWORD(sc->rring)); - QE_WCSR(QE_CSR_XMTL, LOWORD(sc->tring)); - QE_WCSR(QE_CSR_XMTH, HIWORD(sc->tring)); + QE_WCSR(QE_CSR_RCLL, LOWORD(psc->rring)); + QE_WCSR(QE_CSR_RCLH, HIWORD(psc->rring)); + QE_WCSR(QE_CSR_XMTL, LOWORD(psc->tring)); + QE_WCSR(QE_CSR_XMTH, HIWORD(psc->tring)); while ((QE_RCSR(QE_CSR_CSR) & QE_INTS) != QE_INTS) ; @@ -152,31 +155,31 @@ qe_init(u_char *eaddr) QE_WCSR(QE_CSR_CSR, QE_RCSR(QE_CSR_CSR) & ~(QE_INT_ENABLE|QE_ELOOP)); QE_WCSR(QE_CSR_CSR, QE_RCSR(QE_CSR_CSR) | QE_ILOOP); - sc->rring[0].qe_addr_lo = (short)((int)sc->qein & 0xffff); - sc->rring[0].qe_addr_hi = (short)((int)sc->qein >> 16); - sc->rring[0].qe_buf_len=-MAXPACKETSIZE/2; + sc->rring[0].qe_addr_lo = LOWORD(psc->qein); + sc->rring[0].qe_addr_hi = HIWORD(psc->qein); + sc->rring[0].qe_buf_len = -MAXPACKETSIZE/2; sc->rring[0].qe_addr_hi |= QE_VALID; - sc->rring[0].qe_flag=sc->rring[0].qe_status1=QE_NOTYET; - sc->rring[0].qe_status2=1; + sc->rring[0].qe_flag = sc->rring[0].qe_status1 = QE_NOTYET; + sc->rring[0].qe_status2 = 1; sc->rring[1].qe_addr_lo = 0; sc->rring[1].qe_addr_hi = 0; sc->rring[1].qe_flag=sc->rring[1].qe_status1=QE_NOTYET; sc->rring[1].qe_status2=1; - sc->tring[0].qe_addr_lo = (short)((int)sc->qeout & 0xffff); - sc->tring[0].qe_addr_hi = (short)((int)sc->qeout >> 16); - sc->tring[0].qe_buf_len=0; - sc->tring[0].qe_flag=sc->tring[0].qe_status1=QE_NOTYET; + sc->tring[0].qe_addr_lo = LOWORD(psc->qeout); + sc->tring[0].qe_addr_hi = HIWORD(psc->qeout); + sc->tring[0].qe_buf_len = 0; + sc->tring[0].qe_flag = sc->tring[0].qe_status1 = QE_NOTYET; sc->tring[0].qe_addr_hi |= QE_EOMSG|QE_VALID; - sc->tring[1].qe_flag=sc->tring[1].qe_status1=QE_NOTYET; + sc->tring[1].qe_flag = sc->tring[1].qe_status1 = QE_NOTYET; sc->tring[1].qe_addr_lo = 0; sc->tring[1].qe_addr_hi = 0; QE_WCSR(QE_CSR_CSR, QE_RCSR(QE_CSR_CSR) | QE_RCV_ENABLE); - QE_WCSR(QE_CSR_RCLL, LOWORD(sc->rring)); - QE_WCSR(QE_CSR_RCLH, HIWORD(sc->rring)); + QE_WCSR(QE_CSR_RCLL, LOWORD(psc->rring)); + QE_WCSR(QE_CSR_RCLH, HIWORD(psc->rring)); } int @@ -206,12 +209,12 @@ retry: end: sc->rring[0].qe_status2 = sc->rring[1].qe_status2 = 1; - sc->rring[0].qe_flag=sc->rring[0].qe_status1=QE_NOTYET; - sc->rring[1].qe_flag=sc->rring[1].qe_status1=QE_NOTYET; + sc->rring[0].qe_flag = sc->rring[0].qe_status1 = QE_NOTYET; + sc->rring[1].qe_flag = sc->rring[1].qe_status1 = QE_NOTYET; QE_WCSR(QE_CSR_CSR, QE_RCSR(QE_CSR_CSR) | QE_RCV_ENABLE); - QE_WCSR(QE_CSR_RCLL, LOWORD(sc->rring)); - QE_WCSR(QE_CSR_RCLH, HIWORD(sc->rring)); + QE_WCSR(QE_CSR_RCLL, LOWORD(psc->rring)); + QE_WCSR(QE_CSR_RCLH, HIWORD(psc->rring)); return len; fail: len = -1; @@ -223,12 +226,12 @@ qe_put(struct iodesc *desc, void *pkt, s int j; memcpy((char *)sc->qeout, pkt, len); - sc->tring[0].qe_buf_len=-len/2; - sc->tring[0].qe_flag=sc->tring[0].qe_status1=QE_NOTYET; - sc->tring[1].qe_flag=sc->tring[1].qe_status1=QE_NOTYET; + sc->tring[0].qe_buf_len = -len/2; + sc->tring[0].qe_flag = sc->tring[0].qe_status1 = QE_NOTYET; + sc->tring[1].qe_flag = sc->tring[1].qe_status1 = QE_NOTYET; - QE_WCSR(QE_CSR_XMTL, LOWORD(sc->tring)); - QE_WCSR(QE_CSR_XMTH, HIWORD(sc->tring)); + QE_WCSR(QE_CSR_XMTL, LOWORD(psc->tring)); + QE_WCSR(QE_CSR_XMTH, HIWORD(psc->tring)); for(j = 0; (j < 0x10000) && ((QE_RCSR(QE_CSR_CSR) & QE_XMIT_INT) == 0); j++) ;