|
@@ -1,307 +0,0 @@
|
1
|
|
-
|
2
|
|
- Instructions for use of the 3C90X driver for EtherBoot
|
3
|
|
-
|
4
|
|
- Original 3C905B support by:
|
5
|
|
- Greg Beeley (Greg.Beeley@LightSys.org),
|
6
|
|
- LightSys Technology Services, Inc.
|
7
|
|
- February 11, 1999
|
8
|
|
-
|
9
|
|
- Updates for 3C90X family by:
|
10
|
|
- Steve Smith (steve.smith@juno.com)
|
11
|
|
- October 1, 1999
|
12
|
|
-
|
13
|
|
- Minor documentation updates by
|
14
|
|
- Greg Beeley (Greg.Beeley@LightSys.org)
|
15
|
|
- March 29, 2000
|
16
|
|
-
|
17
|
|
--------------------------------------------------------------------------------
|
18
|
|
-
|
19
|
|
-I OVERVIEW
|
20
|
|
-
|
21
|
|
- The 3c90X series ethernet cards are a group of high-performance busmaster
|
22
|
|
- DMA cards from 3Com. This particular driver supports both the 3c90x and
|
23
|
|
- the 3c90xB revision cards. 3C90xC family support has been tested to some
|
24
|
|
- degree but not extensively.
|
25
|
|
-
|
26
|
|
- Here's the licensing information:
|
27
|
|
-
|
28
|
|
- This program Copyright (C) 1999 LightSys Technology Services, Inc.
|
29
|
|
- Portions Copyright (C) 1999 Steve Smith.
|
30
|
|
-
|
31
|
|
- This program may be re-distributed in source or binary form, modified,
|
32
|
|
- sold, or copied for any purpose, provided that the above copyright message
|
33
|
|
- and this text are included with all source copies or derivative works, and
|
34
|
|
- provided that the above copyright message and this text are included in the
|
35
|
|
- documentation of any binary-only distributions. This program is
|
36
|
|
- distributed WITHOUT ANY WARRANTY, without even the warranty of FITNESS FOR
|
37
|
|
- A PARTICULAR PURPOSE or MERCHANTABILITY. Please read the associated
|
38
|
|
- documentation "3c90x.txt" before compiling and using this driver.
|
39
|
|
-
|
40
|
|
-
|
41
|
|
-II FLASH PROMS
|
42
|
|
-
|
43
|
|
- The 3c90xB cards, according to the 3Com documentation, only accept the
|
44
|
|
- following flash memory chips:
|
45
|
|
-
|
46
|
|
- Atmel AT29C512 (64 kilobyte)
|
47
|
|
- Atmel AT29C010 (128 kilobyte)
|
48
|
|
-
|
49
|
|
- The 3c90x cards, according to the 3Com documentation, accept the
|
50
|
|
- following flash memory chips capacities:
|
51
|
|
-
|
52
|
|
- 64 kb (8 kB)
|
53
|
|
- 128 kb (16 kB)
|
54
|
|
- 256 kb (32 kB) and
|
55
|
|
- 512 kb (64 kB)
|
56
|
|
-
|
57
|
|
- Atmel AT29C512 (64 kilobyte) chips are specifically listed for both
|
58
|
|
- adapters, but flashing on the 3c905b cards would only be supported
|
59
|
|
- through the Atmel parts. Any device, of the supported size, should
|
60
|
|
- be supported when programmed by a dedicated PROM programmer (e.g.
|
61
|
|
- not the card).
|
62
|
|
-
|
63
|
|
- To use this driver in such a PROM, visit Atmel's web site and download
|
64
|
|
- their .PDF file containing a list of their distributors. Contact the
|
65
|
|
- distributors for pricing information. The prices are quite reasonable
|
66
|
|
- (about $3 US each for the 64 kB part), and are comparable to what one would
|
67
|
|
- expect for similarly sized standard EPROMs. And, the flash chips are much
|
68
|
|
- easier to work with, as they don't need to be UV-erased to be reprogrammed.
|
69
|
|
- The 3C905B card actually provides a method to program the flash memory
|
70
|
|
- while it is resident on board the card itself; if someone would like to
|
71
|
|
- write a small DOS program to do the programming, I can provide the
|
72
|
|
- information about the registers and so forth.
|
73
|
|
-
|
74
|
|
- A utility program, 3c90xutil, is provided with Etherboot in the 'contrib'
|
75
|
|
- directory that allows for the on-board flashing of the ROM while Linux
|
76
|
|
- is running. The program has been successfully used under Linux, but I
|
77
|
|
- have heard problem reports of its use under FreeBSD. Anyone willing to
|
78
|
|
- make it work under FreeBSD is more than welcome to do so!
|
79
|
|
-
|
80
|
|
- You also have the option of using EPROM chips - the 3C905B-TX-NM has been
|
81
|
|
- successfully tested with 27C256 (32kB) and 27C512 (64kB) chips with a
|
82
|
|
- specified access time of 100ns and faster.
|
83
|
|
-
|
84
|
|
-
|
85
|
|
-III GENERAL USE
|
86
|
|
-
|
87
|
|
- Normally, the basic procedure for using this driver is as follows:
|
88
|
|
-
|
89
|
|
- 1. Run the 3c90xcfg program on the driver diskette to enable the
|
90
|
|
- boot PROM and set it to 64k or 128k, as appropriate.
|
91
|
|
- 2. Build the appropriate 3c90x.fd0 or 3c90x.fd0 floppy image with
|
92
|
|
- possibly the value CFG_3C90X_XCVR defined to the transceiver type that
|
93
|
|
- you want to use (i.e., 10/100 rj45, AUI, coax, MII).
|
94
|
|
- 3. Run the floppy image on the PC to be network booted, to get
|
95
|
|
- it configured, and to verify that it will boot properly.
|
96
|
|
- 4. Build the 3c90x.rom or 3c90x.lzrom PROM image and program
|
97
|
|
- it into the flash or EPROM memory chip.
|
98
|
|
- 5. Put the PROM in the ethernet card, boot and enable 'boot from
|
99
|
|
- network first' in the system BIOS, save and reboot.
|
100
|
|
-
|
101
|
|
- Here are some issues to be aware of:
|
102
|
|
-
|
103
|
|
- 1. If you experience crashes or different behaviour when using the
|
104
|
|
- boot PROM, add the setting CFG_3C90X_BOOTROM_FIX and go through the
|
105
|
|
- steps 2-5 above. This works around a bug in some 3c905B cards (see
|
106
|
|
- below), but has some side-effects which may not be desirable.
|
107
|
|
- Please note that you have to boot off a floppy (not PROM!) once for
|
108
|
|
- this fix to take effect.
|
109
|
|
- 2. The possible need to manually set the CFG_3C90X_XCVR value to
|
110
|
|
- configure the transceiver type. Values are listed below.
|
111
|
|
- 3. The possible need to define CFG_3C90X_PRESERVE_XCVR for use in
|
112
|
|
- operating systems that don't intelligently determine the
|
113
|
|
- transceiver type.
|
114
|
|
-
|
115
|
|
- Some things that are on the 'To-Do' list, perhaps for me, but perhaps
|
116
|
|
- for any other volunteers out there:
|
117
|
|
-
|
118
|
|
- 1. Extend the driver to fully implement the auto-select
|
119
|
|
- algorithm if the card has multiple media ports.
|
120
|
|
- 2. Fix any bugs in the code <grin>....
|
121
|
|
- 3. Extend the driver to support the 3c905c revision cards
|
122
|
|
- "officially". Right now, the support has been primarily empirical
|
123
|
|
- and not based on 3c905C documentation.
|
124
|
|
-
|
125
|
|
- Now for the details....
|
126
|
|
-
|
127
|
|
- This driver has been tested on roughly 300 systems. The main two
|
128
|
|
- configuration issues to contend with are:
|
129
|
|
-
|
130
|
|
- 1. Ensure that PCI Busmastering is enabled for the adapter (configured
|
131
|
|
- in the CMOS setup)
|
132
|
|
- 2. Some systems don't work properly with the adapter when plug and
|
133
|
|
- play OS is enabled; I always set it to "No" or "Disabled" -- this makes
|
134
|
|
- it easier and really doesn't adversely affect anything.
|
135
|
|
-
|
136
|
|
- Roughly 95% of the systems worked when configured properly. A few
|
137
|
|
- have issues with booting locally once the boot PROM has been installed
|
138
|
|
- (this number has been less than 2%). Other configuration issues that
|
139
|
|
- to check:
|
140
|
|
-
|
141
|
|
- 1. Newer BIOS's actually work correctly with the network boot order.
|
142
|
|
- Set the network adapter first. Most older BIOS's automatically go to
|
143
|
|
- the network boot PROM first.
|
144
|
|
- 2. For systems where the adapter was already installed and is just
|
145
|
|
- having the PROM installed, try setting the "reset configuration data"
|
146
|
|
- to yes in the CMOS setup if the BIOS isn't seen at first. If your BIOS
|
147
|
|
- doesn't have this option, remove the card, start the system, shut down,
|
148
|
|
- install the card and restart (or switch to a different PCI slot).
|
149
|
|
- 3. Make sure the CMOS security settings aren't preventing a boot.
|
150
|
|
-
|
151
|
|
- The 3c905B cards have a significant 'bug' that relates to the flash prom:
|
152
|
|
- unless the card is set internally to the MII transceiver, it will only
|
153
|
|
- read the first 8k of the PROM image. Don't ask why -- it seems really
|
154
|
|
- obscure, but it has to do with the way they mux'd the address lines
|
155
|
|
- from the PCI bus to the ROM. Unfortunately, most of us are not using
|
156
|
|
- MII transceivers, and even the .lzrom image ends up being just a little
|
157
|
|
- bit larger than 8k. Note that the workaround for this is disabled by
|
158
|
|
- default, because the Windows NT 4.0 driver does not like it (no packets
|
159
|
|
- are transmitted).
|
160
|
|
-
|
161
|
|
- So, the solution that I've used is to internally set the card's nvram
|
162
|
|
- configuration to use MII when it boots. The 3c905b driver does this
|
163
|
|
- automatically. This way, the 16k prom image can be loaded into memory,
|
164
|
|
- and then the 3c905b driver can set the temporary configuration of the
|
165
|
|
- card to an appropriate value, either configurable by the user or chosen
|
166
|
|
- by the driver.
|
167
|
|
-
|
168
|
|
- To enable the 3c905B bugfix, which is necessary for these cards when
|
169
|
|
- booting from the Flash ROM, define -DCFG_3C90X_BOOTROM_FIX when building,
|
170
|
|
- create a floppy image and boot it once.
|
171
|
|
- Thereafter, the card should accept the larger prom image.
|
172
|
|
-
|
173
|
|
- The driver should choose an appropriate transceiver on the card. However,
|
174
|
|
- if it doesn't on your card or if you need to, for instance, set your
|
175
|
|
- card to 10mbps when connected to an unmanaged 10/100 hub, you can specify
|
176
|
|
- which transceiver you want to use. To do this, build the 3c905b.fd0
|
177
|
|
- image with -DCFG_3C90X_XCVR=x, where 'x' is one of the following
|
178
|
|
- values:
|
179
|
|
-
|
180
|
|
- 0 10Base-T
|
181
|
|
- 1 10mbps AUI
|
182
|
|
- 3 10Base-2 (thinnet/coax)
|
183
|
|
- 4 100Base-TX
|
184
|
|
- 5 100Base-FX
|
185
|
|
- 6 MII
|
186
|
|
- 8 Auto-negotiation 10Base-T / 100Base-TX (usually the default)
|
187
|
|
- 9 MII External MAC Mode
|
188
|
|
- 255 Allow driver to choose an 'appropriate' media port.
|
189
|
|
-
|
190
|
|
- Then proceed from step 2 in the above 'general use' instructions. The
|
191
|
|
- .rom image can be built with CFG_3C90X_XCVR set to a value, but you
|
192
|
|
- normally don't want to do this, since it is easier to change the
|
193
|
|
- transceiver type by rebuilding a new floppy, changing the BIOS to floppy
|
194
|
|
- boot, booting, and then changing the BIOS back to network boot. If
|
195
|
|
- CFG_3C90X_XCVR is not set in a particular build, it just uses the
|
196
|
|
- current configuration (either its 'best guess' or whatever the stored
|
197
|
|
- CFG_3C90X_XCVR value was from the last time it was set).
|
198
|
|
-
|
199
|
|
- [[ Note for the more technically inclined: The CFG_3C90X_XCVR value is
|
200
|
|
- programmed into a register in the card's NVRAM that was reserved for
|
201
|
|
- LanWorks PROM images to use. When the driver boots, the card comes
|
202
|
|
- up in MII mode, and the driver checks the LanWorks register to find
|
203
|
|
- out if the user specified a transceiver type. If it finds that
|
204
|
|
- information, it uses that, otherwise it picks a transceiver that the
|
205
|
|
- card has based on the 3c905b's MediaOptions register. This driver isn't
|
206
|
|
- quite smart enough to always determine which media port is actually
|
207
|
|
- _connected_; maybe someone else would like to take on that task (it
|
208
|
|
- actually involves sending a self-directed packet and seeing if it
|
209
|
|
- comes back. IF it does, that port is connected). ]]
|
210
|
|
-
|
211
|
|
- Another issue to keep in mind is that it is possible that some OS'es
|
212
|
|
- might not be happy with the way I've handled the PROM-image hack with
|
213
|
|
- setting MII mode on bootup. Linux 2.0.35 does not have this problem.
|
214
|
|
- Behavior of other systems may vary. The 3com documentation specifically
|
215
|
|
- says that, at least with the card that I have, the device driver in the
|
216
|
|
- OS should auto-select the media port, so other drivers should work fine
|
217
|
|
- with this 'hack'. However, if yours doesn't seem to, you can try defining
|
218
|
|
- CFG_3C90X_PRESERVE_XCVR when building to cause Etherboot to keep the
|
219
|
|
- working setting (that allowed the bootp/tftp process) across the eth_reset
|
220
|
|
- operation.
|
221
|
|
-
|
222
|
|
-
|
223
|
|
-IV FOR DEVELOPERS....
|
224
|
|
-
|
225
|
|
- If you would like to fix/extend/etc. this driver, feel free to do so; just
|
226
|
|
- be sure you can test the modified version on the 3c905B-TX cards that the
|
227
|
|
- driver was originally designed for. This section of this document gives
|
228
|
|
- some information that might be relevant to a programmer.
|
229
|
|
-
|
230
|
|
- A. Main Entry Point
|
231
|
|
-
|
232
|
|
- a3c90x_probe is the main entry point for this driver. It is referred
|
233
|
|
- to in an array in 'config.c'.
|
234
|
|
-
|
235
|
|
- B. Other Important Functions
|
236
|
|
-
|
237
|
|
- The functions a3c90x_transmit, a3c90x_poll, a3c90x_reset, and
|
238
|
|
- a3c90x_disable are static functions that EtherBoot finds out about
|
239
|
|
- as a result of a3c90x_probe setting entries in the nic structure
|
240
|
|
- for them. The EtherBoot framework does not use interrupts. It is
|
241
|
|
- polled. All transmit and receive operations are initiated by the
|
242
|
|
- etherboot framework, not by an interrupt or by the driver.
|
243
|
|
-
|
244
|
|
- C. Internal Functions
|
245
|
|
-
|
246
|
|
- The following functions are internal to the driver:
|
247
|
|
-
|
248
|
|
- a3c90x_internal_IssueCommand - sends a command to the 3c905b card.
|
249
|
|
- a3c90x_internal_SetWindow - shifts between one of eight register
|
250
|
|
- windows onboard the 3c90x. The bottom 16 bytes of the card's
|
251
|
|
- I/O space are multiplexed among 128 bytes, only 16 of which are
|
252
|
|
- visible at any one time. This SetWindow function selects one of
|
253
|
|
- the eight sets.
|
254
|
|
- a3c90x_internal_ReadEeprom - reads a word (16 bits) from the
|
255
|
|
- card's onboard nvram. This is NOT the BIOS boot rom. This is
|
256
|
|
- where the card stores such things as its hardware address.
|
257
|
|
- a3c90x_internal_WriteEeprom - writes a word (16 bits) to the
|
258
|
|
- card's nvram, and recomputes the eeprom checksum.
|
259
|
|
- a3c90x_internal_WriteEepromWord - writes a word (16 bits) to the
|
260
|
|
- card's nvram. Used by the above routine.
|
261
|
|
- a3c90x_internal_WriteEepromWord - writes a word (16 bits) to the
|
262
|
|
- card's nvram. Used by the above routine.
|
263
|
|
-
|
264
|
|
- D. Globals
|
265
|
|
-
|
266
|
|
- All global variables are inside a global structure named INF_3C90X.
|
267
|
|
- So, wherever you see that structure referenced, you know the variable
|
268
|
|
- is a global. Just keeps things a little neater.
|
269
|
|
-
|
270
|
|
- E. Enumerations
|
271
|
|
-
|
272
|
|
- There are quite a few enumerated type definitions for registers and
|
273
|
|
- so forth, many for registers that I didn't even touch in the driver.
|
274
|
|
- Register types start with 'reg', window numbers (for SetWindow)
|
275
|
|
- start with 'win', and commands (for IssueCommand) start with 'cmd'.
|
276
|
|
- Register offsets also include an indication in the name as to the
|
277
|
|
- size of the register (_b = byte, _w = word, _l = long), and which
|
278
|
|
- window the register is in, if it is windowed (0-7).
|
279
|
|
-
|
280
|
|
- F. Why the 'a3c90x' name?
|
281
|
|
-
|
282
|
|
- I had to come up with a letter at the beginning of all of the
|
283
|
|
- identifiers, since 3com so conveniently had their name start with a
|
284
|
|
- number. Another driver used 't' (for 'three'?); I chose 'a' for
|
285
|
|
- no reason at all.
|
286
|
|
-
|
287
|
|
-Addendum by Jorge L. deLyra <delyra@latt.if.usp.br>, 22Nov2000 re
|
288
|
|
-working around the 3C905 hardware bug mentioned above:
|
289
|
|
-
|
290
|
|
-Use this floppy to fix any 3COM model 3C905B PCI 10/100 Ethernet cards
|
291
|
|
-that fail to load and run the boot program the first time around. If
|
292
|
|
-they have a "Lucent" rather than a "Broadcom" chipset these cards have
|
293
|
|
-a configuration bug that causes a hang when trying to load the boot
|
294
|
|
-program from the PROM, if you try to use them right out of the box.
|
295
|
|
-
|
296
|
|
-The boot program in this floppy is the file named 3c905b-tpo100.rom
|
297
|
|
-from Etherboot version 4.6.10, compiled with the bugfix parameter
|
298
|
|
-
|
299
|
|
- CFG_3C90X_BOOTROM_FIX
|
300
|
|
-
|
301
|
|
-You have to take the chip off the card and boot the system once using
|
302
|
|
-this floppy. Once loaded from the floppy, the boot program will access
|
303
|
|
-the card and change some setting in it, correcting the problem. After
|
304
|
|
-that you may use either this boot program or the normal one, compiled
|
305
|
|
-without this bugfix parameter, to boot the machine from the PROM chip.
|
306
|
|
-
|
307
|
|
-[Any recent Etherboot version should do, not just 4.6.10 - Ed.]
|