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
|
/* $NetBSD: if_aereg.h,v 1.2 1995/08/18 15:53:32 chopps Exp $ */
/*
* Copyright (c) 1995 Bernd Ernesti and Klaus Burkert. All rights reserved.
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Ralph Campbell and Rick Macklem.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Bernd Ernesti, by Klaus
* Burkert, by Michael van Elst, and by the University of California,
* Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)if_lereg.h 8.1 (Berkeley) 6/10/93
*
* This is based on the original LANCE files, as the PCnet-ISA used on
* the Ariadne is a LANCE-descendant optimized for the PC-ISA bus.
* This causes some modifications, all data that is to go into registers
* or to structures (buffer-descriptors, init-block) has to be
* byte-swapped. In addition ALL write accesses to the board have to be
* WORD or LONG, BYTE-access is prohibited!!
*/
#define ETHER_MAX_LEN 1518
#define ETHER_MIN_LEN 64
#define AERBUF 16 /* 16 receive buffers */
#define AERBUFLOG2 4
#define AETBUF 4 /* 4 transmit buffers */
#define AETBUFLOG2 2
#define AE_RLEN (AERBUFLOG2 << 13)
#define AE_TLEN (AETBUFLOG2 << 13)
/*
* PCnet-ISA registers.
*/
struct aereg1 {
u_int16_t aer1_rdp; /* data port */
u_int16_t aer1_rap; /* register select port */
u_int16_t aer1_reset; /* reading this resets the PCnet-ISA */
u_int16_t aer1_idp; /* isa configuration port */
};
struct aereg2 {
/* init block */
u_int16_t aer2_mode; /* +0x0000 */
u_int16_t aer2_padr[3]; /* +0x0002 */
u_int16_t aer2_ladrf[4]; /* +0x0008 */
u_int16_t aer2_rdra; /* +0x0010 */
u_int16_t aer2_rlen; /* +0x0012 */
u_int16_t aer2_tdra; /* +0x0014 */
u_int16_t aer2_tlen; /* +0x0016 */
/* receive message descriptors */
struct aermd { /* +0x0018 */
u_int16_t rmd0;
u_int16_t rmd1;
int16_t rmd2;
u_int16_t rmd3;
} aer2_rmd[AERBUF];
/* transmit message descriptors */
struct aetmd { /* +0x0058 */
u_int16_t tmd0;
u_int16_t tmd1;
int16_t tmd2;
u_int16_t tmd3;
} aer2_tmd[AETBUF];
char aer2_rbuf[AERBUF][ETHER_MAX_LEN]; /* +0x0060 */
char aer2_tbuf[AETBUF][ETHER_MAX_LEN]; /* +0x2FD0 */
};
/*
* Control and status bits -- aereg1
*/
#define AE_CSR0 0x0000 /* Control and status register */
#define AE_CSR1 0x0100 /* low address of init block */
#define AE_CSR2 0x0200 /* high address of init block */
#define AE_CSR3 0x0300 /* Bus master and control */
/* Control and status register 0 (csr0) */
#define AE_SERR 0x0080 /* error summary */
#define AE_BABL 0x0040 /* transmitter timeout error */
#define AE_CERR 0x0020 /* collision */
#define AE_MISS 0x0010 /* missed a packet */
#define AE_MERR 0x0008 /* memory error */
#define AE_RINT 0x0004 /* receiver interrupt */
#define AE_TINT 0x0002 /* transmitter interrupt */
#define AE_IDON 0x0001 /* initalization done */
#define AE_INTR 0x8000 /* interrupt condition */
#define AE_INEA 0x4000 /* interrupt enable */
#define AE_RXON 0x2000 /* receiver on */
#define AE_TXON 0x1000 /* transmitter on */
#define AE_TDMD 0x0800 /* transmit demand */
#define AE_STOP 0x0400 /* disable all external activity */
#define AE_STRT 0x0200 /* enable external activity */
#define AE_INIT 0x0100 /* begin initalization */
#define AE_PROM 0x0080 /* promiscuous mode */
#define AE_MODE 0x0000
/*
* Control and status bits -- aereg2
*/
#define AE_OWN 0x0080 /* LANCE owns the packet */
#define AE_ERR 0x0040 /* error summary */
#define AE_STP 0x0002 /* start of packet */
#define AE_ENP 0x0001 /* end of packet */
#define AE_MORE 0x0010 /* multiple collisions */
#define AE_ONE 0x0008 /* single collision */
#define AE_DEF 0x0004 /* defferred transmit */
#define AE_FRAM 0x0020 /* framing error */
#define AE_OFLO 0x0010 /* overflow error */
#define AE_CRC 0x0008 /* CRC error */
#define AE_RBUFF 0x0004 /* buffer error */
/* Transmit message descriptor 3 (tmd3) */
#define AE_TBUFF 0x0080 /* buffer error */
#define AE_UFLO 0x0040 /* underflow error */
#define AE_LCOL 0x0010 /* late collision */
#define AE_LCAR 0x0008 /* loss of carrier */
#define AE_RTRY 0x0004 /* retry error */
#define AE_TDR_MASK 0xff03 /* time domain reflectometry counter */
#define SWAP(x) (((x & 0xff) << 8 ) | (( x >> 8) & 0xff))
|