summaryrefslogtreecommitdiffstats
path: root/sys/netatm/atm_if.h
blob: c9ea43aeb68bb5479fc45eb30af1fe950ce37ed4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
/*-
 *
 * ===================================
 * HARP  |  Host ATM Research Platform
 * ===================================
 *
 *
 * This Host ATM Research Platform ("HARP") file (the "Software") is
 * made available by Network Computing Services, Inc. ("NetworkCS")
 * "AS IS".  NetworkCS does not provide maintenance, improvements or
 * support of any kind.
 *
 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
 * In no event shall NetworkCS be responsible for any damages, including
 * but not limited to consequential damages, arising from or relating to
 * any use of the Software or related support.
 *
 * Copyright 1994-1998 Network Computing Services, Inc.
 *
 * Copies of this Software may be made, however, the above copyright
 * notice must be reproduced on all copies.
 *
 *	@(#) $FreeBSD$
 *
 */

/*
 * Core ATM Services
 * -----------------
 *
 * ATM Physical and Network Interface definitions 
 *
 */

#ifndef _NETATM_ATM_IF_H
#define _NETATM_ATM_IF_H

/*
 * Handy constants
 */
#define ATM_NIF_MTU	9180		/* Default network interface MTU */

#define ATM_PCR_25	59111		/* Peak Cell Rate for 25.6 Mbs */
#define ATM_PCR_DS3	(12*8000)	/* 12 cells in 1/8000 sec */
#define ATM_PCR_TAXI100	227273		/* Peak Cell Rate for 100 Mbs TAXI */
#define ATM_PCR_TAXI140	318181		/* Peak Cell Rate for 140 Mbs TAXI */
#define ATM_PCR_OC3C	353207		/* Peak Cell Rate for OC3c */
#define ATM_PCR_OC12C	1416905		/* Peak Cell Rate for OC12c */


/*
 * Media Access Control (MAC) address
 */
struct mac_addr	{
	u_char		ma_data[6];	/* MAC address */
};
typedef struct mac_addr	Mac_addr;


/*
 * Adapter vendor identifiers
 */
enum atm_vendor {
	VENDOR_UNKNOWN,			/* Unknown vendor */
	VENDOR_FORE,			/* FORE Systems, Inc. */
	VENDOR_ENI,			/* Efficient Networks, Inc. */
	VENDOR_IDT,			/* Integrated Device Technology, Inc. */
	VENDOR_PROSUM,			/* Prosum, Inc. */
	VENDOR_NETGRAPH			/* Netgraph device */
};
typedef enum atm_vendor	Atm_vendor;


/*
 * Adapter vendor interface identifiers
 */
enum atm_vendapi {
	VENDAPI_UNKNOWN,		/* Unknown interface */
	VENDAPI_FORE_1,			/* FORE - 200 Series */
	VENDAPI_ENI_1,			/* ENI - Midway */
	VENDAPI_IDT_1,			/* IDT - NICStAR */
	VENDAPI_IDT_2,			/* IDT 77252 */
	VENDAPI_NETGRAPH_1,		/* Netgraph API v1 */
	VENDAPI_FORE_2,			/* FORE - HE Series */
};
typedef enum atm_vendapi	Atm_vendapi;


/*
 * Adapter device model identifiers
 */
enum atm_device {
	DEV_UNKNOWN,			/* Unknown device */
	DEV_FORE_SBA200E,		/* FORE SBA-200E */
	DEV_FORE_SBA200,		/* FORE SBA-200 */
	DEV_FORE_PCA200E,		/* FORE PCA-200E */
	DEV_FORE_ESA200E,		/* FORE ESA-200E */
	DEV_ENI_155P,			/* ENI-155p */
	DEV_IDT_155,			/* IDT NICStAR */
	DEV_PROATM_25,			/* Prosum boards based on IDT 77252 */
	DEV_PROATM_155,			/* Prosum boards based on IDT 77252 */
	DEV_VATMPIF,			/* Virtual ATM Physical IF */
	DEV_FORE_LE25,			/* ForeLE-25 */
	DEV_FORE_LE155,			/* ForeLE-155 */
	DEV_IDT_25,			/* IDT NICStAR */
	DEV_IDTABR_25,			/* IDT 77252 evaluation board */
	DEV_IDTABR_155,			/* IDT 77252 evaluation board */
	DEV_FORE_HE155,			/* ForeRunnerHE-155 */
	DEV_FORE_HE622,			/* ForeRunnerHE-622 */
};
typedef enum atm_device	Atm_device;


/*
 * Adapter media identifiers
 */
enum atm_media {
	MEDIA_UNKNOWN,			/* Unknown media type */
	MEDIA_TAXI_100,			/* TAXI - 100 Mbps */
	MEDIA_TAXI_140,			/* TAXI - 140 Mbps */
	MEDIA_OC3C,			/* OC-3C */
	MEDIA_OC12C,			/* OC-12C */
	MEDIA_UTP155,			/* UTP-155 */
	MEDIA_UTP25,			/* UTP-25.6 */
	MEDIA_VIRTUAL,			/* Virtual Link */
	MEDIA_DSL			/* xDSL */
};
typedef enum atm_media	Atm_media;


/*
 * Bus type identifiers
 */
enum atm_bus {
	BUS_UNKNOWN,			/* Unknown bus type */
	BUS_SBUS_B16,			/* SBus: 16 byte (4 word) max burst */
	BUS_SBUS_B32,			/* SBus: 32 byte (8 word) max burst */
	BUS_PCI,			/* PCI */
	BUS_EISA,			/* EISA */
	BUS_USB,			/* USB */
	BUS_VIRTUAL			/* Virtual Bus */
};
typedef enum atm_bus	Atm_bus;


#define	VERSION_LEN	16		/* Length of version info string */


/*
 * ATM adapter configuration information structure
 */
struct atm_config {
	Atm_vendor	ac_vendor;	/* Vendor */
	Atm_vendapi	ac_vendapi;	/* Vendor interface */
	Atm_device	ac_device;	/* Device model */
	Atm_media	ac_media;	/* Media type */
	u_long		ac_serial;	/* Serial number */
	Atm_bus		ac_bustype;	/* Bus type */
	u_long		ac_busslot;	/* Bus slot info (bus type dependent) */
	u_long		ac_ram;		/* Device ram offset */
	u_long		ac_ramsize;	/* Device ram size */
	Mac_addr	ac_macaddr;	/* MAC address */
	char		ac_hard_vers[VERSION_LEN];	/* Hardware version */
	char		ac_firm_vers[VERSION_LEN];	/* Firmware version */
};
typedef struct atm_config	Atm_config;


#ifdef _KERNEL

#include <vm/uma.h>

/*
 * Common structure used to define each physical ATM device interface.
 * This structure will (normally) be embedded at the top of each driver's 
 * device-specific interface structure.  
 */
struct	atm_pif {
	struct atm_pif	*pif_next;	/* Next registered atm interface */
	const char	*pif_name;	/* Device name */
	short		pif_unit;	/* Device unit number */
	u_char		pif_flags;	/* Interface flags (see below) */
	struct sigmgr	*pif_sigmgr;	/* Signalling Manager for interface */
	struct siginst	*pif_siginst;	/* Signalling protocol instance */
	struct stack_defn	*pif_services;	/* Interface's stack services */
	struct mac_addr	pif_macaddr;	/* Interface's MAC address */
	struct atm_nif	*pif_nif;	/* List of network interfaces */
	struct atm_pif	*pif_grnext;	/* Next atm device in group */

/* Exported functions */
	int		(*pif_ioctl)	/* Interface ioctl handler */
				(int, caddr_t, caddr_t);

/* Interface statistics */
	u_quad_t	pif_ipdus;	/* PDUs received from interface */
	u_quad_t	pif_opdus;	/* PDUs sent to interface */
	u_quad_t	pif_ibytes;	/* Bytes received from interface */
	u_quad_t	pif_obytes;	/* Bytes sent to interface */
	u_quad_t	pif_ierrors;	/* Errors receiving from interface */
	u_quad_t	pif_oerrors;	/* Errors sending to interface */
	u_quad_t	pif_cmderrors;	/* Interface command errors */
	caddr_t		pif_cardstats;	/* Card specific statistics */

/* Interface capabilities */
	u_short		pif_maxvpi;	/* Maximum VPI value supported */
	u_short		pif_maxvci;	/* Maximum VCI value supported */
	u_int		pif_pcr;	/* Peak Cell Rate */
};

/*
 * Physical interface flags
 */
#define	PIF_UP		0x01		/* Interface is up */
#define	PIF_LOOPBACK	0x02		/* Loopback local packets */


/*
 * Structure defining an ATM network interface.  This structure is used as 
 * the hook between the standard BSD network layer interface mechanism and 
 * the ATM device layer.  There may be one or more network interfaces for 
 * each physical ATM interface.
 */
struct	atm_nif {
	struct ifnet	*nif_ifp;	/* Network interface */
	struct atm_pif	*nif_pif;	/* Our physical interface */
	char		nif_name[IFNAMSIZ];/* Network interface name */
	u_char		nif_sel;	/* Interface's address selector */
	struct atm_nif	*nif_pnext;	/* Next net interface on phys i/f */

/* Interface statistics (in addition to ifnet stats) */
	long		nif_ibytes;	/* Bytes received from interface */
	long		nif_obytes;	/* Bytes sent to interface */
};
#define ANIF2IFP(an)	((an)->nif_ifp)
#define IFP2ANIF(ifp)	((struct atm_nif *)(ifp)->if_softc)

/*
 * Common Device VCC Entry
 *
 * Contains the common information for each VCC which is opened
 * through a particular device.
 */
struct cmn_vcc {
	struct cmn_vcc	*cv_next;	/* Next in list */
	void		*cv_toku;	/* Upper layer's token */
	void		(*cv_upper)	/* Upper layer's interface */
				(int, void *, intptr_t, intptr_t);
	Atm_connvc	*cv_connvc;	/* Associated connection VCC */
	u_char		cv_state;	/* VCC state (see below) */
	u_char		cv_flags;	/* VCC flags (see below) */
};
typedef struct cmn_vcc	Cmn_vcc;

/*
 * VCC States
 */
#define	CVS_FREE	0		/* Not allocated */
#define	CVS_INST	1		/* Instantiated, waiting for INIT */
#define	CVS_INITED	2		/* Initialized, waiting for driver */
#define	CVS_ACTIVE	3		/* Device activated by driver */
#define	CVS_PTERM	4		/* Waiting for TERM */
#define	CVS_TERM	5		/* Terminated */

/*
 * VCC Flags
 */
#define	CVF_RSVD	0x0f		/* Reserved for device-specific use */


/*
 * Common Device Unit Structure
 *
 * Contains the common information for a single device (adapter).
 */
struct cmn_unit {
	struct atm_pif	cu_pif;		/* Physical interface */
	u_int		cu_unit;	/* Local unit number */
	u_char		cu_flags;	/* Device flags (see below) */
	u_int		cu_mtu;		/* Interface MTU */

	u_int		cu_open_vcc;	/* Open VCC count */
	Cmn_vcc		*cu_vcc;	/* List of VCC's on interface */

	u_int		cu_intrpri;	/* Highest unit interrupt priority */
	int		cu_savepri;	/* Saved priority for locking device */

	uma_zone_t	cu_vcc_zone;	/* Device VCC zone */
	uma_zone_t	cu_nif_zone;	/* Device NIF zone */

	int		(*cu_ioctl)	/* Interface ioctl handler */
				(int, caddr_t, caddr_t);
	int		(*cu_instvcc)	/* VCC stack instantion handler */
				(struct cmn_unit *, Cmn_vcc *);
	int		(*cu_openvcc)	/* Open VCC handler */
				(struct cmn_unit *, Cmn_vcc *);
	int		(*cu_closevcc)	/* Close VCC handler */
				(struct cmn_unit *, Cmn_vcc *);
	void		(*cu_output)	/* Data output handler */
				(struct cmn_unit *, Cmn_vcc *, KBuffer *);

	Atm_config	cu_config;	/* Device configuration data */

	void *		cu_softc;	/* pointer to driver state */
};
typedef struct cmn_unit	Cmn_unit;

/*
 * Device flags
 */
#define	CUF_REGISTER	0x01		/* Device is registered */
#define	CUF_INITED	0x02		/* Device is initialized */


/*
 * Structure used to define a network convergence module and its associated
 * entry points.  A convergence module is used to provide the interface
 * translations necessary between the ATM system and the BSD network layer
 * interface mechanism.  There will be one network convergence module for
 * each protocol address family supporting ATM connections.
 */
struct atm_ncm {
	struct atm_ncm	*ncm_next;	/* Next in registry list */
	u_short		ncm_family;	/* Protocol family */
/* Exported functions */
	int		(*ncm_ifoutput)	/* Interface if_output handler */
				(struct ifnet *, KBuffer *, struct sockaddr *);
	int		(*ncm_stat)	/* Network i/f status handler */
				(int, struct atm_nif *, intptr_t);
};

/*
 * ncm_stat() commands
 */
#define	NCM_ATTACH	1		/* Attaching a new net i/f */
#define	NCM_DETACH	2		/* Detaching a current net i/f */
#define	NCM_SETADDR	3		/* Net i/f address change */
#define	NCM_SIGATTACH	4		/* Attaching a signalling manager */
#define	NCM_SIGDETACH	5		/* Detaching a signalling manager */


/*
 * atm_dev_alloc() parameters
 */
#define	ATM_DEV_NONCACHE	1	/* Allocate non-cacheable memory */

/*
 * atm_dev_compress() buffer allocation sizes
 */
#define	ATM_DEV_CMPR_LG	MCLBYTES	/* Size of large buffers */
#define	ATM_DEV_CMPR_SM	MLEN		/* Size of small buffers */

/*
 * Macros to lock out device interrupts
 */
#define	DEVICE_LOCK(u)		((u)->cu_savepri = splimp())
#define	DEVICE_UNLOCK(u)	((void) splx((u)->cu_savepri))

/*
 * Macro to schedule the ATM interrupt queue handler
 */
typedef	void (atm_intr_t)(void *, KBuffer *); /* Callback function type */
typedef	atm_intr_t	*atm_intr_func_t; /* Pointer to callback function */

#endif /* _KERNEL */

#endif	/* _NETATM_ATM_IF_H */
OpenPOWER on IntegriCloud