summaryrefslogtreecommitdiffstats
path: root/sys/dev/hfa/fore_aali.h
blob: ccf3922142823202cf7998ef9a50a615106be19c (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
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
/*
 *
 * ===================================
 * 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$
 *
 */

/*
 * FORE Systems 200-Series Adapter Support
 * ---------------------------------------
 *
 * ATM Adaptation Layer Interface (AALI) definitions
 *
 */

#ifndef _FORE_AALI_H
#define _FORE_AALI_H

/*
 * This file contains the definitions required by the FORE ATM Adaptation
 * Layer Interface (AALI) specification.
 */


/*
 * Addressing/Pointer definitions
 *
 * The CP memory only supports 32-bit word accesses (read and write) - thus,
 * all memory must be defined and accessed as 32-bit words.  Also, since the
 * data transfers are word-sized, we must take care of byte-swapping issues
 * from/to little-endian hosts (the CP is an i960 processor, ie big-endian).
 *
 * All pointers to CP memory areas are actually offsets from the start of 
 * the adapter RAM address space.
 *
 * All CP-resident data structures are declared volatile.
 */
typedef void *		H_addr;		/* Host-resident address */
typedef unsigned long	H_dma;		/* Host-resident DMA address */
typedef unsigned long	CP_word;	/* CP-resident word */
typedef unsigned long	CP_addr;	/* CP-resident CP memory offset */
typedef unsigned long	CP_dma;		/* CP-resident DMA address */
 

/*
 * Structure defining the CP's shared memory interface to the mon960 program
 */
struct mon960 {
	CP_word		mon_xmitmon;	/* Uart - host to mon960 (see below) */
	CP_word		mon_xmithost;	/* Uart - mon960 to host (see below) */
	CP_word		mon_bstat;	/* Boot status word (see below) */
	CP_addr		mon_appl;	/* Pointer to application memory area */
	CP_word		mon_ver;	/* Mon960 firmware version */
};
typedef volatile struct mon960	Mon960;

/*
 * Pseudo-UART usage
 */
#define	UART_READY	0x00000000	/* UART is ready for more data */
#define	UART_VALID	0x01000000	/* UART character is valid */
#define	UART_DATAMASK	0x000000ff	/* UART character data mask */

/*
 * Boot Status Word
 */
#define	BOOT_COLDSTART	0xc01dc01d	/* CP is performing cold start */
#define	BOOT_MONREADY	0x02201958	/* Monitor is waiting for commands */
#define	BOOT_FAILTEST	0xadbadbad	/* Monitor failed self-test */
#define	BOOT_RUNNING	0xce11feed	/* Microcode downloaded and running */

#define	BOOT_LOOPS	20		/* Loops to wait for CP to boot */
#define	BOOT_DELAY	100000		/* Delay (us) for each boot loop */


/*
 * Supported AALs
 */
enum fore_aal {
	FORE_AAL_0 = 0,			/* Cell Service */
	FORE_AAL_4 = 4,			/* AAL 3/4 */
	FORE_AAL_5 = 5			/* AAL 5 */
};
typedef enum fore_aal Fore_aal;


/*
 * Buffer strategy definition
 */
struct buf_strategy {
	CP_word		bfs_quelen;	/* Buffer supply queue entries */
	CP_word		bfs_bufsize;	/* Buffer size */
	CP_word		bfs_cppool;	/* Buffers in CP-resident pool */
	CP_word		bfs_entsize;	/* Buffers in each supply queue entry */
};
typedef volatile struct buf_strategy	Buf_strategy;

/*
 * Buffer strategy id
 */
#define	BUF_STRAT_1	0		/* Buffer strategy one */
#define	BUF_STRAT_2	1		/* Buffer strategy two */



#ifdef _KERNEL
/*
 * Common Queue Element
 *
 * Used for Transmit, Receive and Buffer Supply Queues
 */
struct com_queue {
	CP_dma		cq_descr;	/* Pointer to element descriptor */
	CP_dma		cq_status;	/* Pointer to element status word */
};
typedef volatile struct com_queue	Com_queue;


/*
 * Queue element status word
 */
typedef volatile unsigned long	Q_status;

#define	QSTAT_PENDING	0x01		/* Operation is pending */
#define	QSTAT_COMPLETED	0x02		/* Operation successfully completed */
#define	QSTAT_FREE	0x04		/* Queue element is free/unused */
#define	QSTAT_ERROR	0x08		/* Operation encountered an error */

#define	QSTAT_ALIGN	4


/*
 * PDU Transmit Queue
 */

/*
 * PDU Transmit Queue Element
 */
typedef volatile struct com_queue	Xmit_queue;


/*
 * PDU Transmit buffer segment descriptor
 */
struct xmit_seg_descr {
	H_dma		xsd_buffer;	/* Buffer's DMA address */
	u_int		xsd_len;	/* Data length in buffer */
};
typedef struct xmit_seg_descr	Xmit_seg_descr;

#define	XMIT_SEG_ALIGN	4


/*
 * PDU Transmit descriptor header
 */
struct xmit_descr_hdr {
	u_long		xdh_cell_hdr;	/* Cell header (minus HEC) */
	u_long		xdh_spec;	/* Transmit specification (see below) */
	u_long		xdh_rate;	/* Rate control (data/idle cell ratio)*/
	u_long		xdh_pad;	/* Pad to quad-word boundary */
};
typedef struct xmit_descr_hdr	Xmit_descr_hdr;


#define	XMIT_BLK_BITS		5		/* Bits to encode block size */
#define	XMIT_MAX_BLK_BITS	4		/* Max bits we can use */
#define	XMIT_BLK_SIZE		(1 << XMIT_BLK_BITS)
#define	XMIT_SEGS_TO_BLKS(nseg) \
		((((nseg) * sizeof(Xmit_seg_descr)) \
		+ sizeof(Xmit_descr_hdr) + (XMIT_BLK_SIZE - 1)) \
		>> XMIT_BLK_BITS)
#define	XMIT_MAX_BLKS		((1 << XMIT_MAX_BLK_BITS) - 1)
#define	XMIT_HDR_SEGS 		((XMIT_BLK_SIZE - sizeof(Xmit_descr_hdr)) \
					/ sizeof(Xmit_seg_descr))
#define	XMIT_BLK_SEGS		(XMIT_BLK_SIZE / sizeof(Xmit_seg_descr))
#define	XMIT_EXTRA_SEGS		((XMIT_MAX_BLKS - 1) * XMIT_BLK_SEGS)
#define	XMIT_MAX_SEGS		(XMIT_EXTRA_SEGS + XMIT_HDR_SEGS)


/*
 * PDU Transmit descriptor
 */
struct xmit_descr {
	Xmit_descr_hdr	xd_hdr;		/* Descriptor header */
	Xmit_seg_descr	xd_seg[XMIT_MAX_SEGS];	/* PDU segments */
};
typedef struct xmit_descr	Xmit_descr;

#define	xd_cell_hdr	xd_hdr.xdh_cell_hdr
#define	xd_spec		xd_hdr.xdh_spec
#define	xd_rate		xd_hdr.xdh_rate

/*
 * Transmit specification
 *
 *	Bits  0-15 - Total PDU length
 *	Bits 16-23 - Number of transmit segments
 *	Bits 24-27 - AAL type
 *	Bits 28-31 - Interrupt flag
 */
#define	XDS_SET_SPEC(i,a,n,l)	(((i) << 28) | ((a) << 24) | ((n) << 16) | (l))
#define	XDS_GET_LEN(s)		((s) & 0xffff)
#define	XDS_GET_SEGS(s)		(((s) >> 16) & 0xff)
#define	XDS_GET_AAL(s)		(((s) >> 24) & 0xf)
#define	XDS_GET_INTR(s)		(((s) >> 28) & 0xf)

#define	XMIT_MAX_PDULEN		65535
#define	XMIT_DESCR_ALIGN	32



/*
 * PDU Receive Queue
 */

/*
 * PDU Receive Queue Element
 */
typedef volatile struct com_queue	Recv_queue;


/*
 * Receive PDU buffer segment description
 */
struct recv_seg_descr {
	H_addr		rsd_handle;	/* Buffer handle (from supply) */
	u_int		rsd_len;	/* Data length in buffer */
};
typedef struct recv_seg_descr	Recv_seg_descr;


/*
 * PDU Receive descriptor header
 */
struct recv_descr_hdr {
	u_long		rdh_cell_hdr;	/* Cell header (minus HEC) */
	u_long		rdh_nsegs;	/* Number of receive segments */
};
typedef struct recv_descr_hdr	Recv_descr_hdr;


#define	RECV_BLK_SIZE		32
#define	RECV_HDR_SEGS 		((RECV_BLK_SIZE - sizeof(Recv_descr_hdr)) \
					/ sizeof(Recv_seg_descr))
#define	RECV_BLK_SEGS		(RECV_BLK_SIZE / sizeof(Recv_seg_descr))
#define	RECV_MAX_LG_SEGS	((FORE_IFF_MTU - BUF1_SM_SIZE \
					+ (BUF1_LG_SIZE - 1)) / BUF1_LG_SIZE)
#define	RECV_EXTRA_BLKS		(((RECV_MAX_LG_SEGS + 1 - RECV_HDR_SEGS) \
					+ (RECV_BLK_SEGS - 1)) / RECV_BLK_SEGS)
#define RECV_EXTRA_SEGS		(RECV_EXTRA_BLKS * RECV_BLK_SEGS)
#define	RECV_MAX_SEGS		(RECV_EXTRA_SEGS + RECV_HDR_SEGS)


/*
 * PDU Receive descriptor
 */
struct recv_descr {
	Recv_descr_hdr	rd_hdr;		/* Descriptor header */
	Recv_seg_descr	rd_seg[RECV_MAX_SEGS];	/* PDU segments */
};
typedef struct recv_descr	Recv_descr;

#define	rd_cell_hdr	rd_hdr.rdh_cell_hdr
#define	rd_nsegs	rd_hdr.rdh_nsegs

#define	RECV_DESCR_ALIGN	32



/*
 * Buffer Supply Queue
 */

/*
 * Buffer Supply Queue Element
 */
typedef volatile struct com_queue	Buf_queue;


/*
 * Buffer supply descriptor for supplying receive buffers
 */
struct buf_descr {
	H_addr		bsd_handle;	/* Host-specific buffer handle */
	H_dma		bsd_buffer;	/* Buffer DMA address */
};
typedef struct buf_descr	Buf_descr;

#define	BUF_DESCR_ALIGN		32



/*
 * Command Queue
 */

/*
 * Command Codes
 */
typedef volatile unsigned long	Cmd_code;

#define	CMD_INIT	0x01		/* Initialize microcode */
#define	CMD_ACT_VCCIN	0x02		/* Activate incoming VCC */
#define	CMD_ACT_VCCOUT	0x03		/* Activate outgoing VCC */
#define	CMD_DACT_VCCIN	0x04		/* Deactivate incoming VCC */
#define	CMD_DACT_VCCOUT	0x05		/* Deactivate outgoing VCC */
#define	CMD_GET_STATS	0x06		/* Get adapter statistics */
#define	CMD_SET_OC3_REG	0x07		/* Set SUNI OC3 registers */
#define	CMD_GET_OC3_REG	0x08		/* Get SUNI OC3 registers */
#define	CMD_GET_PROM	0x09		/* Get PROM data */
#define	CMD_INTR_REQ	0x80		/* Request host interrupt */

#endif	/* _KERNEL */


/*
 * Structure defining the parameters for the Initialize command
 */
struct init_parms {
	CP_word		init_cmd;	/* Command code */
	CP_word		init_status;	/* Completion status */
	CP_word		init_indisc;	/* Not used */
	CP_word		init_numvcc;	/* Number of VCC's supported */
	CP_word		init_cmd_elem;	/* # of command queue elements */
	CP_word		init_xmit_elem;	/* # of transmit queue elements */
	CP_word		init_recv_elem;	/* # of receive queue elements */
	CP_word		init_recv_ext;	/* # of extra receive descr SEGMENTS */
	CP_word		init_xmit_ext;	/* # of extra transmit descr SEGMENTS */
	CP_word		init_cls_vcc;	/* Not used */
	CP_word		init_pad[2];	/* Pad to quad-word boundary */
	Buf_strategy	init_buf1s;	/* Buffer strategy - 1 small */
	Buf_strategy	init_buf1l;	/* Buffer strategy - 1 large */
	Buf_strategy	init_buf2s;	/* Buffer strategy - 2 small */
	Buf_strategy	init_buf2l;	/* Buffer strategy - 2 large */
};
typedef volatile struct init_parms	Init_parms;


#ifdef _KERNEL
/*
 * Structure defining the parameters for the Activate commands
 */
struct activate_parms {
	CP_word		act_spec;	/* Command specification (see below) */
	CP_word		act_vccid;	/* VCC id (VPI=0,VCI=id) */
	CP_word		act_batch;	/* # cells in batch (AAL=NULL) */
	CP_word		act_pad;	/* Pad to quad-word boundary */
};
typedef volatile struct activate_parms	Activate_parms;

/*
 * Activate command specification
 *
 *	Bits  0-7  - command code
 *	Bits  8-15 - AAL type
 *	Bits 16-23 - buffer strategy
 *	Bits 24-31 - reserved
 */
#define	ACT_SET_SPEC(b,a,c)	(((b) << 16) | ((a) << 8) | (c))
#define	ACT_GET_CMD(s)		((s) & 0xff)
#define	ACT_GET_AAL(s)		(((s) >> 8) & 0xff)
#define	ACT_GET_STRAT(s)	(((s) >> 16) & 0xff)


/*
 * Structure defining the parameters for the Deactivate commands
 */
struct dactivate_parms {
	CP_word		dact_cmd;	/* Command code */
	CP_word		dact_vccid;	/* VCC id (VPI=0,VCI=id) */
	CP_word		dact_pad[2];	/* Pad to quad-word boundary */
};
typedef volatile struct dactivate_parms	Dactivate_parms;


/*
 * Structure defining the parameters for the Get Statistics command
 */
struct stats_parms {
	CP_word		stats_cmd;	/* Command code */
	CP_dma		stats_buffer;	/* DMA address of host stats buffer */
	CP_word		stats_pad[2];	/* Pad to quad-word boundary */
};
typedef volatile struct stats_parms	Stats_parms;


/*
 * Structure defining the parameters for the SUNI OC3 commands
 */
struct suni_parms {
	CP_word		suni_spec;	/* Command specification (see below) */
	CP_dma		suni_buffer;	/* DMA address of host SUNI buffer */
	CP_word		suni_pad[2];	/* Pad to quad-word boundary */
};
typedef volatile struct suni_parms	Suni_parms;

/*
 * SUNI OC3 command specification
 *
 *	Bits  0-7  - command code
 *	Bits  8-15 - SUNI register number
 *	Bits 16-23 - Value(s) to set in register
 *	Bits 24-31 - Mask selecting value bits
 */
#define	SUNI_SET_SPEC(m,v,r,c)	(((m) << 24) | ((v) << 16) | ((r) << 8) | (c))
#define	SUNI_GET_CMD(s)		((s) & 0xff)
#define	SUNI_GET_REG(s)		(((s) >> 8) & 0xff)
#define	SUNI_GET_VALUE(s)	(((s) >> 16) & 0xff)
#define	SUNI_GET_MASK(s)	(((s) >> 24) & 0xff)


/*
 * Structure defining the parameters for the Get Prom command
 */
struct	prom_parms {
	CP_word		prom_cmd;	/* Command code */
	CP_dma		prom_buffer;	/* DMA address of host prom buffer */
	CP_word		prom_pad[2];	/* Pad to quad-word boundary */
};
typedef volatile struct prom_parms	Prom_parms;


/*
 * Command Queue Element
 */
struct cmd_queue {
	union {				/* Command-specific parameters */
		Activate_parms	cmdqu_act;
		Dactivate_parms	cmdqu_dact;
		Stats_parms	cmdqu_stats;
		Suni_parms	cmdqu_suni;
		Prom_parms	cmdqu_prom;
	} cmdq_u;
	CP_dma		cmdq_status;	/* Pointer to element status word */
	CP_word		cmdq_pad[3];	/* Pad to quad-word boundary */
};
#define	cmdq_act	cmdq_u.cmdqu_act
#define	cmdq_dact	cmdq_u.cmdqu_dact
#define	cmdq_stats	cmdq_u.cmdqu_stats
#define	cmdq_suni	cmdq_u.cmdqu_suni
#define	cmdq_prom	cmdq_u.cmdqu_prom
typedef volatile struct cmd_queue	Cmd_queue;

#endif	/* _KERNEL */



/*
 * Structure defining the CP's shared memory interface to the 
 * AALI firmware program (downloaded microcode)
 */
struct aali {
	CP_addr		aali_cmd_q;	/* Pointer to command queue */
	CP_addr		aali_xmit_q;	/* Pointer to transmit queue */
	CP_addr		aali_recv_q;	/* Pointer to receive queue */
	CP_addr		aali_buf1s_q;	/* Pointer to strategy-1 small queue */
	CP_addr		aali_buf1l_q;	/* Pointer to strategy-1 large queue */
	CP_addr		aali_buf2s_q;	/* Pointer to strategy-2 small queue */
	CP_addr		aali_buf2l_q;	/* Pointer to strategy-2 large queue */
	CP_word		aali_intr_ena;	/* Enables interrupts if non-zero */
	CP_word		aali_intr_sent;	/* Interrupt issued if non-zero */
	CP_addr		aali_heap;	/* Pointer to application heap */
	CP_word		aali_heaplen;	/* Length of application heap */
	CP_word		aali_hostlog;	/* FORE internal use */
	CP_word		aali_heartbeat;	/* Monitor microcode health */
	CP_word		aali_ucode_ver;	/* Microcode firmware version */
	CP_word		aali_mon_ver;	/* Mon960 version */
	CP_word		aali_xmit_tput;	/* FORE internal use */

	/* This must be on a quad-word boundary */
	Init_parms	aali_init;	/* Initialize command parameters */
};
typedef volatile struct aali	Aali;


/*
 * CP maintained statistics - DMA'd to host with CMD_GET_STATS command
 */
struct stats_taxi {
	u_long		taxi_bad_crc;	/* Bad header CRC errors */
	u_long		taxi_framing;	/* Framing errors */
	u_long		taxi_pad[2];	/* Pad to quad-word boundary */
};
typedef struct stats_taxi	Stats_taxi;

struct stats_oc3 {
	u_long		oc3_sect_bip8;	/* Section 8-bit intrlv parity errors */
	u_long		oc3_path_bip8;	/* Path 8-bit intrlv parity errors */
	u_long		oc3_line_bip24;	/* Line 24-bit intrlv parity errors */
	u_long		oc3_line_febe;	/* Line far-end block errors */
	u_long		oc3_path_febe;	/* Path far-end block errors */
	u_long		oc3_hec_corr;	/* Correctible HEC errors */
	u_long		oc3_hec_uncorr;	/* Uncorrectible HEC errors */
	u_long		oc3_pad;	/* Pad to quad-word boundary */
};
typedef struct stats_oc3	Stats_oc3;

struct stats_atm {
	u_long		atm_xmit;	/* Cells transmitted */
	u_long		atm_rcvd;	/* Cells received */
	u_long		atm_vpi_range;	/* Cell drops - VPI out of range */
	u_long		atm_vpi_noconn;	/* Cell drops - no connect for VPI */
	u_long		atm_vci_range;	/* Cell drops - VCI out of range */
	u_long		atm_vci_noconn;	/* Cell drops - no connect for VCI */
	u_long		atm_pad[2];	/* Pad to quad-word boundary */
};
typedef struct stats_atm	Stats_atm;

struct stats_aal0 {
	u_long		aal0_xmit;	/* Cells transmitted */
	u_long		aal0_rcvd;	/* Cells received */
	u_long		aal0_drops;	/* Cell drops */
	u_long		aal0_pad;	/* Pad to quad-word boundary */
};
typedef struct stats_aal0	Stats_aal0;

struct stats_aal4 {
	u_long		aal4_xmit;	/* Cells transmitted */
	u_long		aal4_rcvd;	/* Cells received */
	u_long		aal4_crc;	/* Cells with payload CRC errors */
	u_long		aal4_sar_cs;	/* Cells with SAR/CS errors */
	u_long		aal4_drops;	/* Cell drops */
	u_long		aal4_pdu_xmit;	/* CS PDUs transmitted */
	u_long		aal4_pdu_rcvd;	/* CS PDUs received */
	u_long		aal4_pdu_errs;	/* CS layer protocol errors */
	u_long		aal4_pdu_drops;	/* CS PDUs dropped */
	u_long		aal4_pad[3];	/* Pad to quad-word boundary */
};
typedef struct stats_aal4	Stats_aal4;

struct stats_aal5 {
	u_long		aal5_xmit;	/* Cells transmitted */
	u_long		aal5_rcvd;	/* Cells received */
	u_long		aal5_crc_len;	/* Cells with CRC/length errors */
	u_long		aal5_drops;	/* Cell drops */
	u_long		aal5_pdu_xmit;	/* CS PDUs transmitted */
	u_long		aal5_pdu_rcvd;	/* CS PDUs received */
	u_long		aal5_pdu_crc;	/* CS PDUs with CRC errors */
	u_long		aal5_pdu_errs;	/* CS layer protocol errors */
	u_long		aal5_pdu_drops;	/* CS PDUs dropped */
	u_long		aal5_pad[3];	/* Pad to quad-word boundary */
};
typedef struct stats_aal5	Stats_aal5;

struct stats_misc {
	u_long		buf1_sm_fail;	/* Alloc fail: buffer strat 1 small */
	u_long		buf1_lg_fail;	/* Alloc fail: buffer strat 1 large */
	u_long		buf2_sm_fail;	/* Alloc fail: buffer strat 2 small */
	u_long		buf2_lg_fail;	/* Alloc fail: buffer strat 2 large */
	u_long		rcvd_pdu_fail;	/* Received PDU allocation failure */
	u_long		carrier_status;	/* Carrier status */
	u_long		misc_pad[2];	/* Pad to quad-word boundary */
};
typedef struct stats_misc	Stats_misc;

struct fore_cp_stats {
	Stats_taxi	st_cp_taxi;	/* TAXI layer statistics */
	Stats_oc3	st_cp_oc3;	/* OC3 layer statistics */
	Stats_atm	st_cp_atm;	/* ATM layer statistics */
	Stats_aal0	st_cp_aal0;	/* AAL0 layer statistics */
	Stats_aal4	st_cp_aal4;	/* AAL3/4 layer statistics */
	Stats_aal5	st_cp_aal5;	/* AAL5 layer statistics */
	Stats_misc	st_cp_misc;	/* Miscellaneous statistics */
};
typedef struct fore_cp_stats	Fore_cp_stats;

#define	FORE_STATS_ALIGN	32

/*
 * CP PROM data - DMA'd to host with CMD_GET_PROM command
 */
struct fore_prom {
	u_long		pr_hwver;	/* Hardware version number */
	u_long		pr_serno;	/* Serial number */
	u_char		pr_mac[8];	/* MAC address */
};
typedef struct fore_prom	Fore_prom;

#define	FORE_PROM_ALIGN		32

#endif	/* _FORE_AALI_H */
OpenPOWER on IntegriCloud