if_patm_ioctl.c (118158) | if_patm_ioctl.c (118539) |
---|---|
1/* 2 * Copyright (c) 2003 3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 15 unchanged lines hidden (view full) --- 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * Author: Hartmut Brandt <harti@freebsd.org> 28 * 29 * Driver for IDT77252 based cards like ProSum's. 30 */ 31#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 2003 3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 15 unchanged lines hidden (view full) --- 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * Author: Hartmut Brandt <harti@freebsd.org> 28 * 29 * Driver for IDT77252 based cards like ProSum's. 30 */ 31#include <sys/cdefs.h> |
32__FBSDID("$FreeBSD: head/sys/dev/patm/if_patm_ioctl.c 118158 2003-07-29 13:21:57Z harti $"); | 32__FBSDID("$FreeBSD: head/sys/dev/patm/if_patm_ioctl.c 118539 2003-08-06 13:09:36Z harti $"); |
33 34#include "opt_inet.h" 35#include "opt_natm.h" 36 37#include <sys/types.h> 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/malloc.h> --- 29 unchanged lines hidden (view full) --- 70#include <dev/utopia/utopia.h> 71#include <dev/patm/idt77252reg.h> 72#include <dev/patm/if_patmvar.h> 73 74/* 75 * Open the VCC with the given parameters 76 */ 77static int | 33 34#include "opt_inet.h" 35#include "opt_natm.h" 36 37#include <sys/types.h> 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/malloc.h> --- 29 unchanged lines hidden (view full) --- 70#include <dev/utopia/utopia.h> 71#include <dev/patm/idt77252reg.h> 72#include <dev/patm/if_patmvar.h> 73 74/* 75 * Open the VCC with the given parameters 76 */ 77static int |
78patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg, u_int async) | 78patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg) |
79{ 80 u_int cid; 81 struct patm_vcc *vcc; 82 int error = 0; 83 84 patm_debug(sc, VCC, "Open VCC: %u.%u flags=%#x", arg->param.vpi, 85 arg->param.vci, arg->param.flags); 86 --- 28 unchanged lines hidden (view full) --- 115 /* ups, already open */ 116 error = EBUSY; 117 goto done; 118 } 119 120 /* check some parameters */ 121 vcc->cid = cid; 122 vcc->vcc = arg->param; | 79{ 80 u_int cid; 81 struct patm_vcc *vcc; 82 int error = 0; 83 84 patm_debug(sc, VCC, "Open VCC: %u.%u flags=%#x", arg->param.vpi, 85 arg->param.vci, arg->param.flags); 86 --- 28 unchanged lines hidden (view full) --- 115 /* ups, already open */ 116 error = EBUSY; 117 goto done; 118 } 119 120 /* check some parameters */ 121 vcc->cid = cid; 122 vcc->vcc = arg->param; |
123 vcc->vflags = async; | 123 vcc->vflags = 0; |
124 vcc->rxhand = arg->rxhand; 125 switch (vcc->vcc.aal) { 126 127 case ATMIO_AAL_0: 128 case ATMIO_AAL_34: 129 case ATMIO_AAL_5: 130 break; 131 --- 72 unchanged lines hidden (view full) --- 204 */ 205static int 206patm_open_vcc1(struct patm_softc *sc, struct atm_pseudoioctl *ph) 207{ 208 struct atmio_openvcc v; 209 210 bzero(&v, sizeof(v)); 211 v.param.flags = ATM_PH_FLAGS(&ph->aph) & (ATM_PH_AAL5 | ATM_PH_LLCSNAP); | 124 vcc->rxhand = arg->rxhand; 125 switch (vcc->vcc.aal) { 126 127 case ATMIO_AAL_0: 128 case ATMIO_AAL_34: 129 case ATMIO_AAL_5: 130 break; 131 --- 72 unchanged lines hidden (view full) --- 204 */ 205static int 206patm_open_vcc1(struct patm_softc *sc, struct atm_pseudoioctl *ph) 207{ 208 struct atmio_openvcc v; 209 210 bzero(&v, sizeof(v)); 211 v.param.flags = ATM_PH_FLAGS(&ph->aph) & (ATM_PH_AAL5 | ATM_PH_LLCSNAP); |
212 v.param.flags |= ATMIO_FLAG_ASYNC; 213 |
|
212 v.param.vpi = ATM_PH_VPI(&ph->aph); 213 v.param.vci = ATM_PH_VCI(&ph->aph); 214 v.param.aal = (ATM_PH_FLAGS(&ph->aph) & ATM_PH_AAL5) 215 ? ATMIO_AAL_5 : ATMIO_AAL_0; 216 v.param.traffic = ATMIO_TRAFFIC_UBR;; 217 v.param.tparam.pcr = sc->ifatm.mib.pcr; 218 v.rxhand = ph->rxhand; 219 | 214 v.param.vpi = ATM_PH_VPI(&ph->aph); 215 v.param.vci = ATM_PH_VCI(&ph->aph); 216 v.param.aal = (ATM_PH_FLAGS(&ph->aph) & ATM_PH_AAL5) 217 ? ATMIO_AAL_5 : ATMIO_AAL_0; 218 v.param.traffic = ATMIO_TRAFFIC_UBR;; 219 v.param.tparam.pcr = sc->ifatm.mib.pcr; 220 v.rxhand = ph->rxhand; 221 |
220 return (patm_open_vcc(sc, &v, PATM_VCC_ASYNC)); | 222 return (patm_open_vcc(sc, &v)); |
221} 222 223/* 224 * Try to close the given VCC 225 */ 226static int 227patm_close_vcc(struct patm_softc *sc, struct atmio_closevcc *arg) 228{ --- 20 unchanged lines hidden (view full) --- 249 goto done; 250 } 251 252 if (vcc->vflags & PATM_VCC_TX_OPEN) 253 patm_tx_vcc_close(sc, vcc); 254 if (vcc->vflags & PATM_VCC_RX_OPEN) 255 patm_rx_vcc_close(sc, vcc); 256 | 223} 224 225/* 226 * Try to close the given VCC 227 */ 228static int 229patm_close_vcc(struct patm_softc *sc, struct atmio_closevcc *arg) 230{ --- 20 unchanged lines hidden (view full) --- 251 goto done; 252 } 253 254 if (vcc->vflags & PATM_VCC_TX_OPEN) 255 patm_tx_vcc_close(sc, vcc); 256 if (vcc->vflags & PATM_VCC_RX_OPEN) 257 patm_rx_vcc_close(sc, vcc); 258 |
257 if (vcc->vflags & PATM_VCC_ASYNC) | 259 if (vcc->vcc.flags & ATMIO_FLAG_ASYNC) |
258 goto done; 259 260 while (vcc->vflags & (PATM_VCC_TX_CLOSING | PATM_VCC_RX_CLOSING)) { 261 cv_wait(&sc->vcc_cv, &sc->mtx); 262 if (!(sc->ifatm.ifnet.if_flags & IFF_RUNNING)) { 263 /* ups, has been stopped */ 264 error = EIO; 265 goto done; --- 131 unchanged lines hidden (view full) --- 397 */ 398 if (ifr->ifr_mtu > ATMMTU) 399 error = EINVAL; 400 else 401 ifp->if_mtu = ifr->ifr_mtu; 402 break; 403 404 case SIOCATMOPENVCC: /* netgraph/harp internal use */ | 260 goto done; 261 262 while (vcc->vflags & (PATM_VCC_TX_CLOSING | PATM_VCC_RX_CLOSING)) { 263 cv_wait(&sc->vcc_cv, &sc->mtx); 264 if (!(sc->ifatm.ifnet.if_flags & IFF_RUNNING)) { 265 /* ups, has been stopped */ 266 error = EIO; 267 goto done; --- 131 unchanged lines hidden (view full) --- 399 */ 400 if (ifr->ifr_mtu > ATMMTU) 401 error = EINVAL; 402 else 403 ifp->if_mtu = ifr->ifr_mtu; 404 break; 405 406 case SIOCATMOPENVCC: /* netgraph/harp internal use */ |
405 error = patm_open_vcc(sc, (struct atmio_openvcc *)data, 0); | 407 error = patm_open_vcc(sc, (struct atmio_openvcc *)data); |
406 break; 407 408 case SIOCATMCLOSEVCC: /* netgraph and HARP internal use */ 409 error = patm_close_vcc(sc, (struct atmio_closevcc *)data); 410 break; 411 412 case SIOCATMENA: /* NATM internal use */ 413 error = patm_open_vcc1(sc, (struct atm_pseudoioctl *)data); --- 33 unchanged lines hidden --- | 408 break; 409 410 case SIOCATMCLOSEVCC: /* netgraph and HARP internal use */ 411 error = patm_close_vcc(sc, (struct atmio_closevcc *)data); 412 break; 413 414 case SIOCATMENA: /* NATM internal use */ 415 error = patm_open_vcc1(sc, (struct atm_pseudoioctl *)data); --- 33 unchanged lines hidden --- |