diff options
Diffstat (limited to 'rtemsbsd/sys/net/if_pppvar.h')
-rw-r--r-- | rtemsbsd/sys/net/if_pppvar.h | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/rtemsbsd/sys/net/if_pppvar.h b/rtemsbsd/sys/net/if_pppvar.h index 9d708a4f..b0a5ba91 100644 --- a/rtemsbsd/sys/net/if_pppvar.h +++ b/rtemsbsd/sys/net/if_pppvar.h @@ -69,7 +69,9 @@ struct proc; * Structure describing each ppp unit. */ struct ppp_softc { - struct ifnet sc_if; /* network-visible interface */ + device_t sc_dev; + struct mtx sc_mtx; + struct ifnet *sc_ifp; /* network-visible interface */ u_int sc_flags; /* control/status bits; see if_ppp.h */ void *sc_devp; /* pointer to device-dep structure */ void (*sc_start)(struct ppp_softc *); /* start output proc */ @@ -77,9 +79,9 @@ struct ppp_softc { void (*sc_relinq)(struct ppp_softc *); /* relinquish ifunit */ short sc_mru; /* max receive unit */ pid_t sc_xfer; /* used in transferring unit */ - struct ifqueue sc_rawq; /* received packets */ + struct ifqueue sc_rawq; /* received packets */ struct ifqueue sc_inq; /* queue of input packets for daemon */ - struct ifqueue sc_fastq; /* interactive output packet q */ + struct ifaltq sc_fastq; /* interactive output packet q */ struct mbuf *sc_npqueue; /* output packets not to be sent yet */ struct mbuf **sc_npqtail; /* ptr to last next ptr in npqueue */ struct pppstat sc_stats; /* count of bytes/pkts sent/rcvd */ @@ -130,7 +132,7 @@ struct ppp_softc { struct ppp_softc *pppalloc(pid_t pid); void pppdealloc(struct ppp_softc *sc); int pppoutput(struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *); + struct sockaddr *, struct route *); int pppioctl(struct ppp_softc *sc, ioctl_command_t cmd, caddr_t data, int flag, struct proc *p); struct mbuf *ppp_dequeue(struct ppp_softc *sc); @@ -153,6 +155,34 @@ void pppallocmbuf(struct ppp_softc *sc, struct mbuf **mp); #define SC_TX_LASTCHAR 0x0008 #define SC_TX_PENDING 0x0010 +/* + * Special interface queue functions to exchange mbufs between task and + * interrupt context via pppinput() and pppstart(). + */ + +static inline void +if_ppp_enqueue(struct ifqueue *ifq, struct mbuf *m) +{ + rtems_interrupt_level level; + + rtems_interrupt_disable(level); + _IF_ENQUEUE(ifq, m); + rtems_interrupt_enable(level); +} + +static inline struct mbuf * +if_ppp_dequeue(struct ifqueue *ifq) +{ + struct mbuf *m; + rtems_interrupt_level level; + + rtems_interrupt_disable(level); + _IF_DEQUEUE(ifq, m); + rtems_interrupt_enable(level); + + return m; +} + #ifdef __cplusplus } #endif |