X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;ds=sidebyside;f=solaris%2Fppp_mod.h;fp=solaris%2Fppp_mod.h;h=f0af008861ef0f1972a126ee71e65b09cef1bf4b;hb=f9eac6e29b5137c46063855b3bfc253159c90c29;hp=0000000000000000000000000000000000000000;hpb=56e6860d27306bcbe35b3a14f360d0f52b5940b5;p=ppp.git diff --git a/solaris/ppp_mod.h b/solaris/ppp_mod.h new file mode 100644 index 0000000..f0af008 --- /dev/null +++ b/solaris/ppp_mod.h @@ -0,0 +1,190 @@ +/* + * Miscellaneous definitions for PPP STREAMS modules. + */ + +/* + * Macros for allocating and freeing kernel memory. + */ +#ifdef SVR4 /* SVR4, including Solaris 2 */ +#include +#define ALLOC_SLEEP(n) kmem_alloc((n), KM_SLEEP) +#define ALLOC_NOSLEEP(n) kmem_alloc((n), KM_NOSLEEP) +#define FREE(p, n) kmem_free((p), (n)) +#endif + +#ifdef SUNOS4 +#include /* SunOS 4.x */ +#define ALLOC_SLEEP(n) kmem_alloc((n), KMEM_SLEEP) +#define ALLOC_NOSLEEP(n) kmem_alloc((n), KMEM_NOSLEEP) +#define FREE(p, n) kmem_free((p), (n)) +#define NOTSUSER() (suser()? 0: EPERM) +#define bcanputnext(q, band) canputnext((q)) +#endif /* SunOS 4 */ + +#ifdef __osf__ +#include + +/* caution: this mirrors macros in sys/malloc.h, and uses interfaces + * which are subject to change. + * The problems are that: + * - the official MALLOC macro wants the lhs of the assignment as an argument, + * and it takes care of the assignment itself (yuck.) + * - PPP insists on using "FREE" which conflicts with a macro of the same name. + * + */ +#ifdef BUCKETINDX /* V2.0 */ +#define ALLOC_SLEEP(n) (void *)malloc((u_long)(n), BUCKETP(n), M_DEVBUF, M_WAITOK) +#define ALLOC_NOSLEEP(n) (void *)malloc((u_long)(n), BUCKETP(n), M_DEVBUF, M_NOWAIT) +#else +#define ALLOC_SLEEP(n) (void *)malloc((u_long)(n), BUCKETINDEX(n), M_DEVBUF, M_WAITOK) +#define ALLOC_NOSLEEP(n) (void *)malloc((u_long)(n), BUCKETINDEX(n), M_DEVBUF, M_NOWAIT) +#endif + +#define bcanputnext(q, band) canputnext((q)) + +#ifdef FREE +#undef FREE +#endif +#define FREE(p, n) free((void *)(p), M_DEVBUF) + +#define NO_DLPI 1 + +#ifndef IFT_PPP +#define IFT_PPP 0x17 +#endif + +#include +#define NOTSUSER() (suser(u.u_procp->p_rcred, &u.u_acflag) ? EPERM : 0) + +/* #include "ppp_osf.h" */ + +#endif /* __osf__ */ + +#ifdef AIX4 +#define ALLOC_SLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */ +#define ALLOC_NOSLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */ +#define FREE(p, n) xmfree((p), pinned_heap) +#define NOTSUSER() (suser()? 0: EPERM) +#endif /* AIX */ + +/* + * Macros for printing debugging stuff. + */ +#ifdef DEBUG +#if defined(SVR4) || defined(__osf__) +#if defined(SNI) +#include +#define STRLOG_ID 4712 +#define DPRINT(f) strlog(STRLOG_ID, 0, 0, SL_TRACE, f) +#define DPRINT1(f, a1) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1) +#define DPRINT2(f, a1, a2) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1, a2) +#define DPRINT3(f, a1, a2, a3) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1, a2, a3) +#else +#define DPRINT(f) cmn_err(CE_CONT, f) +#define DPRINT1(f, a1) cmn_err(CE_CONT, f, a1) +#define DPRINT2(f, a1, a2) cmn_err(CE_CONT, f, a1, a2) +#define DPRINT3(f, a1, a2, a3) cmn_err(CE_CONT, f, a1, a2, a3) +#endif /* SNI */ +#else +#define DPRINT(f) printf(f) +#define DPRINT1(f, a1) printf(f, a1) +#define DPRINT2(f, a1, a2) printf(f, a1, a2) +#define DPRINT3(f, a1, a2, a3) printf(f, a1, a2, a3) +#endif /* SVR4 or OSF */ + +#else +#define DPRINT(f) 0 +#define DPRINT1(f, a1) 0 +#define DPRINT2(f, a1, a2) 0 +#define DPRINT3(f, a1, a2, a3) 0 +#endif /* DEBUG */ + +#ifndef SVR4 +typedef unsigned char uchar_t; +typedef unsigned short ushort_t; +#ifndef __osf__ +typedef int minor_t; +#endif +#endif + +/* + * If we don't have multithreading support, define substitutes. + */ +#ifndef D_MP +# define qprocson(q) +# define qprocsoff(q) +# define put(q, mp) ((*(q)->q_qinfo->qi_putp)((q), (mp))) +# define canputnext(q) canput((q)->q_next) +# define qwriter(q, mp, func, scope) (func)((q), (mp)) +#endif + +#ifdef D_MP +/* Use msgpullup if we have other multithreading support. */ +#define PULLUP(mp, len) \ + do { \ + mblk_t *np = msgpullup((mp), (len)); \ + freemsg((mp)); \ + mp = np; \ + } while (0) + +#else +/* Use pullupmsg if we don't have any multithreading support. */ +#define PULLUP(mp, len) \ + do { \ + if (!pullupmsg((mp), (len))) { \ + freemsg((mp)); \ + mp = 0; \ + } \ + } while (0) +#endif + +/* + * How to declare the open and close procedures for a module. + */ +#ifdef SVR4 +#define MOD_OPEN_DECL(name) \ +static int name __P((queue_t *, dev_t *, int, int, cred_t *)) + +#define MOD_CLOSE_DECL(name) \ +static int name __P((queue_t *, int, cred_t *)) + +#define MOD_OPEN(name) \ +static int name(q, devp, flag, sflag, credp) \ + queue_t *q; \ + dev_t *devp; \ + int flag, sflag; \ + cred_t *credp; + +#define MOD_CLOSE(name) \ +static int name(q, flag, credp) \ + queue_t *q; \ + int flag; \ + cred_t *credp; + +#define OPEN_ERROR(x) return (x) +#define DRV_OPEN_OK(dev) return 0 + +#define NOTSUSER() (drv_priv(credp)) + +#else /* not SVR4 */ +#define MOD_OPEN_DECL(name) \ +static int name __P((queue_t *, int, int, int)) + +#define MOD_CLOSE_DECL(name) \ +static int name __P((queue_t *, int)) + +#define MOD_OPEN(name) \ +static int name(q, dev, flag, sflag) \ + queue_t *q; \ + int dev; \ + int flag, sflag; + +#define MOD_CLOSE(name) \ +static int name(q, flag) \ + queue_t *q; \ + int flag; + +#define OPEN_ERROR(x) { u.u_error = (x); return OPENFAIL; } +#define DRV_OPEN_OK(dev) return (dev) + +#endif /* SVR4 */