blob: 792c4d4fc5b5feb129dac73df19447d50e785670 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
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) \
xf.li84027492024-04-09 00:17:51 -0700146static int name(queue_t *, dev_t *, int, int, cred_t *)
lh9ed821d2023-04-07 01:36:19 -0700147
148#define MOD_CLOSE_DECL(name) \
xf.li84027492024-04-09 00:17:51 -0700149static int name(queue_t *, int, cred_t *)
lh9ed821d2023-04-07 01:36:19 -0700150
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) \
xf.li84027492024-04-09 00:17:51 -0700171static int name(queue_t *, int, int, int)
lh9ed821d2023-04-07 01:36:19 -0700172
173#define MOD_CLOSE_DECL(name) \
xf.li84027492024-04-09 00:17:51 -0700174static int name(queue_t *, int)
lh9ed821d2023-04-07 01:36:19 -0700175
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 */