diff options
author | harti <harti@FreeBSD.org> | 2003-08-05 12:26:26 +0000 |
---|---|---|
committer | harti <harti@FreeBSD.org> | 2003-08-05 12:26:26 +0000 |
commit | 8ec20dfab30c700b6510b185fedfb7563ee8cfa1 (patch) | |
tree | f0501de48d8e91ccc1cb0778a3ac449b4434c52e /sys/dev/en | |
parent | 1d482c7b900462617a10a38708428731ebc7408c (diff) | |
download | FreeBSD-src-8ec20dfab30c700b6510b185fedfb7563ee8cfa1.zip FreeBSD-src-8ec20dfab30c700b6510b185fedfb7563ee8cfa1.tar.gz |
Use the generic getvccs function from net/if_atmsubr.c and remove
the home-grown version.
Diffstat (limited to 'sys/dev/en')
-rw-r--r-- | sys/dev/en/midway.c | 58 |
1 files changed, 4 insertions, 54 deletions
diff --git a/sys/dev/en/midway.c b/sys/dev/en/midway.c index e6726a8..8693ba9 100644 --- a/sys/dev/en/midway.c +++ b/sys/dev/en/midway.c @@ -1512,54 +1512,6 @@ en_init(struct en_softc *sc) * Ioctls */ /* - * Return a table of all currently open VCCs. - */ -static struct atmio_vcctable * -en_get_vccs(struct en_softc *sc, int flags) -{ - struct atmio_vcctable *vccs; - struct atmio_vcc *v; - u_int vci, alloc; - - alloc = 10; - vccs = NULL; - do { - vccs = reallocf(vccs, - sizeof(*vccs) + alloc * sizeof(vccs->vccs[0]), - M_TEMP, flags); - if (vccs == NULL) - return (NULL); - - vccs->count = 0; - v = vccs->vccs; - EN_LOCK(sc); - for (vci = 0; vci < MID_N_VC; vci++) { - if (sc->vccs[vci] == NULL) - continue; - - if (vccs->count++ == alloc) { - alloc *= 2; - break; - } - bzero(v, sizeof(*v)); - v->flags = ATMIO_FLAG_PVC | sc->vccs[vci]->vcc.flags; - v->vpi = 0; - v->vci = vci; - if (sc->vccs[vci]->vcc.flags & ATM_PH_AAL5) - v->aal = ATMIO_AAL_5; - else - v->aal = ATMIO_AAL_0; - v->traffic = ATMIO_TRAFFIC_UBR; - v->tparam.pcr = sc->ifatm.mib.pcr; - v++; - } - EN_UNLOCK(sc); - } while (vci < MID_N_VC); - - return (vccs); -} - -/* * en_ioctl: handle ioctl requests * * NOTE: if you add an ioctl to set txspeed, you should choose a new @@ -1641,7 +1593,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) break; case SIOCATMGETVCCS: /* internal netgraph use */ - vtab = en_get_vccs(sc, M_NOWAIT); + vtab = atm_getvccs((struct atmio_vcc **)sc->vccs, + MID_N_VC, sc->vccs_open, &sc->en_mtx, 0); if (vtab == NULL) { error = ENOMEM; break; @@ -1650,11 +1603,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) break; case SIOCATMGVCCS: /* return vcc table */ - vtab = en_get_vccs(sc, M_WAITOK); - if (vtab == NULL) { - error = ENOMEM; - break; - } + vtab = atm_getvccs((struct atmio_vcc **)sc->vccs, + MID_N_VC, sc->vccs_open, &sc->en_mtx, 1); error = copyout(vtab, ifr->ifr_data, sizeof(*vtab) + vtab->count * sizeof(vtab->vccs[0])); free(vtab, M_DEVBUF); |