2 * Miscellaneous definitions for PPP STREAMS modules.
6 * Macros for allocating and freeing kernel memory.
8 #ifdef SVR4 /* SVR4, including Solaris 2 */
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 #define NOTSUSER() (suser()? 0: EPERM)
17 #include <sys/kmem_alloc.h> /* SunOS 4.x */
18 #define ALLOC_SLEEP(n) kmem_alloc((n), KMEM_SLEEP)
19 #define ALLOC_NOSLEEP(n) kmem_alloc((n), KMEM_NOSLEEP)
20 #define FREE(p, n) kmem_free((p), (n))
21 #define NOTSUSER() (suser()? 0: EPERM)
25 #include <sys/malloc.h>
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.
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)
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)
46 #define FREE(p, n) free((void *)(p), M_DEVBUF)
55 #define NOTSUSER() (suser(u.u_procp->p_rcred, &u.u_acflag) ? EPERM : 0)
62 #define ALLOC_SLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */
63 #define ALLOC_NOSLEEP(n) xmalloc((n), 0, pinned_heap) /* AIX V4.x */
64 #define FREE(p, n) xmfree((p), pinned_heap)
65 #define NOTSUSER() (suser()? 0: EPERM)
69 * Macros for printing debugging stuff.
72 #if defined(SVR4) || defined(__osf__)
73 #define DPRINT(f) cmn_err(CE_CONT, f)
74 #define DPRINT1(f, a1) cmn_err(CE_CONT, f, a1)
75 #define DPRINT2(f, a1, a2) cmn_err(CE_CONT, f, a1, a2)
76 #define DPRINT3(f, a1, a2, a3) cmn_err(CE_CONT, f, a1, a2, a3)
78 #define DPRINT(f) printf(f)
79 #define DPRINT1(f, a1) printf(f, a1)
80 #define DPRINT2(f, a1, a2) printf(f, a1, a2)
81 #define DPRINT3(f, a1, a2, a3) printf(f, a1, a2, a3)
86 #define DPRINT1(f, a1) 0
87 #define DPRINT2(f, a1, a2) 0
88 #define DPRINT3(f, a1, a2, a3) 0
92 typedef unsigned char uchar_t;
93 typedef unsigned short ushort_t;
100 * If we don't have multithreading support, define substitutes.
104 # define qprocsoff(q)
105 # define put(q, mp) ((*(q)->q_qinfo->qi_putp)((q), (mp)))
106 # define canputnext(q) canput((q)->q_next)
107 # define qwriter(q, mp, func, scope) (func)((q), (mp))
111 /* Use msgpullup if we have other multithreading support. */
112 #define PULLUP(mp, len) \
114 mblk_t *np = msgpullup((mp), (len)); \
120 /* Use pullupmsg if we don't have any multithreading support. */
121 #define PULLUP(mp, len) \
123 if (!pullupmsg((mp), (len))) { \
131 * How to declare the open and close procedures for a module.
134 #define MOD_OPEN_DECL(name) \
135 static int name __P((queue_t *, dev_t *, int, int, cred_t *))
137 #define MOD_CLOSE_DECL(name) \
138 static int name __P((queue_t *, int, cred_t *))
140 #define MOD_OPEN(name) \
141 static int name(q, devp, flag, sflag, credp) \
147 #define MOD_CLOSE(name) \
148 static int name(q, flag, credp) \
153 #define OPEN_ERROR(x) return (x)
154 #define DRV_OPEN_OK(dev) return 0
156 #define NOTSUSER() (drv_priv(credp))
159 #define MOD_OPEN_DECL(name) \
160 static int name __P((queue_t *, int, int, int))
162 #define MOD_CLOSE_DECL(name) \
163 static int name __P((queue_t *, int))
165 #define MOD_OPEN(name) \
166 static int name(q, dev, flag, sflag) \
171 #define MOD_CLOSE(name) \
172 static int name(q, flag) \
176 #define OPEN_ERROR(x) { u.u_error = (x); return OPENFAIL; }
177 #define DRV_OPEN_OK(dev) return (dev)