Honor the ATMIO_FLAG_ASYNC for asynchronuous open/close of VCs.
This commit is contained in:
parent
5dc310d4d5
commit
4f15e38cba
@ -75,7 +75,7 @@ __FBSDID("$FreeBSD$");
|
||||
* Open the VCC with the given parameters
|
||||
*/
|
||||
static int
|
||||
patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg, u_int async)
|
||||
patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg)
|
||||
{
|
||||
u_int cid;
|
||||
struct patm_vcc *vcc;
|
||||
@ -120,7 +120,7 @@ patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg, u_int async)
|
||||
/* check some parameters */
|
||||
vcc->cid = cid;
|
||||
vcc->vcc = arg->param;
|
||||
vcc->vflags = async;
|
||||
vcc->vflags = 0;
|
||||
vcc->rxhand = arg->rxhand;
|
||||
switch (vcc->vcc.aal) {
|
||||
|
||||
@ -209,6 +209,8 @@ patm_open_vcc1(struct patm_softc *sc, struct atm_pseudoioctl *ph)
|
||||
|
||||
bzero(&v, sizeof(v));
|
||||
v.param.flags = ATM_PH_FLAGS(&ph->aph) & (ATM_PH_AAL5 | ATM_PH_LLCSNAP);
|
||||
v.param.flags |= ATMIO_FLAG_ASYNC;
|
||||
|
||||
v.param.vpi = ATM_PH_VPI(&ph->aph);
|
||||
v.param.vci = ATM_PH_VCI(&ph->aph);
|
||||
v.param.aal = (ATM_PH_FLAGS(&ph->aph) & ATM_PH_AAL5)
|
||||
@ -217,7 +219,7 @@ patm_open_vcc1(struct patm_softc *sc, struct atm_pseudoioctl *ph)
|
||||
v.param.tparam.pcr = sc->ifatm.mib.pcr;
|
||||
v.rxhand = ph->rxhand;
|
||||
|
||||
return (patm_open_vcc(sc, &v, PATM_VCC_ASYNC));
|
||||
return (patm_open_vcc(sc, &v));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -254,7 +256,7 @@ patm_close_vcc(struct patm_softc *sc, struct atmio_closevcc *arg)
|
||||
if (vcc->vflags & PATM_VCC_RX_OPEN)
|
||||
patm_rx_vcc_close(sc, vcc);
|
||||
|
||||
if (vcc->vflags & PATM_VCC_ASYNC)
|
||||
if (vcc->vcc.flags & ATMIO_FLAG_ASYNC)
|
||||
goto done;
|
||||
|
||||
while (vcc->vflags & (PATM_VCC_TX_CLOSING | PATM_VCC_RX_CLOSING)) {
|
||||
@ -402,7 +404,7 @@ patm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
break;
|
||||
|
||||
case SIOCATMOPENVCC: /* netgraph/harp internal use */
|
||||
error = patm_open_vcc(sc, (struct atmio_openvcc *)data, 0);
|
||||
error = patm_open_vcc(sc, (struct atmio_openvcc *)data);
|
||||
break;
|
||||
|
||||
case SIOCATMCLOSEVCC: /* netgraph and HARP internal use */
|
||||
|
@ -216,7 +216,7 @@ patm_rx(struct patm_softc *sc, struct idt_rsqe *rsqe)
|
||||
patm_debug(sc, VCC, "%u.%u RX closed", vcc->vcc.vpi,
|
||||
vcc->vcc.vci);
|
||||
vcc->vflags &= ~PATM_VCC_RX_CLOSING;
|
||||
if (vcc->vflags & PATM_VCC_ASYNC) {
|
||||
if (vcc->vcc.flags & ATMIO_FLAG_ASYNC) {
|
||||
patm_rx_vcc_closed(sc, vcc);
|
||||
if (!(vcc->vflags & PATM_VCC_OPEN))
|
||||
patm_vcc_closed(sc, vcc);
|
||||
@ -323,7 +323,7 @@ patm_rx(struct patm_softc *sc, struct idt_rsqe *rsqe)
|
||||
|
||||
#ifdef ENABLE_BPF
|
||||
if (!(vcc->vcc.flags & ATMIO_FLAG_NG) &&
|
||||
(vcc->vcc.flags & ATM_PH_AAL5) &&
|
||||
(vcc->vcc.aal == ATMIO_AAL_5) &&
|
||||
(vcc->vcc.flags & ATM_PH_LLCSNAP))
|
||||
BPF_MTAP(&sc->ifatm.ifnet, m);
|
||||
#endif
|
||||
|
@ -385,7 +385,7 @@ patm_start(struct ifnet *ifp)
|
||||
|
||||
#ifdef ENABLE_BPF
|
||||
if (!(vcc->vcc.flags & ATMIO_FLAG_NG) &&
|
||||
(vcc->vcc.flags & ATM_PH_AAL5) &&
|
||||
(vcc->vcc.aal == ATMIO_AAL_5) &&
|
||||
(vcc->vcc.flags & ATM_PH_LLCSNAP))
|
||||
BPF_MTAP(ifp, m);
|
||||
#endif
|
||||
@ -712,7 +712,7 @@ patm_tx(struct patm_softc *sc, u_int stamp, u_int status)
|
||||
vcc->scd = NULL;
|
||||
vcc->vflags &= ~PATM_VCC_TX_CLOSING;
|
||||
|
||||
if (vcc->vflags & PATM_VCC_ASYNC) {
|
||||
if (vcc->vcc.flags & ATMIO_FLAG_ASYNC) {
|
||||
patm_tx_vcc_closed(sc, vcc);
|
||||
if (!(vcc->vflags & PATM_VCC_OPEN))
|
||||
patm_vcc_closed(sc, vcc);
|
||||
|
@ -207,7 +207,6 @@ struct patm_vcc {
|
||||
#define PATM_VCC_TX_CLOSING 0x0004
|
||||
#define PATM_VCC_RX_CLOSING 0x0008
|
||||
#define PATM_VCC_OPEN 0x000f /* all the above */
|
||||
#define PATM_VCC_ASYNC 0x0010
|
||||
|
||||
#define PATM_RAW_CELL 0x0000 /* 53 byte cells */
|
||||
#define PATM_RAW_NOHEC 0x0100 /* 52 byte cells */
|
||||
|
Loading…
x
Reference in New Issue
Block a user