summaryrefslogtreecommitdiffstats
path: root/drivers/net/dgrs_bcomm.h
blob: ae94bd2030738144110e2d946a23ed88aa927cdc (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
/*
 * The bios low-memory structure
 *
 * Some of the variables in here can be used to set parameters that
 * are stored in NVRAM and will retain their old values the next time
 * the card is brought up.  To use the values stored in NVRAM, the
 * parameter should be set to "all ones".  This tells the firmware to
 * use the NVRAM value or a suitable default.  The value that is used
 * will be stored back into this structure by the firmware.  If the
 * value of the variable is not "all ones", then that value will be
 * used and will be stored into NVRAM if it isn't already there.
 * The variables this applies to are the following:
 *	Variable	Set to:		Gets default of:
 *	bc_hashexpire	-1		300	(5 minutes)
 *	bc_spantree	-1		1	(spanning tree on)
 *	bc_ipaddr	FF:FF:FF:FF	0	(no IP address)
 *	bc_ipxnet	FF:FF:FF:FF	0	(no IPX net)
 *
 * Some variables MUST have their value set after the firmware
 * is loaded onto the board, but before the processor is released.
 * These are:
 *	bc_host		0 means no host "port", run as standalone switch.
 *			1 means there is a host "port" (normal).
 *	bc_nowait
 *	bc_hostarea_len
 *	bc_filter_len
 *			
 */
BEGIN_STRUCT(bios_comm)
	S4(ulong, bc_intflag)	/* Count of all interrupts */
	S4(ulong, bc_lbolt)	/* Count of timer interrupts */
	S4(ulong, bc_maincnt)	/* Count of main loops */
	S4(ulong, bc_hashcnt)	/* Count of entries in hash table */
	S4A(ulong, bc_cnt, 8)	/* Misc counters, for debugging */
	S4A(ulong, bc_flag, 8)	/* Misc flags, for debugging */
	S4(ulong, bc_memsize)	/* Size of memory */
	S4(ulong, bc_dcache)	/* Size of working dcache */
	S4(ulong, bc_icache)	/* Size of working icache */
	S4(long, bc_status)	/* Firmware status */
	S1A(char, bc_file, 8)	/* File name of assertion failure */
	S4(ulong, bc_line)	/* Line # of assertion failure */
	S4(uchar *, bc_ramstart)
	S4(uchar *, bc_ramend)
	S4(uchar *, bc_heapstart) /* Start of heap (end of loaded memory) */
	S4(uchar *, bc_heapend)	/* End of heap */

	/* Configurable Parameters */
	S4(long, bc_host)	/* 1=Host Port, 0=No Host Port, -1=Test Mode */
	S4(long, bc_nowait)	/* Don't wait for 2host circ buffer to empty*/
	S4(long, bc_150ohm)	/* 0 == 100 ohm UTP, 1 == 150 ohm STP */
	S4(long, bc_squelch)	/* 0 == normal squelch, 1 == reduced squelch */
	S4(ulong, bc_hashexpire) /* Expiry time in seconds for hash table */
	S4(long, bc_spantree)	/* 1 == enable IEEE spanning tree */

	S2A(ushort, bc_eaddr, 3) /* New ether address */
	S2(ushort, bc_dummy1)	/* padding for DOS compilers */

	/* Various debugging aids */
	S4(long, bc_debug)	/* Debugging is turned on */
	S4(long, bc_spew)	/* Spew data on port 4 for bs_spew seconds */
	S4(long, bc_spewlen)	/* Length of spewed data packets */
	S4(long, bc_maxrfd)	/* If != 0, max number of RFD's to allocate */
	S4(long, bc_maxrbd)	/* If != 0, max number of RBD's to allocate */

	/* Circular buffers for messages to/from host */
	S4(ulong, bc_2host_head)
	S4(ulong, bc_2host_tail)
	S4(ulong, bc_2host_mask)
	S1A(char, bc_2host, 0x200)	/* Circ buff to host */

	S4(ulong, bc_2idt_head)
	S4(ulong, bc_2idt_tail)
	S4(ulong, bc_2idt_mask)
	S1A(char, bc_2idt, 0x200)	/* Circ buff to idt */

	/* Pointers to structures for driver access */
	S4(uchar *, bc_port)	/* pointer to Port[] structures */
	S4(long, bc_nports)	/* Number of ports */
	S4(long, bc_portlen)	/* sizeof(PORT) */
	S4(uchar *, bc_hash)	/* Pointer to hash table */
	S4(long, bc_hashlen)	/* sizeof(Table) */

	/* SNMP agent addresses */
	S1A(uchar, bc_ipaddr, 4) /* IP address for SNMP */
	S1A(uchar, bc_ipxnet, 4) /* IPX net address for SNMP */

	S4(long, bc_nohostintr) /* Do not cause periodic host interrupts */

	S4(uchar *, bc_dmaaddr) /* Physical addr of host DMA buf for diags */
	S4(ulong, bc_dmalen)	/* Length of DMA buffer 0..2048 */

	/*
	 *	Board memory allocated on startup for use by host, usually
	 *	for the purposes of creating DMA chain descriptors.  The
	 *	"len" must be set before the processor is released.  The
	 *	address of the area is returned in bc_hostarea.  The area
	 *	is guaranteed to be aligned on a 16 byte boundary.
	 */
	S4(ulong, bc_hostarea_len)	/* RW: Number of bytes to allocate */
	S4(uchar *, bc_hostarea)	/* RO: Address of allocated memory */

	/*
	 *	Variables for communicating filters into the board
	 */
	S4(ulong *, bc_filter_area)	/* RO: Space to put filter into */
	S4(ulong, bc_filter_area_len)	/* RO: Length of area, in bytes */
	S4(long, bc_filter_cmd)		/* RW: Filter command, see below */
	S4(ulong, bc_filter_len)	/* RW: Actual length of filter */
	S4(ulong, bc_filter_port)	/* RW: Port # for filter 0..6 */
	S4(ulong, bc_filter_num)	/* RW: Filter #, 0=input, 1=output */

	S4A(long, bc_spare, 3) /* spares */
END_STRUCT(bios_comm)

#define	bc	VMO(struct bios_comm, 0xa3000100)

/*
 *	bc_status values
 */
#define	BC_INIT	0
#define	BC_RUN	100

/*
 *	Values for spew (debugging)
 */
#define	BC_SPEW_ENABLE	0x80000000

/*
 *	filter commands
 */
#define	BC_FILTER_ERR	-1
#define	BC_FILTER_OK	0
#define	BC_FILTER_SET	1
#define	BC_FILTER_CLR	2