Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  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
/*	$NetBSD: tropicreg.h,v 1.6 2005/12/11 12:21:28 christos Exp $	*/

/*
 * Mach Operating System
 * Copyright (c) 1991 Carnegie Mellon University
 * Copyright (c) 1991 IBM Corporation
 * All Rights Reserved.
 *
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation,
 * and that the name IBM not be used in advertising or publicity
 * pertaining to distribution of the software without specific, written
 * prior permission.
 *
 * CARNEGIE MELLON AND IBM ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 * CONDITION.  CARNEGIE MELLON AND IBM DISCLAIM ANY LIABILITY OF ANY KIND FOR
 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 *
 * Carnegie Mellon requests users of this software to return to
 *
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 *
 * any improvements or extensions that they make and grant Carnegie Mellon
 * the rights to redistribute these changes.
 */

/* $ACIS:if_lanreg.h 12.0$ */

#define TR_SWITCH 0
#define TR_RESET 1
#define TR_RELEASE 2
#define TR_CLEARINT 3

/* macros to deal with accessing the MMIO region */
#define MM_OUTB(sc, off, val)	\
	bus_space_write_1((sc)->sc_memt, (sc)->sc_mmioh, (off), (val))
#define MM_OUTW(sc, off, val)	\
	bus_space_write_2((sc)->sc_memt, (sc)->sc_mmioh, (off), htons((val)))
#define MM_INB(sc, off)		\
	bus_space_read_1((sc)->sc_memt, (sc)->sc_mmioh, (off))
#define MM_INW(sc, off)		\
	ntohs(bus_space_read_2((sc)->sc_memt, (sc)->sc_mmioh, (off)))

/* macros to deal with accesses to the shared ram */
#define SR_INB(sc, off)	\
	bus_space_read_1(sc->sc_memt, sc->sc_sramh, (off))
#define SR_INW(sc, off)	\
	htons(bus_space_read_2(sc->sc_memt, sc->sc_sramh, (off)))
#define SR_OUTB(sc, off, val)	\
	bus_space_write_1((sc)->sc_memt, (sc)->sc_sramh, (off), (val))
#define SR_OUTW(sc, off, val)	\
	bus_space_write_2((sc)->sc_memt, (sc)->sc_sramh, (off), htons((val)))

/* macros to deal with accesses to the recv buffers */
#define RB_INB(sc, rb, reg)	SR_INB(sc, (rb)+(reg))
#define RB_INW(sc, rb, reg)	SR_INW(sc, (rb)+(reg))

/* macros to deal with the ACA */
#define ACA_RDB(sc, reg)	MM_INB(sc, ((sc->sc_aca+(reg))|ACA_RW))
#define ACA_RDW(sc, reg)	MM_INW(sc, ((sc->sc_aca+(reg))|ACA_RW))
#define ACA_OUTB(sc, reg, val)	MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_RW), (val))
#define ACA_SETB(sc, reg, val)	MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_SET), (val))
#define ACA_RSTB(sc, reg, val)	MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_RST), (val))

/* macros to deal with the SSB */
#define SSB_INB(sc, ssb, reg)	SR_INB(sc, (ssb)+(reg))

/* macros to deal with the ARB */
#define ARB_INB(sc, arb, reg)	SR_INB(sc, (arb)+(reg))
#define ARB_INW(sc, arb, reg)	SR_INW(sc, (arb)+(reg))

/* macros to deal with the SRB */
#define SRB_INB(sc, srb, reg)	SR_INB(sc, (srb)+(reg))
#define SRB_INW(sc, srb, reg)	SR_INW(sc, (srb)+(reg))
#define SRB_OUTB(sc, srb, reg, val)	SR_OUTB(sc, (srb)+(reg), (val))
#define SRB_OUTW(sc, srb, reg, val)	SR_OUTW(sc, (srb)+(reg), (val))

/* macros to deal with the ASB */
#define ASB_INB(sc, asb, reg)	SR_INB(sc, (asb)+(reg))
#define ASB_INW(sc, asb, reg)	SR_INW(sc, (asb)+(reg))
#define ASB_OUTB(sc, asb, reg, val)	SR_OUTB(sc, (asb)+(reg), (val))
#define ASB_OUTW(sc, asb, reg, val)	SR_OUTW(sc, (asb)+(reg), (val))

/* macros to deal with the TXCA */
#define TXCA_INW(sc, reg)	SR_INW(sc, sc->sc_txca+(reg))
#define TXCA_OUTW(sc, reg, val)	SR_OUTW(sc, sc->sc_txca+(reg), (val))

/* macros to deal with the txbuffers */
#define TXB_INB(sc, buf, reg)	SR_INB(sc, (buf)+(reg))
#define TXB_INW(sc, buf, reg)	SR_INW(sc, (buf)+(reg))
#define TXB_OUTB(sc, buf, reg, val)	SR_OUTB(sc, (buf)+(reg), (val))
#define TXB_OUTW(sc, buf, reg, val)	SR_OUTW(sc, (buf)+(reg), (val))

/* ACA registers */
#define ACA_RRR		0
#define ACA_RRR_e	ACA_RRR
#define ACA_RRR_o	(ACA_RRR+1)
#define ACA_WRBR	2
#define ACA_WRBR_e	ACA_WRBR
#define ACA_WRBR_o	(ACA_WRBR+1)
#define ACA_WWOR	4
#define ACA_WWOR_e	ACA_WWOR
#define ACA_WWOR_o	(ACA_WWOR+1)
#define ACA_WWCR	6
#define ACA_WWCR_e	ACA_WWCR
#define ACA_WWCR_o	(ACA_WWCR+1)
#define ACA_ISRP	8
#define ACA_ISRP_e	ACA_ISRP
#define ACA_ISRP_o	(ACA_ISRP+1)
#define ACA_ISRA	10
#define ACA_ISRA_e	ACA_ISRA
#define ACA_ISRA_o	(ACA_ISRA+1)
#define ACA_TCR		12
#define ACA_TCR_e	ACA_TCR
#define ACA_TCR_o	(ACA_TCR+1)
#define ACA_TVR		14
#define ACA_TVR_e	ACA_TVR
#define ACA_TVR_o	(ACA_TVR+1)

/* access flags; to be or-ed into offset */
#define ACA_RW		0
#define ACA_RST		0x20
#define ACA_SET		0x40

/* offsets valid for all command blocks */
#define CMD_CMD		0
#define CMD_RETCODE	2

/*
 * Structure of SSB (System Status Block)
 */
#define SSB_SIZE	20		/* size of SSB */
#define SSB_CMD		0
#define SSB_CMDCORR	1
#define SSB_RETCODE	2
#define SSB_STATIONID	4
#define SSB_XMITERR	6

/*
 * Structure of ARB (Adapter Request Block)
 */
#define ARB_SIZE	28		/* size of ARB */
#define ARB_CMD		0
#define ARB_STATIONID	4		/* ID of receiving station */

/* receive data command block */
#define ARB_RXD_BUFADDR	6		/* RAM offset of 1st rec buf */
#define ARB_RXD_LANHDRLEN	8	/* Length of LAN header */
#define ARB_RXD_DLCHDRLEN	9	/* Length of DLC header */
#define ARB_RXD_FRAMELEN	10	/* Length of entire frame */
#define ARB_RXD_MSGTYPE		12	/* Category of message */

/* transmit data command block */
#define ARB_XMT_CMDCORR		1
#define ARB_XMT_DHBADDR		6

/* ring status change information block */
#define ARB_RINGSTATUS		6

/* DLC status change response block */
#define ARB_DLCSTAT_STATUS	6	/* status info field */
#define ARB_DLCSTAT_FRMRDATA	8	/* 5 bytes */
#define ARB_DLCSTAT_ACCPRIO	13
#define ARB_DLCSTAT_REMADDR	14	/* remote address */
#define ARB_DLCSTAT_REMSAP	20	/* remote sap */

/*
 * Structure of SRB (System Request Block)
 */
#define SRB_SIZE	28		/* size of SRB */
#define SRB_CMD	0
#define SRB_RETCODE	2

/* contents of SRB after adapter reset */
#define		INIT_COMPL		0x80	/* in SRB_CMD */
#define SRB_INIT_STATUS	1
#define		RSP_DETECT		0x40
#define		FAST_PATH_TRANSMIT	0x20
#define		RING_MEASUREMENT	0x08
#define		RPL			0x02
#define		RSP_16			0x01
#define SRB_INIT_STATUS2	2
#define		PNP			0x80
#define		SET_DEF_RSP		0x40
#define		AUTO_DEF_RSP_UPDATE	0x20
#define SRB_INIT_BUC	6		/* bring up code */
#define SRB_INIT_ENCADDR	8	/* offset of adapter's */
					/* permanent encoded address */
#define SRB_INIT_LVLADDR	10	/* offset of adapter's */
					/* microcode level */
#define SRB_INIT_ADAPADDR	12	/* offset of adapter addresses */
#define SRB_INIT_PARMSADDR	14	/* offset of adapter parameters */
#define SRB_INIT_MACADDR	16	/* offset of adapter MAC buffer */
#define SRB_INIT_UTILADDR	18	/* offset of ring utilization measurement */

/* config fast path ram command block */
#define SRB_CFP_CMDSIZE		12	/* length of command block */
#define SRB_CFP_RAMSIZE		8
#define SRB_CFP_BUFSIZE		10

/* config fast path transmit response block */
#define SRB_CFPRESP_FPXMIT	8	/* offset to transmit control area */
#define SRB_CFPRESP_SRBADDR	10	/* offset for the next SRB address */

/* open command block */
#define SRB_OPEN_CMDSIZE	60
#define SRB_OPEN_OPTIONS	8	/* open options */
#define SRB_OPEN_NODEADDR	10	/* adapter's ring address */
#define SRB_OPEN_GROUPADDR	16	/* adapter's group address */
#define SRB_OPEN_FUNCTADDR	20	/* adapter's functional address */
#define SRB_OPEN_NUMRCVBUF	24	/* number of receive buffers */
#define SRB_OPEN_RCVBUFLEN	26	/* length of receive buffers */
#define SRB_OPEN_DHBLEN		28	/* length of DHBs */
#define SRB_OPEN_NUMDHB		30	/* number of DHBs */
#define SRB_OPEN_DLCMAXSAP	32	/* max. number of SAPs */
#define SRB_OPEN_DLCMAXSTA	33	/* max. number of link stations */
#define SRB_OPEN_DLCMAXGSAP	34	/* max. number of group SAPs */
#define SRB_OPEN_DLCMAXGMEM	35	/* max. members per group SAP */
#define SRB_OPEN_DLCT1TICK1	36	/* timer T1 intvl. group one */
#define SRB_OPEN_DLCT2TICK1	37	/* timer T7 intvl. group one */
#define SRB_OPEN_DLCTITICK1	38	/* timer Ti intvl. group one */
#define SRB_OPEN_DLCT1TICK2	39	/* timer T1 intvl. group two */
#define SRB_OPEN_DLCT2TICK2	40	/* timer T7 intvl. group two */
#define SRB_OPEN_DLCTITICK2	41	/* timer Ti intvl. group two */
#define SRB_OPEN_PODUCTID	42	/* product id (18 bytes) */

/* open command response block */
#define SRB_OPENRESP_ERRCODE	6
#define SRB_OPENRESP_ASBADDR	8	/* offset of ASB */
#define SRB_OPENRESP_SRBADDR	10	/* offset of SRB */
#define SRB_OPENRESP_ARBADDR	12	/* offset of ARB */
#define SRB_OPENRESP_SSBADDR	14	/* offset of SSB */

/* open sap command and response block */
#define SRB_OPNSAP_STATIONID	4	/* ID of SAP after open */
#define SRB_OPNSAP_TIMERT1	6	/* response timer */
#define SRB_OPNSAP_TIMERT2	7	/* acknowledge timer */
#define SRB_OPNSAP_TIMERTI	8	/* inactivity timer */
#define SRB_OPNSAP_MAXOUT	9	/* max. xmits without ack */
#define SRB_OPNSAP_MAXIN	10	/* max. recvs without ack */
#define SRB_OPNSAP_MAXOUTINCR	11	/* window increment value */
#define SRB_OPNSAP_MAXRETRY	12	/* N2 value */
#define SRB_OPNSAP_GSAPMAXMEMB	13	/* max. SAPs for a group SAP */
#define SRB_OPNSAP_MAXIFIELD	14	/* max recv info field length */
#define SRB_OPNSAP_SAPVALUE	16	/* SAP to be opened */
#define SRB_OPNSAP_SAPOPTIONS	17	/* options to be set */
#define SRB_OPNSAP_STATIONCNT	18	/* num of link stations to reserve */
#define SRB_OPNSAP_SAPGSAPMEMB	19	/* number of GSAP members */
#define SRB_OPNSAP_GSAP1	20	/* first gsap request */

/* read log command and response block */
#define SRB_RLOG_LOGDATA	14	/* 14 bytes of log data */
#define SRB_LOG_LINEERRS	(SRB_RLOG_LOGDATA+0)	/* line errors */
#define SRB_LOG_INTERRS		(SRB_RLOG_LOGDATA+1)	/* internal errors */
#define SRB_LOG_BRSTERRS	(SRB_RLOG_LOGDATA+2)	/* burst errors */
#define SRB_LOG_ACERRS		(SRB_RLOG_LOGDATA+3)	/* AC errors */
#define SRB_LOG_ABRTERRS	(SRB_RLOG_LOGDATA+4)	/* abort errors */
#define SRB_LOG_LOSTFRMS	(SRB_RLOG_LOGDATA+6)	/* lost frames */
#define SRB_LOG_RCVCONG		(SRB_RLOG_LOGDATA+7)	/* receive congestion count */
#define SRB_LOG_FCPYERRS	(SRB_RLOG_LOGDATA+8)	/* frame copied errors */
#define SRB_LOG_FREQERRS	(SRB_RLOG_LOGDATA+9)	/* frequency erros  */
#define SRB_LOG_TOKENERRS	(SRB_RLOG_LOGDATA+10)	/* token errors */

/* set default ring speed command */
#define SRB_SET_DEFRSP		6

/*
 * Structure of ASB (Adapter Status Block)
 */
#define ASB_SIZE	12		/* size of ASB */
#define RECV_CMD	0
#define RECV_RETCODE	2
#define RECV_STATIONID	4

#define RECV_RESP_RECBUFADDR	6

/* host response to xmit-req-data command */
#define XMIT_CMD	0
#define XMIT_CMDCORR	1		/* command correlator */
#define XMIT_RETCODE	2		/* return code */
#define XMIT_STATIONID	4		/* id of sending station */
#define XMIT_FRAMELEN	6		/* length of entire frame */
#define XMIT_HDRLEN	8		/* length of LAN header */
#define XMIT_REMSAP	9		/* remote SAP */
#define XMIT_DATA	10		/* offset of first data byte */
/* fast path specific data */
#define XMIT_LASTBUF	12
#define XMIT_FRAMEPTR	14
#define XMIT_NEXTBUF	16
#define XMIT_STATUS	18
#define XMIT_STRIPFS	19
#define XMIT_BUFLEN	20
#define XMIT_FP_DATA	22		/* offset of first data byte */

#if 0	/* XXXchb unused? */
/*
 *	Adapter addresses
 */
struct adapt_addr {
	unsigned char   node_addr[6];	/* Adapter node address */
	unsigned char   grp_addr[4];	/* Adapter group address */
	unsigned char   func_addr[4];	/* Adapter functional address */
};

/*
 *	Adapter parameters
 */
struct param_addr {
	unsigned char   phys_addr[4];	/* Adapter physical address */
	unsigned char   up_node_addr[6];	/* Next active upstream node
					 * addr */
	unsigned char   up_phys_addr[4];	/* Next active upstream phys
					 * addr */
	unsigned char   poll_addr[6];	/* Last poll address */
	unsigned char   res0[2];/* Reserved */
	unsigned char   acc_priority[2];	/* Transmit access priority */
	unsigned char   src_class[2];	/* Source class authorization */
	unsigned char   att_code[2];	/* Last attention code */
	unsigned char   src_addr[6];	/* Last source address */
	unsigned char   bcon_type[2];	/* Last beacon type */
	unsigned char   major_vector[2];	/* Last major vector */
	unsigned char   ring_stat[2];	/* ring status */
	unsigned char   soft_error[2];	/* soft error timer value */
	unsigned char   fe_error[2];	/* front end error counter */
	unsigned char   next_state[2];	/* next state indicator */
	unsigned char   mon_error[2];	/* Monitor error code */
	unsigned char   bcon_xmit[2];	/* Beacon transmit type */
	unsigned char   bcon_receive[2];	/* Beacon receive type */
	unsigned char   frame_correl[2];	/* Frame correlator save */
	unsigned char   bcon_naun[6];	/* beacon station NAUN */
	unsigned char   res1[4];/* Reserved */
	unsigned char   bcon_phys[4];	/* Beacon station physical addr */
};
#endif

#define TXCA_BUFFER_COUNT	0
#define TXCA_FREE_QUEUE_HEAD	2
#define TXCA_FREE_QUEUE_TAIL	4
#define TXCA_ADAPTER_QUEUE_HEAD	6
#define TXCA_BUFFER_SIZE	8
#define TXCA_COMPLETION_QUEUE_TAIL	10

/* Adapter receive buffer structure */
#define RB_NEXTBUF	2	/* offset of next buf plus 2 in sram */
#define RB_FS		5	/* FS/addr match (last buf only) */
#define RB_BUFLEN	6	/* length of data in this buffer */
#define RB_DATA		8	/* RCV_BUF_DLEN bytes frame data */

/* Misc. structure sizes. */
#define SAPCB_SIZE	64	/* size of SAP control block */
#define LSCB_SIZE	144	/* size of DLC link station control block */

/* memory in shared ram area that is reserved by the adapter */
#define PRIVRAM_SIZE	1416	/* adapter private ram area */
#define RESVDMEM_SIZE	(PRIVRAM_SIZE+ARB_SIZE+SSB_SIZE+SRB_SIZE+ASB_SIZE)

/* Memory offsets of adapter control areas */

#define TR_SRAM_DEFAULT	0xd8000

/* Offset of MMIO region */
#define TR_MMIO_OFFSET	0x80000
#define TR_MMIO_MINADDR	0xc0000
#define TR_MMIO_MAXADDR 0xde000
#define TR_MMIO_SIZE	8192

#define	TR_ACA_OFFSET	0x1e00	/* Offset of ACA in MMIO region */
/*
 * XXX Create AIP structure
 */
#define TR_MAC_OFFSET	0x1f00	/* Offset of MAC address in MMIO region */
#define TR_ID_OFFSET	0x1f30	/* Offset of ID in MMIO region */
#define TR_TYP_OFFSET	0x1fa0	/* Offset of TYP in MMIO region */
#define TR_RATES_OFFSET	0x1fa2	/* Offset of supported speeds in MMIO region */
#define TR_RAM_OFFSET	0x1fa6	/* Offset of available shared RAM */
#define TR_PAGE_OFFSET	0x1fa8	/* Offset of shared-RAM paging support */
#define TR_DHB4_OFFSET	0x1faa	/* Offset of available DHB size at 4Mbit */
#define TR_DHB16_OFFSET	0x1fac	/* Offset of available DHB size at 16Mbit */
#define TR_MEDIAS_OFFSET 0x1fb6	/* Offset of supported media types in MMIO */
#define TR_MEDIA_OFFSET	0x1fb8  /* Offset of selected media type in MMIO */
#define TR_IRQ_OFFSET	0x1fba	/* Offset of IRQs supported in MMIO region */

/* Bring-Up Test results */

#define	BUT_OK			0x0000	/* Initialization completed OK */
#define	BUT_PROCESSOR_FAIL	0x0020	/* Failed processor initialization */
#define	BUT_ROM_FAIL		0x0022	/* Failed ROM test diagnostic */
#define	BUT_RAM_FAIL		0x0024	/* Failed RAM test diagnostic */
#define	BUT_INST_FAIL		0x0026	/* Failed instruction test diag. */
#define	BUT_INTER_FAIL		0x0028	/* Failed interrupt test diagnostic */
#define	BUT_MEM_FAIL		0x002a	/* Failed memory interface diag. */
#define	BUT_PROTOCOL_FAIL	0x002c	/* Failed protocol handler diag. */


/* Direct PC-to-adapter commands */

#define	DIR_INTERRUPT		0x00	/* Cause adapter to interrupt the PC */
#define	DIR_MOD_OPEN_PARAMS	0x01	/* Modify open options */
#define DIR_RESTORE_OPEN_PARMS	0x02	/* Restore open options */
#define	DIR_OPEN_ADAPTER	0x03	/* Open the adapter card */
#define	DIR_CLOSE		0x04	/* Close adapter card */
#define	DIR_SET_GRP_ADDR	0x06	/* Set adapter group address */
#define	DIR_SET_FUNC_ADDR	0x07	/* Set adapter functional addr */
#define	DIR_READ_LOG		0x08	/* Read and reset error counters */
#define DIR_SET_BRIDGE_PARMS	0x09
#define DIR_CONFIG_BRIDGE_RAM	0x0c
#define DIR_CONFIG_FAST_PATH_RAM	0x12
#define DIR_SINGLE_ROUTE_BROADCAST	0x1f
#define DIR_SET_DEFAULT_RING_SPEED	0x21

#define XMIT_DIR_FRAME		0x0a	/* Direct station transmit */
#define XMIT_I_FRAME		0x0b
#define XMIT_UI_FRM 		0x0d	/* transmit unnumbered info frame */
#define XMIT_XID_CMD		0x0e	/* transmit XID command */
#define XMIT_XID_RESP_FINAL	0x0f
#define XMIT_XID_RESP_NOT_FINAL	0x10
#define XMIT_TEST_CMD		0x11	/* transmit TEST command */


/* Adapter-Card-to-PC commands */

#define	REC_DATA		0x81	/* Data received from ring station */
#define	XMIT_DATA_REQ		0x82	/* Adapter needs data to xmit */
#define	DLC_STATUS   		0x83    /* DLC status has changed */
#define	RING_STAT_CHANGE	0x84	/* Adapter has new ring-status info */
#define REC_BRIDGE_DATA		0x85
#define REXMIT_DATA_REQ		0x86

/* Open options */

#define	OPEN_WRAP		0x8000	/* Wrap xmit data to receive data */
#define	OPEN_NO_HARD_ERR	0x4000	/* Ring hard error and xmit beacon */
					/* conditions do not cause interrupt */
#define	OPEN_NO_SOFT_ERR	0x2000	/* Ring soft errors do not cause */
					/* interrupt */
#define	OPEN_PASS_MAC		0x1000	/* Pass all adapter-class MAC frames */
					/* received but not supported by the */
					/* adapter */
#define	OPEN_PASS_ATTN_MAC	0x0800	/* Pass all attention-class MAC */
					/* frames != the previously received */
					/* attention MAC frame */
#define	OPEN_PASS_BCON_MAC	0x0100	/* Pass the first beacon MAC frame */
					/* and all subsequent beacon MAC */
					/* frames that have a change in */
					/* source address or beacon type */
#define	OPEN_CONT		0x0080	/* Adapter will participate in */
					/* monitor contention */

#define	NUM_RCV_BUF		4	/* Number of receive buffers in */
					/* shared RAM needed for adapter to */
					/* open */
#define	RCV_BUF_LEN		520	/* Length of each receive buffer */
#define	RCV_BUF_DLEN		RCV_BUF_LEN - 8	/* Length of data in rec buf */

#define	DHB_LENGTH		512	/* Length of each transmit buffer */
#define FP_BUF_LEN		536	/* length of each FP transmit buffer */

/*
 * Integrity cannot be guaranteed if number of dhbs > 2
 */
#define	NUM_DHB			1	/* Number of transmit buffers */

#define	DLC_MAX_SAP		0	/* MAX number of SAPs */
#define DLC_MAX_STA		0	/* MAX number of link stations */
#define	DLC_MAX_GSAP		0	/* MAX number of group SAPs */
#define	DLC_MAX_GMEM		0	/* MAX number of SAPs that can be */
					/* assigned to any given group */
#define	DLC_TICK		0	/* Zero selects default of 40ms */


/* Open return codes */

#define	OPEN_OK			0x00	/* Open completed successfully */
#define	OPEN_BAD_COMMAND	0x01	/* Invalid command code */
#define	OPEN_ALREADY		0x03	/* Adapter is ALREADY open */
#define	OPEN_MISSING_PARAMS	0x05	/* Required parameters missing */
#define	OPEN_UNRECOV_FAIL	0x07	/* Unrecoverable failure occurred */
#define	OPEN_INAD_REC_BUFS	0x30	/* Inadequate receive buffers */
#define	OPEN_BAD_NODE_ADDR	0x32	/* Invalid NODE address */
#define	OPEN_BAD_REC_BUF_LEN	0x33	/* Invalid receive buffer length */
#define	OPEN_BAD_XMIT_BUF_LEN	0x43	/* Invalid transmit buffer length */

/* Bit definitions of ISRA High Byte, (Adapter Status)  */
#define PARITY_ERROR	0x80	/* Parity error on the adapter's internal bus */
#define	TIMER_STAT	0x40	/* A Timer Control Reg. has an interrupt */
#define	ACCESS_STAT	0x20	/* Shared RAM or MMIO access violation */
#define	DEADMAN_TIMER	0x10	/* The deadman timer has expired */
#define PROCESSOR_CK	0x08	/* Adapter Processor Check */
#define	H_INT_MASK	0x02	/* When on, no adapter hardware interrupts */
#define	S_INT_MASK	0x01	/* When on, no adapter software interrupts */

/* Bit definitions of ISRA Low Byte, (Used by PC to interrupt adapter) */
#define XMIT_REQ	0x40	/* Transmit frame in fast path transmit buf */
#define	CMD_IN_SRB	0x20	/* Inform adapter of command in SRB */
#define	RESP_IN_ASB	0x10	/* Inform adapter of response in ASB */
#define	SRB_FREE	0x08	/* Inform PC when SRB is FREE */
#define	ASB_FREE	0x04	/* Inform PC when ASB is FREE */
#define	ARB_FREE	0x02	/* Inform adapter ARB is FREE */
#define	SSB_FREE	0x01	/* Inform adapter SSB is FREE */

/* Bit definitions of ISRP High Byte, (PC interrupts and interrupt control) */
#define	NMI_INT_CTL	0x80	/* 1 = all interrupts to PC interrupt level */
				/* 0 = error and timer interrupts to PC NMI */
#define	INT_ENABLE	0x40	/* Allow adapter to interrupt the PC */
#define	TCR_INT		0x10	/* Timer Control Reg. has interrupt for PC */
#define	ERR_INT		0x08	/* Adap machine check, deadman timer, overrun */
#define	ACCESS_INT	0x04	/* Shared RAM or MMIO access violation */
#define	SHARED_INT_BLK	0x02	/* Shared interrupt blocked */
#define	PRIM_ALT_ADDR	0x01	/* 0 = primary adapter address */
				/* 1 = alternate adapter address */

/* Bit definitions of ISRP Low Byte, (PC interrupts) */
#define	ADAP_CHK_INT	0x40	/* The adapter has an unrecoverable error */
#define	SRB_RESP_INT	0x20	/* Adapter has placed a response in the SRB */
#define	ASB_FREE_INT	0x10	/* Adapter has read response in ARB */
#define	ARB_CMD_INT	0x08	/* ARB has command for PC to act on */
#define	SSB_RESP_INT	0x04	/* SSB has response to previous SRB command */
#define XMIT_COMPLETE	0x02	/* Fast path transmit frame complete */


/* Constants for Token-Ring physical header */
#define	DLC_HDR_LEN	0x3	/* Length of DLC header */
#define	SNAP_LENGTH     0x05	/* SNAP field length */
				/* protocol id = 3 bytes */
				/* ethertype = 2 bytes */
#define HDR_LNGTH_NOROUTE 14    /* length of header with no route info */
#define SKIP_DSAP_SSAP    0x02  /* length of dsap and ssap in llc frame */
#define TR_MAX_LINK_HDR	46	/* max length of link header with route info */

/* SAP DLC SRB commands (page 6-50 Token Ring Tech. Ref.) */
#define DLC_RESET		0x14
#define DLC_OPEN_SAP		0x15    /* activate service access point */
#define DLC_CLOSE_SAP		0x16	/* de-activate SAP */
#define DLC_REALLOCATE		0x17
#define DLC_OPEN_STATION	0x19
#define DLC_CLOSE_STATION	0x1a
#define DLC_CONNECT_STATION	0x1b
#define DLC_MODIFY		0x1c
#define DLC_FLOW_CONTROL	0x1d
#define DLC_STATISTICS		0x1e


/* ARB RING STATUS CHANGE */
#define SIGNAL_LOSS	0x8000	/* signal loss */
#define HARD_ERR	0x4000	/* beacon frames sent */
#define SOFT_ERR   	0x2000  /* soft error */
#define LOBE_FAULT 	0x0800  /* lobe wire fault */
#define LOG_OFLOW	0x0080	/* adapter error log counter overflow */
#define SINGLE_STATION	0x0040	/* single station on ring */