1/* 2 * Miscellaneous definitions for PPP STREAMS modules. 3 */ 4 5/* 6 * Macros for allocating and freeing kernel memory. 7 */ 8#ifdef SVR4 /* SVR4, including Solaris 2 */ 9#include <sys/kmem.h> 10#define ALLOC_SLEEP(n) kmem_alloc((n), KM_SLEEP) 11#define ALLOC_NOSLEEP(n) kmem_alloc((n), KM_NOSLEEP) 12#define FREE(p, n) kmem_free((p), (n)) 13#endif 14 15#ifdef SUNOS4 16#include <sys/kmem_alloc.h> /* SunOS 4.x */ 17#define ALLOC_SLEEP(n) kmem_alloc((n), KMEM_SLEEP) 18#define ALLOC_NOSLEEP(n) kmem_alloc((n), KMEM_NOSLEEP) 19#define FREE(p, n) kmem_free((p), (n)) 20#define NOTSUSER() (suser()? 0: EPERM) 21#define bcanputnext(q, band) canputnext((q)) 22#endif /* SunOS 4 */ 23 24#ifdef __osf__ 25#include <sys/malloc.h> 26 27/* caution: this mirrors macros in sys/malloc.h, and uses interfaces 28 * which are subject to change. 29 * The problems are that: 30 * - the official MALLOC macro wants the lhs of the assignment as an argument, 31 * and it takes care of the assignment itself (yuck.) 32 * - PPP insists on using "FREE" which conflicts with a macro of the same name. 33 * 34 */ 35#ifdef BUCKETINDX /* V2.0 */ 36#define ALLOC_SLEEP(n) (void *)malloc((u_long)(n), BUCKETP(n), M_DEVBUF, M_WAITOK) 37#define ALLOC_NOSLEEP(n) (void *)malloc((u_long)(n), BUCKETP(n), M_DEVBUF, M_NOWAIT) 38#else 39#define ALLOC_SLEEP(n) (void *)malloc((u_long)(n), BUCKETINDEX(n), M_DEVBUF, M_WAITOK) 40#define ALLOC_NOSLEEP(n) (void *)malloc((u_long)(n), BUCKETINDEX(n), M_DEVBUF, M_NOWAIT) 41#endif 42 43#define bcanputnext(q, band) canputnext((q)) 44 45#ifdef FREE 46#undef FREE 47#endif 48#define FREE(p, n) free((void *)(p), M_DEVBUF) 49 50#define NO_DLPI 1 51 52#ifndef IFT_PPP 53#define IFT_PPP 0x17 54#endif 55 56#include <sys/proc.h> 57#define NOTSUSER() (suser(u.u_procp->p_rcred, &u.u_acflag) ? EPERM : 0) 58 59/* #include "ppp_osf.h" */ 60 61#endif /* __osf__ */ 62 63#ifdef AIX4 64#define ALLOC_SLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */ 65#define ALLOC_NOSLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */ 66#define FREE(p, n) xmfree((p), pinned_heap) 67#define NOTSUSER() (suser()? 0: EPERM) 68#endif /* AIX */ 69 70/* 71 * Macros for printing debugging stuff. 72 */ 73#ifdef DEBUG 74#if defined(SVR4) || defined(__osf__) 75#if defined(SNI) 76#include <sys/strlog.h> 77#define STRLOG_ID 4712 78#define DPRINT(f) strlog(STRLOG_ID, 0, 0, SL_TRACE, f) 79#define DPRINT1(f, a1) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1) 80#define DPRINT2(f, a1, a2) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1, a2) 81#define DPRINT3(f, a1, a2, a3) strlog(STRLOG_ID, 0, 0, SL_TRACE, f, a1, a2, a3) 82#else 83#define DPRINT(f) cmn_err(CE_CONT, f) 84#define DPRINT1(f, a1) cmn_err(CE_CONT, f, a1) 85#define DPRINT2(f, a1, a2) cmn_err(CE_CONT, f, a1, a2) 86#define DPRINT3(f, a1, a2, a3) cmn_err(CE_CONT, f, a1, a2, a3) 87#endif /* SNI */ 88#else 89#define DPRINT(f) printf(f) 90#define DPRINT1(f, a1) printf(f, a1) 91#define DPRINT2(f, a1, a2) printf(f, a1, a2) 92#define DPRINT3(f, a1, a2, a3) printf(f, a1, a2, a3) 93#endif /* SVR4 or OSF */ 94 95#else 96#define DPRINT(f) 0 97#define DPRINT1(f, a1) 0 98#define DPRINT2(f, a1, a2) 0 99#define DPRINT3(f, a1, a2, a3) 0 100#endif /* DEBUG */ 101 102#ifndef SVR4 103typedef unsigned char uchar_t; 104typedef unsigned short ushort_t; 105#ifndef __osf__ 106typedef int minor_t; 107#endif 108#endif 109 110/* 111 * If we don't have multithreading support, define substitutes. 112 */ 113#ifndef D_MP 114# define qprocson(q) 115# define qprocsoff(q) 116# define put(q, mp) ((*(q)->q_qinfo->qi_putp)((q), (mp))) 117# define canputnext(q) canput((q)->q_next) 118# define qwriter(q, mp, func, scope) (func)((q), (mp)) 119#endif 120 121#ifdef D_MP 122/* Use msgpullup if we have other multithreading support. */ 123#define PULLUP(mp, len) \ 124 do { \ 125 mblk_t *np = msgpullup((mp), (len)); \ 126 freemsg((mp)); \ 127 mp = np; \ 128 } while (0) 129 130#else 131/* Use pullupmsg if we don't have any multithreading support. */ 132#define PULLUP(mp, len) \ 133 do { \ 134 if (!pullupmsg((mp), (len))) { \ 135 freemsg((mp)); \ 136 mp = 0; \ 137 } \ 138 } while (0) 139#endif 140 141/* 142 * How to declare the open and close procedures for a module. 143 */ 144#ifdef SVR4 145#define MOD_OPEN_DECL(name) \ 146static int name __P((queue_t *, dev_t *, int, int, cred_t *)) 147 148#define MOD_CLOSE_DECL(name) \ 149static int name __P((queue_t *, int, cred_t *)) 150 151#define MOD_OPEN(name) \ 152static int name(q, devp, flag, sflag, credp) \ 153 queue_t *q; \ 154 dev_t *devp; \ 155 int flag, sflag; \ 156 cred_t *credp; 157 158#define MOD_CLOSE(name) \ 159static int name(q, flag, credp) \ 160 queue_t *q; \ 161 int flag; \ 162 cred_t *credp; 163 164#define OPEN_ERROR(x) return (x) 165#define DRV_OPEN_OK(dev) return 0 166 167#define NOTSUSER() (drv_priv(credp)) 168 169#else /* not SVR4 */ 170#define MOD_OPEN_DECL(name) \ 171static int name __P((queue_t *, int, int, int)) 172 173#define MOD_CLOSE_DECL(name) \ 174static int name __P((queue_t *, int)) 175 176#define MOD_OPEN(name) \ 177static int name(q, dev, flag, sflag) \ 178 queue_t *q; \ 179 int dev; \ 180 int flag, sflag; 181 182#define MOD_CLOSE(name) \ 183static int name(q, flag) \ 184 queue_t *q; \ 185 int flag; 186 187#define OPEN_ERROR(x) { u.u_error = (x); return OPENFAIL; } 188#define DRV_OPEN_OK(dev) return (dev) 189 190#endif /* SVR4 */ 191