|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * localglue.h:
27: * Assorted local glue.
28: */
29:
30: #ifndef LOCALGLUE_H
31: #define LOCALGLUE_H
32:
33: #include <sys/errno.h>
34: #include <sys/types.h>
35: #include <sys/param.h>
36: #include <machine/spl.h>
37:
38:
39: #define AT_ATP_LINK 111
40: #define AT_ATP_UNLINK 222
41: #define AT_ADSP_LINK 333
42: #define AT_ADSP_UNLINK 444
43:
44: typedef struct {
45: int maxlen; /* max buffer length */
46: int len; /* length of data */
47: char *buf; /* pointer to buffer */
48: } strbuf_t;
49: typedef struct {
50: int ic_cmd;
51: int ic_timout;
52: int ic_len;
53: char *ic_dp;
54: } ioccmd_t;
55: typedef struct {
56: int ioc_cmd;
57: void *ioc_cr;
58: int ioc_id;
59: int ioc_cnt;
60: int ioc_error;
61: int ioc_rval;
62: void *ioc_private;
63: int ioc_filler[4];
64: } ioc_t;
65: #ifndef ioc_count
66: #define ioc_count ioc_cnt
67: #endif
68: #ifndef MOREDATA
69: #define MOREDATA 1
70: #endif
71:
72: #ifdef NEXT
73: /*
74: * Rhapsody specific defines: Right now they're triggered
75: * by the NEXT define. Might want to change that latter
76: * ld 04/28/97
77: */
78:
79: #define RHAPSODY 1
80: /* HZ ticks definition used throughout AppleTalk */
81: #define HZ hz
82:
83: /* returned when the operation is not possible at this
84: * time (ie when starting up or shutting down.
85: * right now, uses ESHUTDOWN because ENOTREADY is not defined
86: * in Rhapsody. Need to find a better Error code ###LD
87: */
88: #define ENOTREADY ESHUTDOWN
89: #define ENOMSG EOPNOTSUPP
90: #define EPROTO EPROTOTYPE
91: #define ENOSR ENOBUFS
92: #define ECHRNG EOPNOTSUPP
93:
94:
95: /* T_MPSAFE is used only in atp_open. I suspect it's a
96: * trick to accelerate local atp transactions.
97: */
98: #define T_MPSAFE 0
99:
100: #define INTERRUPTIBLE 1
101: #define POLLIN 0x0001
102: #define POLLOUT 0x0002
103: #define POLLPRI 0x0004
104: #define POLLMSG 0x0080
105: #define POLLSYNC 0x8000
106: #define POLLMSG 0x0080
107:
108: /*
109: * Define a new Data Type for file. it was DTYPE_OTHER for
110: * AIX, for Rhapsody there is no such define so defines
111: * DTYPE_ATALK
112: */
113:
114: #define DTYPE_ATALK -1
115:
116: typedef unsigned char uchar;
117:
118: #endif
119:
120:
121: #ifdef _KERNEL
122: #include <sys/systm.h>
123: /* ### LD 4/28/97 tempo removed */
124: #ifdef _AIX
125: #include <sys/pri.h>
126: #include <sys/intr.h>
127: #include <sys/lockl.h>
128: #include <net/spl.h>
129: #else
130: #include <sys/kernel.h>
131: #include <sys/proc.h>
132: #include <sys/filedesc.h>
133: #include <sys/fcntl.h>
134: #endif
135: #include <sys/mbuf.h>
136:
137: #define AT_WR_OFFSET 38
138: #ifndef EVENT_NULL
139: #define EVENT_NULL -1
140: #define LOCK_HANDLER 2
141: #endif
142: typedef int atevent_t;
143: /* ### LD 4/28/97 tempo removed */
144: #ifdef _AIX
145: typedef Simple_lock atlock_t;
146: #define ATLOCKINIT(a) simple_lock_init((void *)&a)
147: #define ATDISABLE(l, a) (l = disable_lock(PL_IMP, (void *)&a))
148: #define ATENABLE(l, a) unlock_enable(l, (void *)&a)
149: #define ATEVENTINIT(a) (a = EVENT_NULL)
150: #define DDP_OUTPUT(m) ddp_putmsg(0,m)
151: #define StaticProc static
152:
153: #define PRI_LO 1
154: #define PRI_MED 2
155: #define PRI_HI 3
156:
157: #else
158:
159: /* ### LD 4/28/97 tempo for next */
160:
161: typedef simple_lock_t atlock_t;
162: typedef int *atomic_p;
163: #define ATLOCKINIT(a) (a = EVENT_NULL)
164: #define ATDISABLE(l, a) (l = splimp())
165: #define ATENABLE(l, a) splx(l)
166: #define ATEVENTINIT(a) (a = EVENT_NULL)
167: #define DDP_OUTPUT(m) ddp_putmsg(0,m)
168: #define StaticProc static
169:
170: #define PRI_LO 1
171: #define PRI_MED 2
172: #define PRI_HI 3
173:
174:
175: #endif
176:
177: typedef struct mbuf gbuf_t;
178: extern gbuf_t *gbuf_copym();
179: extern gbuf_t *gbuf_dupb();
180: extern gbuf_t *gbuf_dupm();
181: extern void gbuf_freeb();
182: extern void gbuf_freem();
183: extern gbuf_t *gbuf_alloc();
184: #define gbuf_prepend(m,len) M_PREPEND(m,len,M_DONTWAIT)
185: #define gbuf_attach(buf,func,len,arg) m_clattach(buf,func,len,arg,M_DONTWAIT)
186: #define gbuf_cont(m) m->m_next
187: #define gbuf_next(m) m->m_nextpkt
188: #define gbuf_rptr(m) m->m_data
189: #define gbuf_rinc(m,len) {m->m_data += len; m->m_len -= len;}
190: #define gbuf_rdec(m,len) {m->m_data -= len; m->m_len += len;}
191: #define gbuf_wptr(m) (m->m_data + m->m_len)
192: #define gbuf_winc(m,len) (m->m_len += len)
193: #define gbuf_wdec(m,len) (m->m_len -= len)
194: #define gbuf_wset(m,len) (m->m_len = len)
195: #define gbuf_type(m) m->m_type
196: #define gbuf_len(m) m->m_len
197:
198: typedef struct gref {
199: struct gref *next;
200: void *info;
201: gbuf_t *ichead;
202: gbuf_t *ictail;
203: gbuf_t *rdhead;
204: gbuf_t *rdtail;
205: unsigned char proto;
206: unsigned char errno;
207: unsigned short sevents;
208: int pid;
209: atlock_t lock;
210: atevent_t event;
211: atevent_t iocevent;
212: int (*writeable)();
213: int (*readable)();
214: /* for BSD 4.4 we need a selinfo structure for selrecord/selwakeup */
215: #ifndef _AIX
216: struct selinfo si;
217: #endif
218: } gref_t;
219:
220: #undef timeoutcf
221: #undef timeout
222: #undef untimeout
223: #define MAXATALKTIMERS 128
224:
225: /* prototypes for the gbuf routines */
226:
227: gbuf_t *gbuf_alloc(int size, int pri);
228: void gbuf_freeb(gbuf_t *m);
229: int gbuf_freel(gbuf_t *m);
230: void gbuf_linkb(gbuf_t *m1, gbuf_t *m2);
231: int gbuf_msgsize(gbuf_t *m);
232: void gbuf_set_type(gbuf_t *m, short mtype);
233:
234: void data_error(int errno, gbuf_t *mp, gref_t *gref);
235:
236: #endif /* _KERNEL */
237:
238: /*
239: * Want these definitions outside the _KERNEL define for admin
240: * program access.
241: */
242: #ifdef _AIX
243: #define MSG_DATA 0x00
244: #define MSG_PROTO 0x01
245: #define MSG_IOCTL 0x0e
246: #define MSG_ERROR 0x8a
247: #define MSG_HANGUP 0x89
248: #define MSG_IOCACK 0x81
249: #define MSG_IOCNAK 0x82
250: #define MSG_CTL 0x0d
251: #else
252: /* ### LD 5/3/97 Rhapsody porting note:
253: * Cannot use MSG_DATA = 0, because MT_FREE is defined as 0
254: * and the sanity check in m_free cause a panic.
255: */
256:
257: #define MSG_DATA (MT_MAX - 1)
258: #define MSG_PROTO (MT_MAX - 2)
259: #define MSG_IOCTL (MT_MAX - 3)
260: #define MSG_ERROR (MT_MAX - 4)
261: #define MSG_HANGUP (MT_MAX - 5)
262: #define MSG_IOCACK (MT_MAX - 6)
263: #define MSG_IOCNAK (MT_MAX - 7)
264: #define MSG_CTL (MT_MAX - 8)
265: #endif
266:
267: #endif /* LOCALGLUE_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.