* [PATCH 5/7] net: arcnet: remove ISA and PCMCIA support; modernize documentation
[not found] <20260518010739.80979-1-enelsonmoore@gmail.com>
@ 2026-05-18 1:07 ` Ethan Nelson-Moore
2026-05-18 1:07 ` [PATCH 6/7] docs: net: arcnet: remove outdated/irrelevant information; improve style Ethan Nelson-Moore
1 sibling, 0 replies; 2+ messages in thread
From: Ethan Nelson-Moore @ 2026-05-18 1:07 UTC (permalink / raw)
To: linux-doc, netdev, linux-mips
Cc: Ethan Nelson-Moore, Jonathan Corbet, Shuah Khan, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman,
Thomas Bogendoerfer, Michael Grzeschik, Andrew Lunn,
Borislav Petkov (AMD), Andrew Morton, Eric Biggers, Li RongQing,
Paul E. McKenney, Greg Kroah-Hartman, Mingyu Wang,
Theodore Ts'o
While ARCnet is still used in industrial environments, and cards are
still manufactured, it is unlikely anyone is still using it with ISA
and PCMCIA cards. Reduce future maintenance burden by removing all ISA
and PCMCIA ARCnet drivers and documentation related to them. Update
instructions for loading modules and passing parameters to work on
modern kernels and with the com20020_pci driver. Also take the
opportunity to document the rest of the module parameters, correct a
file path in Documentation/networking/arcnet.rst, and change a
reference to /etc/rc.inet1, which no longer exists, to refer to
ifconfig.
Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
---
.../admin-guide/kernel-parameters.txt | 14 -
Documentation/networking/arcnet-hardware.rst | 2943 +----------------
Documentation/networking/arcnet.rst | 166 +-
arch/mips/configs/mtx1_defconfig | 4 -
drivers/net/arcnet/Kconfig | 52 +-
drivers/net/arcnet/Makefile | 5 -
drivers/net/arcnet/arc-rimi.c | 386 ---
drivers/net/arcnet/com20020-isa.c | 230 --
drivers/net/arcnet/com20020.c | 4 +-
drivers/net/arcnet/com20020_cs.c | 330 --
drivers/net/arcnet/com90io.c | 427 ---
drivers/net/arcnet/com90xx.c | 716 ----
12 files changed, 37 insertions(+), 5240 deletions(-)
delete mode 100644 drivers/net/arcnet/arc-rimi.c
delete mode 100644 drivers/net/arcnet/com20020-isa.c
delete mode 100644 drivers/net/arcnet/com20020_cs.c
delete mode 100644 drivers/net/arcnet/com90io.c
delete mode 100644 drivers/net/arcnet/com90xx.c
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 7834ee927310..063c11ca33e5 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -558,9 +558,6 @@ Kernel parameters
1 -- enable.
Default value is set via kernel config option.
- arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
- Format: <io>,<irq>,<nodeID>
-
arm64.no32bit_el0 [ARM64] Unconditionally disable the execution of
32 bit applications.
@@ -911,17 +908,6 @@ Kernel parameters
Sets the size of memory pool for coherent, atomic dma
allocations, by default set to 256K.
- com20020= [HW,NET] ARCnet - COM20020 chipset
- Format:
- <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
-
- com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers)
- Format: <io>[,<irq>]
-
- com90xx= [HW,NET]
- ARCnet - COM90xx chipset (memory-mapped buffers)
- Format: <io>[,<irq>[,<memstart>]]
-
condev= [HW,S390] console device
conmode=
diff --git a/Documentation/networking/arcnet-hardware.rst b/Documentation/networking/arcnet-hardware.rst
index 20e5075d0d0e..17450e8e6ca7 100644
--- a/Documentation/networking/arcnet-hardware.rst
+++ b/Documentation/networking/arcnet-hardware.rst
@@ -14,10 +14,9 @@ ARCnet Hardware
of the kernel sources. Ideas?
Because so many people (myself included) seem to have obtained ARCnet cards
-without manuals, this file contains a quick introduction to ARCnet hardware,
-some cabling tips, and a listing of all jumper settings I can find. If you
-have any settings for your particular card, and/or any other information you
-have, do not hesitate to :ref:`email to netdev <arcnet-netdev>`.
+without manuals, this file contains a quick introduction to ARCnet hardware
+and some cabling tips. If you have any other information, do not hesitate to
+:ref:`send an email to netdev <arcnet-netdev>`.
Introduction to ARCnet
@@ -264,95 +263,13 @@ of a TP cable between two cards/hubs is 650 meters.
Setting the Jumpers
===================
-All ARCnet cards should have a total of four or five different settings:
-
- - the I/O address: this is the "port" your ARCnet card is on. Probed
- values in the Linux ARCnet driver are only from 0x200 through 0x3F0. (If
- your card has additional ones, which is possible, please tell me.) This
- should not be the same as any other device on your system. According to
- a doc I got from Novell, MS Windows prefers values of 0x300 or more,
- eating net connections on my system (at least) otherwise. My guess is
- this may be because, if your card is at 0x2E0, probing for a serial port
- at 0x2E8 will reset the card and probably mess things up royally.
-
- - Avery's favourite: 0x300.
-
- - the IRQ: on 8-bit cards, it might be 2 (9), 3, 4, 5, or 7.
- on 16-bit cards, it might be 2 (9), 3, 4, 5, 7, or 10-15.
-
- Make sure this is different from any other card on your system. Note
- that IRQ2 is the same as IRQ9, as far as Linux is concerned. You can
- "cat /proc/interrupts" for a somewhat complete list of which ones are in
- use at any given time. Here is a list of common usages from Vojtech
- Pavlik <vojtech@suse.cz>:
-
- ("Not on bus" means there is no way for a card to generate this
- interrupt)
-
- ====== =========================================================
- IRQ 0 Timer 0 (Not on bus)
- IRQ 1 Keyboard (Not on bus)
- IRQ 2 IRQ Controller 2 (Not on bus, nor does interrupt the CPU)
- IRQ 3 COM2
- IRQ 4 COM1
- IRQ 5 FREE (LPT2 if you have it; sometimes COM3; maybe PLIP)
- IRQ 6 Floppy disk controller
- IRQ 7 FREE (LPT1 if you don't use the polling driver; PLIP)
- IRQ 8 Realtime Clock Interrupt (Not on bus)
- IRQ 9 FREE (VGA vertical sync interrupt if enabled)
- IRQ 10 FREE
- IRQ 11 FREE
- IRQ 12 FREE
- IRQ 13 Numeric Coprocessor (Not on bus)
- IRQ 14 Fixed Disk Controller
- IRQ 15 FREE (Fixed Disk Controller 2 if you have it)
- ====== =========================================================
-
-
- .. note::
-
- IRQ 9 is used on some video cards for the "vertical retrace"
- interrupt. This interrupt would have been handy for things like
- video games, as it occurs exactly once per screen refresh, but
- unfortunately IBM cancelled this feature starting with the original
- VGA and thus many VGA/SVGA cards do not support it. For this
- reason, no modern software uses this interrupt and it can almost
- always be safely disabled, if your video card supports it at all.
-
- If your card for some reason CANNOT disable this IRQ (usually there
- is a jumper), one solution would be to clip the printed circuit
- contact on the board: it's the fourth contact from the left on the
- back side. I take no responsibility if you try this.
-
- - Avery's favourite: IRQ2 (actually IRQ9). Watch that VGA, though.
-
- - the memory address: Unlike most cards, ARCnets use "shared memory" for
- copying buffers around. Make SURE it doesn't conflict with any other
- used memory in your system!
-
- ::
-
- A0000 - VGA graphics memory (ok if you don't have VGA)
- B0000 - Monochrome text mode
- C0000 \ One of these is your VGA BIOS - usually C0000.
- E0000 /
- F0000 - System BIOS
-
- Anything less than 0xA0000 is, well, a BAD idea since it isn't above
- 640k.
-
- - Avery's favourite: 0xD0000
-
- - the station address: Every ARCnet card has its own "unique" network
- address from 0 to 255. Unlike Ethernet, you can set this address
- yourself with a jumper or switch (or on some cards, with special
- software). Since it's only 8 bits, you can only have 254 ARCnet cards
- on a network. DON'T use 0 or 255, since these are reserved (although
- neat stuff will probably happen if you DO use them). By the way, if you
- haven't already guessed, don't set this the same as any other ARCnet on
- your network!
-
- - Avery's favourite: 3 and 4. Not that it matters.
+ - Every ARCnet card has its own "unique" network address from 0 to 255.
+ Unlike Ethernet, you can set this address yourself with a jumper or switch
+ (or on some cards, with special software). Since it's only 8 bits, you can
+ only have 254 ARCnet cards on a network. DON'T use 0 or 255, since these
+ are reserved (although neat stuff will probably happen if you DO use them).
+ By the way, if you haven't already guessed, don't set this the same as any
+ other ARCnet device on your network!
- There may be ETS1 and ETS2 settings. These may or may not make a
difference on your card (many manuals call them "reserved"), but are
@@ -390,2843 +307,3 @@ Vojtech Pavlik <vojtech@suse.cz> tells me this is what they mean:
ON Long flashes Data transfer
ON OFF Never happens (maybe when wrong ID)
=============== =============== =====================================
-
-
-The following is all the specific information people have sent me about
-their own particular ARCnet cards. It is officially a mess, and contains
-huge amounts of duplicated information. I have no time to fix it. If you
-want to, PLEASE DO! Just send me a 'diff -u' of all your changes.
-
-The model # is listed right above specifics for that card, so you should be
-able to use your text viewer's "search" function to find the entry you want.
-If you don't KNOW what kind of card you have, try looking through the
-various diagrams to see if you can tell.
-
-If your model isn't listed and/or has different settings, PLEASE PLEASE
-tell me. I had to figure mine out without the manual, and it WASN'T FUN!
-
-Even if your ARCnet model isn't listed, but has the same jumpers as another
-model that is, please e-mail me to say so.
-
-Cards Listed in this file (in this order, mostly):
-
- =============== ======================= ====
- Manufacturer Model # Bits
- =============== ======================= ====
- SMC PC100 8
- SMC PC110 8
- SMC PC120 8
- SMC PC130 8
- SMC PC270E 8
- SMC PC500 16
- SMC PC500Longboard 16
- SMC PC550Longboard 16
- SMC PC600 16
- SMC PC710 8
- SMC? LCS-8830(-T) 8/16
- Puredata PDI507 8
- CNet Tech CN120-Series 8
- CNet Tech CN160-Series 16
- Lantech? UM9065L chipset 8
- Acer 5210-003 8
- Datapoint? LAN-ARC-8 8
- Topware TA-ARC/10 8
- Thomas-Conrad 500-6242-0097 REV A 8
- Waterloo? (C)1985 Waterloo Micro. 8
- No Name -- 8/16
- No Name Taiwan R.O.C? 8
- No Name Model 9058 8
- Tiara Tiara Lancard? 8
- =============== ======================= ====
-
-
-* SMC = Standard Microsystems Corp.
-* CNet Tech = CNet Technology, Inc.
-
-Unclassified Stuff
-==================
-
- - Please send any other information you can find.
-
- - And some other stuff (more info is welcome!)::
-
- From: root@ultraworld.xs4all.nl (Timo Hilbrink)
- To: apenwarr@foxnet.net (Avery Pennarun)
- Date: Wed, 26 Oct 1994 02:10:32 +0000 (GMT)
- Reply-To: timoh@xs4all.nl
-
- [...parts deleted...]
-
- About the jumpers: On my PC130 there is one more jumper, located near the
- cable-connector and it's for changing to star or bus topology;
- closed: star - open: bus
- On the PC500 are some more jumper-pins, one block labeled with RX,PDN,TXI
- and another with ALE,LA17,LA18,LA19 these are undocumented..
-
- [...more parts deleted...]
-
- --- CUT ---
-
-Standard Microsystems Corp (SMC)
-================================
-
-PC100, PC110, PC120, PC130 (8-bit cards) and PC500, PC600 (16-bit cards)
-------------------------------------------------------------------------
-
- - mainly from Avery Pennarun <apenwarr@worldvisions.ca>. Values depicted
- are from Avery's setup.
- - special thanks to Timo Hilbrink <timoh@xs4all.nl> for noting that PC120,
- 130, 500, and 600 all have the same switches as Avery's PC100.
- PC500/600 have several extra, undocumented pins though. (?)
- - PC110 settings were verified by Stephen A. Wood <saw@cebaf.gov>
- - Also, the JP- and S-numbers probably don't match your card exactly. Try
- to find jumpers/switches with the same number of settings - it's
- probably more reliable.
-
-::
-
- JP5 [|] : : : :
- (IRQ Setting) IRQ2 IRQ3 IRQ4 IRQ5 IRQ7
- Put exactly one jumper on exactly one set of pins.
-
-
- 1 2 3 4 5 6 7 8 9 10
- S1 /----------------------------------\
- (I/O and Memory | 1 1 * 0 0 0 0 * 1 1 0 1 |
- addresses) \----------------------------------/
- |--| |--------| |--------|
- (a) (b) (m)
-
- WARNING. It's very important when setting these which way
- you're holding the card, and which way you think is '1'!
-
- If you suspect that your settings are not being made
- correctly, try reversing the direction or inverting the
- switch positions.
-
- a: The first digit of the I/O address.
- Setting Value
- ------- -----
- 00 0
- 01 1
- 10 2
- 11 3
-
- b: The second digit of the I/O address.
- Setting Value
- ------- -----
- 0000 0
- 0001 1
- 0010 2
- ... ...
- 1110 E
- 1111 F
-
- The I/O address is in the form ab0. For example, if
- a is 0x2 and b is 0xE, the address will be 0x2E0.
-
- DO NOT SET THIS LESS THAN 0x200!!!!!
-
-
- m: The first digit of the memory address.
- Setting Value
- ------- -----
- 0000 0
- 0001 1
- 0010 2
- ... ...
- 1110 E
- 1111 F
-
- The memory address is in the form m0000. For example, if
- m is D, the address will be 0xD0000.
-
- DO NOT SET THIS TO C0000, F0000, OR LESS THAN A0000!
-
- 1 2 3 4 5 6 7 8
- S2 /--------------------------\
- (Station Address) | 1 1 0 0 0 0 0 0 |
- \--------------------------/
-
- Setting Value
- ------- -----
- 00000000 00
- 10000000 01
- 01000000 02
- ...
- 01111111 FE
- 11111111 FF
-
- Note that this is binary with the digits reversed!
-
- DO NOT SET THIS TO 0 OR 255 (0xFF)!
-
-
-PC130E/PC270E (8-bit cards)
----------------------------
-
- - from Juergen Seifert <seifert@htwm.de>
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the following Original SMC Manual
-
- "Configuration Guide for ARCNET(R)-PC130E/PC270 Network
- Controller Boards Pub. # 900.044A June, 1989"
-
-ARCNET is a registered trademark of the Datapoint Corporation
-SMC is a registered trademark of the Standard Microsystems Corporation
-
-The PC130E is an enhanced version of the PC130 board, is equipped with a
-standard BNC female connector for connection to RG-62/U coax cable.
-Since this board is designed both for point-to-point connection in star
-networks and for connection to bus networks, it is downwardly compatible
-with all the other standard boards designed for coax networks (that is,
-the PC120, PC110 and PC100 star topology boards and the PC220, PC210 and
-PC200 bus topology boards).
-
-The PC270E is an enhanced version of the PC260 board, is equipped with two
-modular RJ11-type jacks for connection to twisted pair wiring.
-It can be used in a star or a daisy-chained network.
-
-::
-
- 8 7 6 5 4 3 2 1
- ________________________________________________________________
- | | S1 | |
- | |_________________| |
- | Offs|Base |I/O Addr |
- | RAM Addr | ___|
- | ___ ___ CR3 |___|
- | | \/ | CR4 |___|
- | | PROM | ___|
- | | | N | | 8
- | | SOCKET | o | | 7
- | |________| d | | 6
- | ___________________ e | | 5
- | | | A | S | 4
- | |oo| EXT2 | | d | 2 | 3
- | |oo| EXT1 | SMC | d | | 2
- | |oo| ROM | 90C63 | r |___| 1
- | |oo| IRQ7 | | |o| _____|
- | |oo| IRQ5 | | |o| | J1 |
- | |oo| IRQ4 | | STAR |_____|
- | |oo| IRQ3 | | | J2 |
- | |oo| IRQ2 |___________________| |_____|
- |___ ______________|
- | |
- |_____________________________________________|
-
-Legend::
-
- SMC 90C63 ARCNET Controller / Transceiver /Logic
- S1 1-3: I/O Base Address Select
- 4-6: Memory Base Address Select
- 7-8: RAM Offset Select
- S2 1-8: Node ID Select
- EXT Extended Timeout Select
- ROM ROM Enable Select
- STAR Selected - Star Topology (PC130E only)
- Deselected - Bus Topology (PC130E only)
- CR3/CR4 Diagnostic LEDs
- J1 BNC RG62/U Connector (PC130E only)
- J1 6-position Telephone Jack (PC270E only)
- J2 6-position Telephone Jack (PC270E only)
-
-Setting one of the switches to Off/Open means "1", On/Closed means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in group S2 are used to set the node ID.
-These switches work in a way similar to the PC100-series cards; see that
-entry for more information.
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first three switches in switch group S1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 1 2 3 | Address
- -------|--------
- 0 0 0 | 260
- 0 0 1 | 290
- 0 1 0 | 2E0 (Manufacturer's default)
- 0 1 1 | 2F0
- 1 0 0 | 300
- 1 0 1 | 350
- 1 1 0 | 380
- 1 1 1 | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer requires 2K of a 16K block of RAM. The base of this
-16K block can be located in any of eight positions.
-Switches 4-6 of switch group S1 select the Base of the 16K block.
-Within that 16K address space, the buffer may be assigned any one of four
-positions, determined by the offset, switches 7 and 8 of group S1.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 4 5 6 7 8 | Address | Address *)
- -----------|---------|-----------
- 0 0 0 0 0 | C0000 | C2000
- 0 0 0 0 1 | C0800 | C2000
- 0 0 0 1 0 | C1000 | C2000
- 0 0 0 1 1 | C1800 | C2000
- | |
- 0 0 1 0 0 | C4000 | C6000
- 0 0 1 0 1 | C4800 | C6000
- 0 0 1 1 0 | C5000 | C6000
- 0 0 1 1 1 | C5800 | C6000
- | |
- 0 1 0 0 0 | CC000 | CE000
- 0 1 0 0 1 | CC800 | CE000
- 0 1 0 1 0 | CD000 | CE000
- 0 1 0 1 1 | CD800 | CE000
- | |
- 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default)
- 0 1 1 0 1 | D0800 | D2000
- 0 1 1 1 0 | D1000 | D2000
- 0 1 1 1 1 | D1800 | D2000
- | |
- 1 0 0 0 0 | D4000 | D6000
- 1 0 0 0 1 | D4800 | D6000
- 1 0 0 1 0 | D5000 | D6000
- 1 0 0 1 1 | D5800 | D6000
- | |
- 1 0 1 0 0 | D8000 | DA000
- 1 0 1 0 1 | D8800 | DA000
- 1 0 1 1 0 | D9000 | DA000
- 1 0 1 1 1 | D9800 | DA000
- | |
- 1 1 0 0 0 | DC000 | DE000
- 1 1 0 0 1 | DC800 | DE000
- 1 1 0 1 0 | DD000 | DE000
- 1 1 0 1 1 | DD800 | DE000
- | |
- 1 1 1 0 0 | E0000 | E2000
- 1 1 1 0 1 | E0800 | E2000
- 1 1 1 1 0 | E1000 | E2000
- 1 1 1 1 1 | E1800 | E2000
-
- *) To enable the 8K Boot PROM install the jumper ROM.
- The default is jumper ROM not installed.
-
-
-Setting the Timeouts and Interrupt
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The jumpers labeled EXT1 and EXT2 are used to determine the timeout
-parameters. These two jumpers are normally left open.
-
-To select a hardware interrupt level set one (only one!) of the jumpers
-IRQ2, IRQ3, IRQ4, IRQ5, IRQ7. The Manufacturer's default is IRQ2.
-
-
-Configuring the PC130E for Star or Bus Topology
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The single jumper labeled STAR is used to configure the PC130E board for
-star or bus topology.
-When the jumper is installed, the board may be used in a star network, when
-it is removed, the board can be used in a bus topology.
-
-
-Diagnostic LEDs
-^^^^^^^^^^^^^^^
-
-Two diagnostic LEDs are visible on the rear bracket of the board.
-The green LED monitors the network activity: the red one shows the
-board activity::
-
- Green | Status Red | Status
- -------|------------------- ---------|-------------------
- on | normal activity flash/on | data transfer
- blink | reconfiguration off | no data transfer;
- off | defective board or | incorrect memory or
- | node ID is zero | I/O address
-
-
-PC500/PC550 Longboard (16-bit cards)
-------------------------------------
-
- - from Juergen Seifert <seifert@htwm.de>
-
-
- .. note::
-
- There is another Version of the PC500 called Short Version, which
- is different in hard- and software! The most important differences
- are:
-
- - The long board has no Shared memory.
- - On the long board the selection of the interrupt is done by binary
- coded switch, on the short board directly by jumper.
-
-[Avery's note: pay special attention to that: the long board HAS NO SHARED
-MEMORY. This means the current Linux-ARCnet driver can't use these cards.
-I have obtained a PC500Longboard and will be doing some experiments on it in
-the future, but don't hold your breath. Thanks again to Juergen Seifert for
-his advice about this!]
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the following Original SMC Manual
-
- "Configuration Guide for SMC ARCNET-PC500/PC550
- Series Network Controller Boards Pub. # 900.033 Rev. A
- November, 1989"
-
-ARCNET is a registered trademark of the Datapoint Corporation
-SMC is a registered trademark of the Standard Microsystems Corporation
-
-The PC500 is equipped with a standard BNC female connector for connection
-to RG-62/U coax cable.
-The board is designed both for point-to-point connection in star networks
-and for connection to bus networks.
-
-The PC550 is equipped with two modular RJ11-type jacks for connection
-to twisted pair wiring.
-It can be used in a star or a daisy-chained (BUS) network.
-
-::
-
- 1
- 0 9 8 7 6 5 4 3 2 1 6 5 4 3 2 1
- ____________________________________________________________________
- < | SW1 | | SW2 | |
- > |_____________________| |_____________| |
- < IRQ |I/O Addr |
- > ___|
- < CR4 |___|
- > CR3 |___|
- < ___|
- > N | | 8
- < o | | 7
- > d | S | 6
- < e | W | 5
- > A | 3 | 4
- < d | | 3
- > d | | 2
- < r |___| 1
- > |o| _____|
- < |o| | J1 |
- > 3 1 JP6 |_____|
- < |o|o| JP2 | J2 |
- > |o|o| |_____|
- < 4 2__ ______________|
- > | | |
- <____| |_____________________________________________|
-
-Legend::
-
- SW1 1-6: I/O Base Address Select
- 7-10: Interrupt Select
- SW2 1-6: Reserved for Future Use
- SW3 1-8: Node ID Select
- JP2 1-4: Extended Timeout Select
- JP6 Selected - Star Topology (PC500 only)
- Deselected - Bus Topology (PC500 only)
- CR3 Green Monitors Network Activity
- CR4 Red Monitors Board Activity
- J1 BNC RG62/U Connector (PC500 only)
- J1 6-position Telephone Jack (PC550 only)
- J2 6-position Telephone Jack (PC550 only)
-
-Setting one of the switches to Off/Open means "1", On/Closed means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in group SW3 are used to set the node ID. Each node
-attached to the network must have an unique node ID which must be
-different from 0.
-Switch 1 serves as the least significant bit (LSB).
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 1 | 1
- 2 | 2
- 3 | 4
- 4 | 8
- 5 | 16
- 6 | 32
- 7 | 64
- 8 | 128
-
-Some Examples::
-
- Switch | Hex | Decimal
- 8 7 6 5 4 3 2 1 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first six switches in switch group SW1 are used to select one
-of 32 possible I/O Base addresses using the following table::
-
- Switch | Hex I/O
- 6 5 4 3 2 1 | Address
- -------------|--------
- 0 1 0 0 0 0 | 200
- 0 1 0 0 0 1 | 210
- 0 1 0 0 1 0 | 220
- 0 1 0 0 1 1 | 230
- 0 1 0 1 0 0 | 240
- 0 1 0 1 0 1 | 250
- 0 1 0 1 1 0 | 260
- 0 1 0 1 1 1 | 270
- 0 1 1 0 0 0 | 280
- 0 1 1 0 0 1 | 290
- 0 1 1 0 1 0 | 2A0
- 0 1 1 0 1 1 | 2B0
- 0 1 1 1 0 0 | 2C0
- 0 1 1 1 0 1 | 2D0
- 0 1 1 1 1 0 | 2E0 (Manufacturer's default)
- 0 1 1 1 1 1 | 2F0
- 1 1 0 0 0 0 | 300
- 1 1 0 0 0 1 | 310
- 1 1 0 0 1 0 | 320
- 1 1 0 0 1 1 | 330
- 1 1 0 1 0 0 | 340
- 1 1 0 1 0 1 | 350
- 1 1 0 1 1 0 | 360
- 1 1 0 1 1 1 | 370
- 1 1 1 0 0 0 | 380
- 1 1 1 0 0 1 | 390
- 1 1 1 0 1 0 | 3A0
- 1 1 1 0 1 1 | 3B0
- 1 1 1 1 0 0 | 3C0
- 1 1 1 1 0 1 | 3D0
- 1 1 1 1 1 0 | 3E0
- 1 1 1 1 1 1 | 3F0
-
-
-Setting the Interrupt
-^^^^^^^^^^^^^^^^^^^^^
-
-Switches seven through ten of switch group SW1 are used to select the
-interrupt level. The interrupt level is binary coded, so selections
-from 0 to 15 would be possible, but only the following eight values will
-be supported: 3, 4, 5, 7, 9, 10, 11, 12.
-
-::
-
- Switch | IRQ
- 10 9 8 7 |
- ---------|--------
- 0 0 1 1 | 3
- 0 1 0 0 | 4
- 0 1 0 1 | 5
- 0 1 1 1 | 7
- 1 0 0 1 | 9 (=2) (default)
- 1 0 1 0 | 10
- 1 0 1 1 | 11
- 1 1 0 0 | 12
-
-
-Setting the Timeouts
-^^^^^^^^^^^^^^^^^^^^
-
-The two jumpers JP2 (1-4) are used to determine the timeout parameters.
-These two jumpers are normally left open.
-Refer to the COM9026 Data Sheet for alternate configurations.
-
-
-Configuring the PC500 for Star or Bus Topology
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The single jumper labeled JP6 is used to configure the PC500 board for
-star or bus topology.
-When the jumper is installed, the board may be used in a star network, when
-it is removed, the board can be used in a bus topology.
-
-
-Diagnostic LEDs
-^^^^^^^^^^^^^^^
-
-Two diagnostic LEDs are visible on the rear bracket of the board.
-The green LED monitors the network activity: the red one shows the
-board activity::
-
- Green | Status Red | Status
- -------|------------------- ---------|-------------------
- on | normal activity flash/on | data transfer
- blink | reconfiguration off | no data transfer;
- off | defective board or | incorrect memory or
- | node ID is zero | I/O address
-
-
-PC710 (8-bit card)
-------------------
-
- - from J.S. van Oosten <jvoosten@compiler.tdcnet.nl>
-
-Note: this data is gathered by experimenting and looking at info of other
-cards. However, I'm sure I got 99% of the settings right.
-
-The SMC710 card resembles the PC270 card, but is much more basic (i.e. no
-LEDs, RJ11 jacks, etc.) and 8 bit. Here's a little drawing::
-
- _______________________________________
- | +---------+ +---------+ |____
- | | S2 | | S1 | |
- | +---------+ +---------+ |
- | |
- | +===+ __ |
- | | R | | | X-tal ###___
- | | O | |__| ####__'|
- | | M | || ###
- | +===+ |
- | |
- | .. JP1 +----------+ |
- | .. | big chip | |
- | .. | 90C63 | |
- | .. | | |
- | .. +----------+ |
- ------- -----------
- |||||||||||||||||||||
-
-The row of jumpers at JP1 actually consists of 8 jumpers, (sometimes
-labelled) the same as on the PC270, from top to bottom: EXT2, EXT1, ROM,
-IRQ7, IRQ5, IRQ4, IRQ3, IRQ2 (gee, wonder what they would do? :-) )
-
-S1 and S2 perform the same function as on the PC270, only their numbers
-are swapped (S1 is the nodeaddress, S2 sets IO- and RAM-address).
-
-I know it works when connected to a PC110 type ARCnet board.
-
-
-*****************************************************************************
-
-Possibly SMC
-============
-
-LCS-8830(-T) (8 and 16-bit cards)
----------------------------------
-
- - from Mathias Katzer <mkatzer@HRZ.Uni-Bielefeld.DE>
- - Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> says the
- LCS-8830 is slightly different from LCS-8830-T. These are 8 bit, BUS
- only (the JP0 jumper is hardwired), and BNC only.
-
-This is a LCS-8830-T made by SMC, I think ('SMC' only appears on one PLCC,
-nowhere else, not even on the few Xeroxed sheets from the manual).
-
-SMC ARCnet Board Type LCS-8830-T::
-
- ------------------------------------
- | |
- | JP3 88 8 JP2 |
- | ##### | \ |
- | ##### ET1 ET2 ###|
- | 8 ###|
- | U3 SW 1 JP0 ###| Phone Jacks
- | -- ###|
- | | | |
- | | | SW2 |
- | | | |
- | | | ##### |
- | -- ##### #### BNC Connector
- | ####
- | 888888 JP1 |
- | 234567 |
- -- -------
- |||||||||||||||||||||||||||
- --------------------------
-
-
- SW1: DIP-Switches for Station Address
- SW2: DIP-Switches for Memory Base and I/O Base addresses
-
- JP0: If closed, internal termination on (default open)
- JP1: IRQ Jumpers
- JP2: Boot-ROM enabled if closed
- JP3: Jumpers for response timeout
-
- U3: Boot-ROM Socket
-
-
- ET1 ET2 Response Time Idle Time Reconfiguration Time
-
- 78 86 840
- X 285 316 1680
- X 563 624 1680
- X X 1130 1237 1680
-
- (X means closed jumper)
-
- (DIP-Switch downwards means "0")
-
-The station address is binary-coded with SW1.
-
-The I/O base address is coded with DIP-Switches 6,7 and 8 of SW2:
-
-======== ========
-Switches Base
-678 Address
-======== ========
-000 260-26f
-100 290-29f
-010 2e0-2ef
-110 2f0-2ff
-001 300-30f
-101 350-35f
-011 380-38f
-111 3e0-3ef
-======== ========
-
-
-DIP Switches 1-5 of SW2 encode the RAM and ROM Address Range:
-
-======== ============= ================
-Switches RAM ROM
-12345 Address Range Address Range
-======== ============= ================
-00000 C:0000-C:07ff C:2000-C:3fff
-10000 C:0800-C:0fff
-01000 C:1000-C:17ff
-11000 C:1800-C:1fff
-00100 C:4000-C:47ff C:6000-C:7fff
-10100 C:4800-C:4fff
-01100 C:5000-C:57ff
-11100 C:5800-C:5fff
-00010 C:C000-C:C7ff C:E000-C:ffff
-10010 C:C800-C:Cfff
-01010 C:D000-C:D7ff
-11010 C:D800-C:Dfff
-00110 D:0000-D:07ff D:2000-D:3fff
-10110 D:0800-D:0fff
-01110 D:1000-D:17ff
-11110 D:1800-D:1fff
-00001 D:4000-D:47ff D:6000-D:7fff
-10001 D:4800-D:4fff
-01001 D:5000-D:57ff
-11001 D:5800-D:5fff
-00101 D:8000-D:87ff D:A000-D:bfff
-10101 D:8800-D:8fff
-01101 D:9000-D:97ff
-11101 D:9800-D:9fff
-00011 D:C000-D:c7ff D:E000-D:ffff
-10011 D:C800-D:cfff
-01011 D:D000-D:d7ff
-11011 D:D800-D:dfff
-00111 E:0000-E:07ff E:2000-E:3fff
-10111 E:0800-E:0fff
-01111 E:1000-E:17ff
-11111 E:1800-E:1fff
-======== ============= ================
-
-
-PureData Corp
-=============
-
-PDI507 (8-bit card)
---------------------
-
- - from Mark Rejhon <mdrejhon@magi.com> (slight modifications by Avery)
- - Avery's note: I think PDI508 cards (but definitely NOT PDI508Plus cards)
- are mostly the same as this. PDI508Plus cards appear to be mainly
- software-configured.
-
-Jumpers:
-
- There is a jumper array at the bottom of the card, near the edge
- connector. This array is labelled J1. They control the IRQs and
- something else. Put only one jumper on the IRQ pins.
-
- ETS1, ETS2 are for timing on very long distance networks. See the
- more general information near the top of this file.
-
- There is a J2 jumper on two pins. A jumper should be put on them,
- since it was already there when I got the card. I don't know what
- this jumper is for though.
-
- There is a two-jumper array for J3. I don't know what it is for,
- but there were already two jumpers on it when I got the card. It's
- a six pin grid in a two-by-three fashion. The jumpers were
- configured as follows::
-
- .-------.
- o | o o |
- :-------: ------> Accessible end of card with connectors
- o | o o | in this direction ------->
- `-------'
-
-Carl de Billy <CARL@carainfo.com> explains J3 and J4:
-
- J3 Diagram::
-
- .-------.
- o | o o |
- :-------: TWIST Technology
- o | o o |
- `-------'
- .-------.
- | o o | o
- :-------: COAX Technology
- | o o | o
- `-------'
-
- - If using coax cable in a bus topology the J4 jumper must be removed;
- place it on one pin.
-
- - If using bus topology with twisted pair wiring move the J3
- jumpers so they connect the middle pin and the pins closest to the RJ11
- Connectors. Also the J4 jumper must be removed; place it on one pin of
- J4 jumper for storage.
-
- - If using star topology with twisted pair wiring move the J3
- jumpers so they connect the middle pin and the pins closest to the RJ11
- connectors.
-
-
-DIP Switches:
-
- The DIP switches accessible on the accessible end of the card while
- it is installed, is used to set the ARCnet address. There are 8
- switches. Use an address from 1 to 254
-
- ========== =========================
- Switch No. ARCnet address
- 12345678
- ========== =========================
- 00000000 FF (Don't use this!)
- 00000001 FE
- 00000010 FD
- ...
- 11111101 2
- 11111110 1
- 11111111 0 (Don't use this!)
- ========== =========================
-
- There is another array of eight DIP switches at the top of the
- card. There are five labelled MS0-MS4 which seem to control the
- memory address, and another three labelled IO0-IO2 which seem to
- control the base I/O address of the card.
-
- This was difficult to test by trial and error, and the I/O addresses
- are in a weird order. This was tested by setting the DIP switches,
- rebooting the computer, and attempting to load ARCETHER at various
- addresses (mostly between 0x200 and 0x400). The address that caused
- the red transmit LED to blink, is the one that I thought works.
-
- Also, the address 0x3D0 seem to have a special meaning, since the
- ARCETHER packet driver loaded fine, but without the red LED
- blinking. I don't know what 0x3D0 is for though. I recommend using
- an address of 0x300 since Windows may not like addresses below
- 0x300.
-
- ============= ===========
- IO Switch No. I/O address
- 210
- ============= ===========
- 111 0x260
- 110 0x290
- 101 0x2E0
- 100 0x2F0
- 011 0x300
- 010 0x350
- 001 0x380
- 000 0x3E0
- ============= ===========
-
- The memory switches set a reserved address space of 0x1000 bytes
- (0x100 segment units, or 4k). For example if I set an address of
- 0xD000, it will use up addresses 0xD000 to 0xD100.
-
- The memory switches were tested by booting using QEMM386 stealth,
- and using LOADHI to see what address automatically became excluded
- from the upper memory regions, and then attempting to load ARCETHER
- using these addresses.
-
- I recommend using an ARCnet memory address of 0xD000, and putting
- the EMS page frame at 0xC000 while using QEMM stealth mode. That
- way, you get contiguous high memory from 0xD100 almost all the way
- the end of the megabyte.
-
- Memory Switch 0 (MS0) didn't seem to work properly when set to OFF
- on my card. It could be malfunctioning on my card. Experiment with
- it ON first, and if it doesn't work, set it to OFF. (It may be a
- modifier for the 0x200 bit?)
-
- ============= ============================================
- MS Switch No.
- 43210 Memory address
- ============= ============================================
- 00001 0xE100 (guessed - was not detected by QEMM)
- 00011 0xE000 (guessed - was not detected by QEMM)
- 00101 0xDD00
- 00111 0xDC00
- 01001 0xD900
- 01011 0xD800
- 01101 0xD500
- 01111 0xD400
- 10001 0xD100
- 10011 0xD000
- 10101 0xCD00
- 10111 0xCC00
- 11001 0xC900 (guessed - crashes tested system)
- 11011 0xC800 (guessed - crashes tested system)
- 11101 0xC500 (guessed - crashes tested system)
- 11111 0xC400 (guessed - crashes tested system)
- ============= ============================================
-
-CNet Technology Inc. (8-bit cards)
-==================================
-
-120 Series (8-bit cards)
-------------------------
- - from Juergen Seifert <seifert@htwm.de>
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the following Original CNet Manual
-
- "ARCNET USER'S MANUAL for
- CN120A
- CN120AB
- CN120TP
- CN120ST
- CN120SBT
- P/N:12-01-0007
- Revision 3.00"
-
-ARCNET is a registered trademark of the Datapoint Corporation
-
-- P/N 120A ARCNET 8 bit XT/AT Star
-- P/N 120AB ARCNET 8 bit XT/AT Bus
-- P/N 120TP ARCNET 8 bit XT/AT Twisted Pair
-- P/N 120ST ARCNET 8 bit XT/AT Star, Twisted Pair
-- P/N 120SBT ARCNET 8 bit XT/AT Star, Bus, Twisted Pair
-
-::
-
- __________________________________________________________________
- | |
- | ___|
- | LED |___|
- | ___|
- | N | | ID7
- | o | | ID6
- | d | S | ID5
- | e | W | ID4
- | ___________________ A | 2 | ID3
- | | | d | | ID2
- | | | 1 2 3 4 5 6 7 8 d | | ID1
- | | | _________________ r |___| ID0
- | | 90C65 || SW1 | ____|
- | JP 8 7 | ||_________________| | |
- | |o|o| JP1 | | | J2 |
- | |o|o| |oo| | | JP 1 1 1 | |
- | ______________ | | 0 1 2 |____|
- | | PROM | |___________________| |o|o|o| _____|
- | > SOCKET | JP 6 5 4 3 2 |o|o|o| | J1 |
- | |______________| |o|o|o|o|o| |o|o|o| |_____|
- |_____ |o|o|o|o|o| ______________|
- | |
- |_____________________________________________|
-
-Legend::
-
- 90C65 ARCNET Probe
- S1 1-5: Base Memory Address Select
- 6-8: Base I/O Address Select
- S2 1-8: Node ID Select (ID0-ID7)
- JP1 ROM Enable Select
- JP2 IRQ2
- JP3 IRQ3
- JP4 IRQ4
- JP5 IRQ5
- JP6 IRQ7
- JP7/JP8 ET1, ET2 Timeout Parameters
- JP10/JP11 Coax / Twisted Pair Select (CN120ST/SBT only)
- JP12 Terminator Select (CN120AB/ST/SBT only)
- J1 BNC RG62/U Connector (all except CN120TP)
- J2 Two 6-position Telephone Jack (CN120TP/ST/SBT only)
-
-Setting one of the switches to Off means "1", On means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW2 are used to set the node ID. Each node attached
-to the network must have an unique node ID which must be different from 0.
-Switch 1 (ID0) serves as the least significant bit (LSB).
-
-The node ID is the sum of the values of all switches set to "1"
-These values are:
-
- ======= ====== =====
- Switch Label Value
- ======= ====== =====
- 1 ID0 1
- 2 ID1 2
- 3 ID2 4
- 4 ID3 8
- 5 ID4 16
- 6 ID5 32
- 7 ID6 64
- 8 ID7 128
- ======= ====== =====
-
-Some Examples::
-
- Switch | Hex | Decimal
- 8 7 6 5 4 3 2 1 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The last three switches in switch block SW1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 6 7 8 | Address
- ------------|--------
- ON ON ON | 260
- OFF ON ON | 290
- ON OFF ON | 2E0 (Manufacturer's default)
- OFF OFF ON | 2F0
- ON ON OFF | 300
- OFF ON OFF | 350
- ON OFF OFF | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer (RAM) requires 2K. The base of this buffer can be
-located in any of eight positions. The address of the Boot Prom is
-memory base + 8K or memory base + 0x2000.
-Switches 1-5 of switch block SW1 select the Memory Base address.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 1 2 3 4 5 | Address | Address *)
- --------------------|---------|-----------
- ON ON ON ON ON | C0000 | C2000
- ON ON OFF ON ON | C4000 | C6000
- ON ON ON OFF ON | CC000 | CE000
- ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default)
- ON ON ON ON OFF | D4000 | D6000
- ON ON OFF ON OFF | D8000 | DA000
- ON ON ON OFF OFF | DC000 | DE000
- ON ON OFF OFF OFF | E0000 | E2000
-
- *) To enable the Boot ROM install the jumper JP1
-
-.. note::
-
- Since the switches 1 and 2 are always set to ON it may be possible
- that they can be used to add an offset of 2K, 4K or 6K to the base
- address, but this feature is not documented in the manual and I
- haven't tested it yet.
-
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To select a hardware interrupt level install one (only one!) of the jumpers
-JP2, JP3, JP4, JP5, JP6. JP2 is the default::
-
- Jumper | IRQ
- -------|-----
- 2 | 2
- 3 | 3
- 4 | 4
- 5 | 5
- 6 | 7
-
-
-Setting the Internal Terminator on CN120AB/TP/SBT
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The jumper JP12 is used to enable the internal terminator::
-
- -----
- 0 | 0 |
- ----- ON | | ON
- | 0 | | 0 |
- | | OFF ----- OFF
- | 0 | 0
- -----
- Terminator Terminator
- disabled enabled
-
-
-Selecting the Connector Type on CN120ST/SBT
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-::
-
- JP10 JP11 JP10 JP11
- ----- -----
- 0 0 | 0 | | 0 |
- ----- ----- | | | |
- | 0 | | 0 | | 0 | | 0 |
- | | | | ----- -----
- | 0 | | 0 | 0 0
- ----- -----
- Coaxial Cable Twisted Pair Cable
- (Default)
-
-
-Setting the Timeout Parameters
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The jumpers labeled EXT1 and EXT2 are used to determine the timeout
-parameters. These two jumpers are normally left open.
-
-
-CNet Technology Inc. (16-bit cards)
-===================================
-
-160 Series (16-bit cards)
--------------------------
- - from Juergen Seifert <seifert@htwm.de>
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the following Original CNet Manual
-
- "ARCNET USER'S MANUAL for
- CN160A CN160AB CN160TP
- P/N:12-01-0006 Revision 3.00"
-
-ARCNET is a registered trademark of the Datapoint Corporation
-
-- P/N 160A ARCNET 16 bit XT/AT Star
-- P/N 160AB ARCNET 16 bit XT/AT Bus
-- P/N 160TP ARCNET 16 bit XT/AT Twisted Pair
-
-::
-
- ___________________________________________________________________
- < _________________________ ___|
- > |oo| JP2 | | LED |___|
- < |oo| JP1 | 9026 | LED |___|
- > |_________________________| ___|
- < N | | ID7
- > 1 o | | ID6
- < 1 2 3 4 5 6 7 8 9 0 d | S | ID5
- > _______________ _____________________ e | W | ID4
- < | PROM | | SW1 | A | 2 | ID3
- > > SOCKET | |_____________________| d | | ID2
- < |_______________| | IO-Base | MEM | d | | ID1
- > r |___| ID0
- < ____|
- > | |
- < | J1 |
- > | |
- < |____|
- > 1 1 1 1 |
- < 3 4 5 6 7 JP 8 9 0 1 2 3 |
- > |o|o|o|o|o| |o|o|o|o|o|o| |
- < |o|o|o|o|o| __ |o|o|o|o|o|o| ___________|
- > | | |
- <____________| |_______________________________________|
-
-Legend::
-
- 9026 ARCNET Probe
- SW1 1-6: Base I/O Address Select
- 7-10: Base Memory Address Select
- SW2 1-8: Node ID Select (ID0-ID7)
- JP1/JP2 ET1, ET2 Timeout Parameters
- JP3-JP13 Interrupt Select
- J1 BNC RG62/U Connector (CN160A/AB only)
- J1 Two 6-position Telephone Jack (CN160TP only)
- LED
-
-Setting one of the switches to Off means "1", On means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW2 are used to set the node ID. Each node attached
-to the network must have an unique node ID which must be different from 0.
-Switch 1 (ID0) serves as the least significant bit (LSB).
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Label | Value
- -------|-------|-------
- 1 | ID0 | 1
- 2 | ID1 | 2
- 3 | ID2 | 4
- 4 | ID3 | 8
- 5 | ID4 | 16
- 6 | ID5 | 32
- 7 | ID6 | 64
- 8 | ID7 | 128
-
-Some Examples::
-
- Switch | Hex | Decimal
- 8 7 6 5 4 3 2 1 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first six switches in switch block SW1 are used to select the I/O Base
-address using the following table::
-
- Switch | Hex I/O
- 1 2 3 4 5 6 | Address
- ------------------------|--------
- OFF ON ON OFF OFF ON | 260
- OFF ON OFF ON ON OFF | 290
- OFF ON OFF OFF OFF ON | 2E0 (Manufacturer's default)
- OFF ON OFF OFF OFF OFF | 2F0
- OFF OFF ON ON ON ON | 300
- OFF OFF ON OFF ON OFF | 350
- OFF OFF OFF ON ON ON | 380
- OFF OFF OFF OFF OFF ON | 3E0
-
-Note: Other IO-Base addresses seem to be selectable, but only the above
- combinations are documented.
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The switches 7-10 of switch block SW1 are used to select the Memory
-Base address of the RAM (2K) and the PROM::
-
- Switch | Hex RAM | Hex ROM
- 7 8 9 10 | Address | Address
- ----------------|---------|-----------
- OFF OFF ON ON | C0000 | C8000
- OFF OFF ON OFF | D0000 | D8000 (Default)
- OFF OFF OFF ON | E0000 | E8000
-
-.. note::
-
- Other MEM-Base addresses seem to be selectable, but only the above
- combinations are documented.
-
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To select a hardware interrupt level install one (only one!) of the jumpers
-JP3 through JP13 using the following table::
-
- Jumper | IRQ
- -------|-----------------
- 3 | 14
- 4 | 15
- 5 | 12
- 6 | 11
- 7 | 10
- 8 | 3
- 9 | 4
- 10 | 5
- 11 | 6
- 12 | 7
- 13 | 2 (=9) Default!
-
-.. note::
-
- - Do not use JP11=IRQ6, it may conflict with your Floppy Disk
- Controller
- - Use JP3=IRQ14 only, if you don't have an IDE-, MFM-, or RLL-
- Hard Disk, it may conflict with their controllers
-
-
-Setting the Timeout Parameters
-------------------------------
-
-The jumpers labeled JP1 and JP2 are used to determine the timeout
-parameters. These two jumpers are normally left open.
-
-
-Lantech
-=======
-
-8-bit card, unknown model
--------------------------
- - from Vlad Lungu <vlungu@ugal.ro> - his e-mail address seemed broken at
- the time I tried to reach him. Sorry Vlad, if you didn't get my reply.
-
-::
-
- ________________________________________________________________
- | 1 8 |
- | ___________ __|
- | | SW1 | LED |__|
- | |__________| |
- | ___|
- | _____________________ |S | 8
- | | | |W |
- | | | |2 |
- | | | |__| 1
- | | UM9065L | |o| JP4 ____|____
- | | | |o| | CN |
- | | | |________|
- | | | |
- | |___________________| |
- | |
- | |
- | _____________ |
- | | | |
- | | PROM | |ooooo| JP6 |
- | |____________| |ooooo| |
- |_____________ _ _|
- |____________________________________________| |__|
-
-
-UM9065L : ARCnet Controller
-
-SW 1 : Shared Memory Address and I/O Base
-
-::
-
- ON=0
-
- 12345|Memory Address
- -----|--------------
- 00001| D4000
- 00010| CC000
- 00110| D0000
- 01110| D1000
- 01101| D9000
- 10010| CC800
- 10011| DC800
- 11110| D1800
-
-It seems that the bits are considered in reverse order. Also, you must
-observe that some of those addresses are unusual and I didn't probe them; I
-used a memory dump in DOS to identify them. For the 00000 configuration and
-some others that I didn't write here the card seems to conflict with the
-video card (an S3 GENDAC). I leave the full decoding of those addresses to
-you.
-
-::
-
- 678| I/O Address
- ---|------------
- 000| 260
- 001| failed probe
- 010| 2E0
- 011| 380
- 100| 290
- 101| 350
- 110| failed probe
- 111| 3E0
-
- SW 2 : Node ID (binary coded)
-
- JP 4 : Boot PROM enable CLOSE - enabled
- OPEN - disabled
-
- JP 6 : IRQ set (ONLY ONE jumper on 1-5 for IRQ 2-6)
-
-
-Acer
-====
-
-8-bit card, Model 5210-003
---------------------------
-
- - from Vojtech Pavlik <vojtech@suse.cz> using portions of the existing
- arcnet-hardware file.
-
-This is a 90C26 based card. Its configuration seems similar to the SMC
-PC100, but has some additional jumpers I don't know the meaning of.
-
-::
-
- __
- | |
- ___________|__|_________________________
- | | | |
- | | BNC | |
- | |______| ___|
- | _____________________ |___
- | | | |
- | | Hybrid IC | |
- | | | o|o J1 |
- | |_____________________| 8|8 |
- | 8|8 J5 |
- | o|o |
- | 8|8 |
- |__ 8|8 |
- (|__| LED o|o |
- | 8|8 |
- | 8|8 J15 |
- | |
- | _____ |
- | | | _____ |
- | | | | | ___|
- | | | | | |
- | _____ | ROM | | UFS | |
- | | | | | | | |
- | | | ___ | | | | |
- | | | | | |__.__| |__.__| |
- | | NCR | |XTL| _____ _____ |
- | | | |___| | | | | |
- | |90C26| | | | | |
- | | | | RAM | | UFS | |
- | | | J17 o|o | | | | |
- | | | J16 o|o | | | | |
- | |__.__| |__.__| |__.__| |
- | ___ |
- | | |8 |
- | |SW2| |
- | | | |
- | |___|1 |
- | ___ |
- | | |10 J18 o|o |
- | | | o|o |
- | |SW1| o|o |
- | | | J21 o|o |
- | |___|1 |
- | |
- |____________________________________|
-
-
-Legend::
-
- 90C26 ARCNET Chip
- XTL 20 MHz Crystal
- SW1 1-6 Base I/O Address Select
- 7-10 Memory Address Select
- SW2 1-8 Node ID Select (ID0-ID7)
- J1-J5 IRQ Select
- J6-J21 Unknown (Probably extra timeouts & ROM enable ...)
- LED1 Activity LED
- BNC Coax connector (STAR ARCnet)
- RAM 2k of SRAM
- ROM Boot ROM socket
- UFS Unidentified Flying Sockets
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW2 are used to set the node ID. Each node attached
-to the network must have an unique node ID which must not be 0.
-Switch 1 (ID0) serves as the least significant bit (LSB).
-
-Setting one of the switches to OFF means "1", ON means "0".
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 1 | 1
- 2 | 2
- 3 | 4
- 4 | 8
- 5 | 16
- 6 | 32
- 7 | 64
- 8 | 128
-
-Don't set this to 0 or 255; these values are reserved.
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The switches 1 to 6 of switch block SW1 are used to select one
-of 32 possible I/O Base addresses using the following tables::
-
- | Hex
- Switch | Value
- -------|-------
- 1 | 200
- 2 | 100
- 3 | 80
- 4 | 40
- 5 | 20
- 6 | 10
-
-The I/O address is sum of all switches set to "1". Remember that
-the I/O address space below 0x200 is RESERVED for mainboard, so
-switch 1 should be ALWAYS SET TO OFF.
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer (RAM) requires 2K. The base of this buffer can be
-located in any of sixteen positions. However, the addresses below
-A0000 are likely to cause system hang because there's main RAM.
-
-Jumpers 7-10 of switch block SW1 select the Memory Base address::
-
- Switch | Hex RAM
- 7 8 9 10 | Address
- ----------------|---------
- OFF OFF OFF OFF | F0000 (conflicts with main BIOS)
- OFF OFF OFF ON | E0000
- OFF OFF ON OFF | D0000
- OFF OFF ON ON | C0000 (conflicts with video BIOS)
- OFF ON OFF OFF | B0000 (conflicts with mono video)
- OFF ON OFF ON | A0000 (conflicts with graphics)
-
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Jumpers 1-5 of the jumper block J1 control the IRQ level. ON means
-shorted, OFF means open::
-
- Jumper | IRQ
- 1 2 3 4 5 |
- ----------------------------
- ON OFF OFF OFF OFF | 7
- OFF ON OFF OFF OFF | 5
- OFF OFF ON OFF OFF | 4
- OFF OFF OFF ON OFF | 3
- OFF OFF OFF OFF ON | 2
-
-
-Unknown jumpers & sockets
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-I know nothing about these. I just guess that J16&J17 are timeout
-jumpers and maybe one of J18-J21 selects ROM. Also J6-J10 and
-J11-J15 are connecting IRQ2-7 to some pins on the UFSs. I can't
-guess the purpose.
-
-Datapoint?
-==========
-
-LAN-ARC-8, an 8-bit card
-------------------------
-
- - from Vojtech Pavlik <vojtech@suse.cz>
-
-This is another SMC 90C65-based ARCnet card. I couldn't identify the
-manufacturer, but it might be DataPoint, because the card has the
-original arcNet logo in its upper right corner.
-
-::
-
- _______________________________________________________
- | _________ |
- | | SW2 | ON arcNet |
- | |_________| OFF ___|
- | _____________ 1 ______ 8 | | 8
- | | | SW1 | XTAL | ____________ | S |
- | > RAM (2k) | |______|| | | W |
- | |_____________| | H | | 3 |
- | _________|_____ y | |___| 1
- | _________ | | |b | |
- | |_________| | | |r | |
- | | SMC | |i | |
- | | 90C65| |d | |
- | _________ | | | | |
- | | SW1 | ON | | |I | |
- | |_________| OFF |_________|_____/C | _____|
- | 1 8 | | | |___
- | ______________ | | | BNC |___|
- | | | |____________| |_____|
- | > EPROM SOCKET | _____________ |
- | |______________| |_____________| |
- | ______________|
- | |
- |________________________________________|
-
-Legend::
-
- 90C65 ARCNET Chip
- SW1 1-5: Base Memory Address Select
- 6-8: Base I/O Address Select
- SW2 1-8: Node ID Select
- SW3 1-5: IRQ Select
- 6-7: Extra Timeout
- 8 : ROM Enable
- BNC Coax connector
- XTAL 20 MHz Crystal
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW3 are used to set the node ID. Each node attached
-to the network must have an unique node ID which must not be 0.
-Switch 1 serves as the least significant bit (LSB).
-
-Setting one of the switches to Off means "1", On means "0".
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 1 | 1
- 2 | 2
- 3 | 4
- 4 | 8
- 5 | 16
- 6 | 32
- 7 | 64
- 8 | 128
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The last three switches in switch block SW1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 6 7 8 | Address
- ------------|--------
- ON ON ON | 260
- OFF ON ON | 290
- ON OFF ON | 2E0 (Manufacturer's default)
- OFF OFF ON | 2F0
- ON ON OFF | 300
- OFF ON OFF | 350
- ON OFF OFF | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer (RAM) requires 2K. The base of this buffer can be
-located in any of eight positions. The address of the Boot Prom is
-memory base + 0x2000.
-
-Jumpers 3-5 of switch block SW1 select the Memory Base address.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 1 2 3 4 5 | Address | Address *)
- --------------------|---------|-----------
- ON ON ON ON ON | C0000 | C2000
- ON ON OFF ON ON | C4000 | C6000
- ON ON ON OFF ON | CC000 | CE000
- ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default)
- ON ON ON ON OFF | D4000 | D6000
- ON ON OFF ON OFF | D8000 | DA000
- ON ON ON OFF OFF | DC000 | DE000
- ON ON OFF OFF OFF | E0000 | E2000
-
- *) To enable the Boot ROM set the switch 8 of switch block SW3 to position ON.
-
-The switches 1 and 2 probably add 0x0800 and 0x1000 to RAM base address.
-
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Switches 1-5 of the switch block SW3 control the IRQ level::
-
- Jumper | IRQ
- 1 2 3 4 5 |
- ----------------------------
- ON OFF OFF OFF OFF | 3
- OFF ON OFF OFF OFF | 4
- OFF OFF ON OFF OFF | 5
- OFF OFF OFF ON OFF | 7
- OFF OFF OFF OFF ON | 2
-
-
-Setting the Timeout Parameters
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The switches 6-7 of the switch block SW3 are used to determine the timeout
-parameters. These two switches are normally left in the OFF position.
-
-
-Topware
-=======
-
-8-bit card, TA-ARC/10
----------------------
-
- - from Vojtech Pavlik <vojtech@suse.cz>
-
-This is another very similar 90C65 card. Most of the switches and jumpers
-are the same as on other clones.
-
-::
-
- _____________________________________________________________________
- | ___________ | | ______ |
- | |SW2 NODE ID| | | | XTAL | |
- | |___________| | Hybrid IC | |______| |
- | ___________ | | __|
- | |SW1 MEM+I/O| |_________________________| LED1|__|)
- | |___________| 1 2 |
- | J3 |o|o| TIMEOUT ______|
- | ______________ |o|o| | |
- | | | ___________________ | RJ |
- | > EPROM SOCKET | | \ |------|
- |J2 |______________| | | | |
- ||o| | | |______|
- ||o| ROM ENABLE | SMC | _________ |
- | _____________ | 90C65 | |_________| _____|
- | | | | | | |___
- | > RAM (2k) | | | | BNC |___|
- | |_____________| | | |_____|
- | |____________________| |
- | ________ IRQ 2 3 4 5 7 ___________ |
- ||________| |o|o|o|o|o| |___________| |
- |________ J1|o|o|o|o|o| ______________|
- | |
- |_____________________________________________|
-
-Legend::
-
- 90C65 ARCNET Chip
- XTAL 20 MHz Crystal
- SW1 1-5 Base Memory Address Select
- 6-8 Base I/O Address Select
- SW2 1-8 Node ID Select (ID0-ID7)
- J1 IRQ Select
- J2 ROM Enable
- J3 Extra Timeout
- LED1 Activity LED
- BNC Coax connector (BUS ARCnet)
- RJ Twisted Pair Connector (daisy chain)
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW2 are used to set the node ID. Each node attached to
-the network must have an unique node ID which must not be 0. Switch 1 (ID0)
-serves as the least significant bit (LSB).
-
-Setting one of the switches to Off means "1", On means "0".
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Label | Value
- -------|-------|-------
- 1 | ID0 | 1
- 2 | ID1 | 2
- 3 | ID2 | 4
- 4 | ID3 | 8
- 5 | ID4 | 16
- 6 | ID5 | 32
- 7 | ID6 | 64
- 8 | ID7 | 128
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The last three switches in switch block SW1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 6 7 8 | Address
- ------------|--------
- ON ON ON | 260 (Manufacturer's default)
- OFF ON ON | 290
- ON OFF ON | 2E0
- OFF OFF ON | 2F0
- ON ON OFF | 300
- OFF ON OFF | 350
- ON OFF OFF | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer (RAM) requires 2K. The base of this buffer can be
-located in any of eight positions. The address of the Boot Prom is
-memory base + 0x2000.
-
-Jumpers 3-5 of switch block SW1 select the Memory Base address.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 1 2 3 4 5 | Address | Address *)
- --------------------|---------|-----------
- ON ON ON ON ON | C0000 | C2000
- ON ON OFF ON ON | C4000 | C6000 (Manufacturer's default)
- ON ON ON OFF ON | CC000 | CE000
- ON ON OFF OFF ON | D0000 | D2000
- ON ON ON ON OFF | D4000 | D6000
- ON ON OFF ON OFF | D8000 | DA000
- ON ON ON OFF OFF | DC000 | DE000
- ON ON OFF OFF OFF | E0000 | E2000
-
- *) To enable the Boot ROM short the jumper J2.
-
-The jumpers 1 and 2 probably add 0x0800 and 0x1000 to RAM address.
-
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Jumpers 1-5 of the jumper block J1 control the IRQ level. ON means
-shorted, OFF means open::
-
- Jumper | IRQ
- 1 2 3 4 5 |
- ----------------------------
- ON OFF OFF OFF OFF | 2
- OFF ON OFF OFF OFF | 3
- OFF OFF ON OFF OFF | 4
- OFF OFF OFF ON OFF | 5
- OFF OFF OFF OFF ON | 7
-
-
-Setting the Timeout Parameters
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The jumpers J3 are used to set the timeout parameters. These two
-jumpers are normally left open.
-
-Thomas-Conrad
-=============
-
-Model #500-6242-0097 REV A (8-bit card)
----------------------------------------
-
- - from Lars Karlsson <100617.3473@compuserve.com>
-
-::
-
- ________________________________________________________
- | ________ ________ |_____
- | |........| |........| |
- | |________| |________| ___|
- | SW 3 SW 1 | |
- | Base I/O Base Addr. Station | |
- | address | |
- | ______ switch | |
- | | | | |
- | | | |___|
- | | | ______ |___._
- | |______| |______| ____| BNC
- | Jumper- _____| Connector
- | Main chip block _ __| '
- | | | | RJ Connector
- | |_| | with 110 Ohm
- | |__ Terminator
- | ___________ __|
- | |...........| | RJ-jack
- | |...........| _____ | (unused)
- | |___________| |_____| |__
- | Boot PROM socket IRQ-jumpers |_ Diagnostic
- |________ __ _| LED (red)
- | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | |________|
- |
- |
-
-And here are the settings for some of the switches and jumpers on the cards.
-
-::
-
- I/O
-
- 1 2 3 4 5 6 7 8
-
- 2E0----- 0 0 0 1 0 0 0 1
- 2F0----- 0 0 0 1 0 0 0 0
- 300----- 0 0 0 0 1 1 1 1
- 350----- 0 0 0 0 1 1 1 0
-
-"0" in the above example means switch is off "1" means that it is on.
-
-::
-
- ShMem address.
-
- 1 2 3 4 5 6 7 8
-
- CX00--0 0 1 1 | | |
- DX00--0 0 1 0 |
- X000--------- 1 1 |
- X400--------- 1 0 |
- X800--------- 0 1 |
- XC00--------- 0 0
- ENHANCED----------- 1
- COMPATIBLE--------- 0
-
-::
-
- IRQ
-
-
- 3 4 5 7 2
- . . . . .
- . . . . .
-
-
-There is a DIP-switch with 8 switches, used to set the shared memory address
-to be used. The first 6 switches set the address, the 7th doesn't have any
-function, and the 8th switch is used to select "compatible" or "enhanced".
-When I got my two cards, one of them had this switch set to "enhanced". That
-card didn't work at all, it wasn't even recognized by the driver. The other
-card had this switch set to "compatible" and it behaved absolutely normally. I
-guess that the switch on one of the cards, must have been changed accidentally
-when the card was taken out of its former host. The question remains
-unanswered, what is the purpose of the "enhanced" position?
-
-[Avery's note: "enhanced" probably either disables shared memory (use IO
-ports instead) or disables IO ports (use memory addresses instead). This
-varies by the type of card involved. I fail to see how either of these
-enhance anything. Send me more detailed information about this mode, or
-just use "compatible" mode instead.]
-
-Waterloo Microsystems Inc. ??
-=============================
-
-8-bit card (C) 1985
--------------------
- - from Robert Michael Best <rmb117@cs.usask.ca>
-
-[Avery's note: these don't work with my driver for some reason. These cards
-SEEM to have settings similar to the PDI508Plus, which is
-software-configured and doesn't work with my driver either. The "Waterloo
-chip" is a boot PROM, probably designed specifically for the University of
-Waterloo. If you have any further information about this card, please
-e-mail me.]
-
-The probe has not been able to detect the card on any of the J2 settings,
-and I tried them again with the "Waterloo" chip removed.
-
-::
-
- _____________________________________________________________________
- | \/ \/ ___ __ __ |
- | C4 C4 |^| | M || ^ ||^| |
- | -- -- |_| | 5 || || | C3 |
- | \/ \/ C10 |___|| ||_| |
- | C4 C4 _ _ | | ?? |
- | -- -- | \/ || | |
- | | || | |
- | | || C1 | |
- | | || | \/ _____|
- | | C6 || | C9 | |___
- | | || | -- | BNC |___|
- | | || | >C7| |_____|
- | | || | |
- | __ __ |____||_____| 1 2 3 6 |
- || ^ | >C4| |o|o|o|o|o|o| J2 >C4| |
- || | |o|o|o|o|o|o| |
- || C2 | >C4| >C4| |
- || | >C8| |
- || | 2 3 4 5 6 7 IRQ >C4| |
- ||_____| |o|o|o|o|o|o| J3 |
- |_______ |o|o|o|o|o|o| _______________|
- | |
- |_____________________________________________|
-
- C1 -- "COM9026
- SMC 8638"
- In a chip socket.
-
- C2 -- "@Copyright
- Waterloo Microsystems Inc.
- 1985"
- In a chip Socket with info printed on a label covering a round window
- showing the circuit inside. (The window indicates it is an EPROM chip.)
-
- C3 -- "COM9032
- SMC 8643"
- In a chip socket.
-
- C4 -- "74LS"
- 9 total no sockets.
-
- M5 -- "50006-136
- 20.000000 MHZ
- MTQ-T1-S3
- 0 M-TRON 86-40"
- Metallic case with 4 pins, no socket.
-
- C6 -- "MOSTEK@TC8643
- MK6116N-20
- MALAYSIA"
- No socket.
-
- C7 -- No stamp or label but in a 20 pin chip socket.
-
- C8 -- "PAL10L8CN
- 8623"
- In a 20 pin socket.
-
- C9 -- "PAl16R4A-2CN
- 8641"
- In a 20 pin socket.
-
- C10 -- "M8640
- NMC
- 9306N"
- In an 8 pin socket.
-
- ?? -- Some components on a smaller board and attached with 20 pins all
- along the side closest to the BNC connector. The are coated in a dark
- resin.
-
-On the board there are two jumper banks labeled J2 and J3. The
-manufacturer didn't put a J1 on the board. The two boards I have both
-came with a jumper box for each bank.
-
-::
-
- J2 -- Numbered 1 2 3 4 5 6.
- 4 and 5 are not stamped due to solder points.
-
- J3 -- IRQ 2 3 4 5 6 7
-
-The board itself has a maple leaf stamped just above the irq jumpers
-and "-2 46-86" beside C2. Between C1 and C6 "ASS 'Y 300163" and "@1986
-CORMAN CUSTOM ELECTRONICS CORP." stamped just below the BNC connector.
-Below that "MADE IN CANADA"
-
-No Name
-=======
-
-8-bit cards, 16-bit cards
--------------------------
-
- - from Juergen Seifert <seifert@htwm.de>
-
-I have named this ARCnet card "NONAME", since there is no name of any
-manufacturer on the Installation manual nor on the shipping box. The only
-hint to the existence of a manufacturer at all is written in copper,
-it is "Made in Taiwan"
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the Original
-
- "ARCnet Installation Manual"
-
-::
-
- ________________________________________________________________
- | |STAR| BUS| T/P| |
- | |____|____|____| |
- | _____________________ |
- | | | |
- | | | |
- | | | |
- | | SMC | |
- | | | |
- | | COM90C65 | |
- | | | |
- | | | |
- | |__________-__________| |
- | _____|
- | _______________ | CN |
- | | PROM | |_____|
- | > SOCKET | |
- | |_______________| 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 |
- | _______________ _______________ |
- | |o|o|o|o|o|o|o|o| | SW1 || SW2 ||
- | |o|o|o|o|o|o|o|o| |_______________||_______________||
- |___ 2 3 4 5 7 E E R Node ID IOB__|__MEM____|
- | \ IRQ / T T O |
- |__________________1_2_M______________________|
-
-Legend::
-
- COM90C65: ARCnet Probe
- S1 1-8: Node ID Select
- S2 1-3: I/O Base Address Select
- 4-6: Memory Base Address Select
- 7-8: RAM Offset Select
- ET1, ET2 Extended Timeout Select
- ROM ROM Enable Select
- CN RG62 Coax Connector
- STAR| BUS | T/P Three fields for placing a sign (colored circle)
- indicating the topology of the card
-
-Setting one of the switches to Off means "1", On means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in group SW1 are used to set the node ID.
-Each node attached to the network must have an unique node ID which
-must be different from 0.
-Switch 8 serves as the least significant bit (LSB).
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 8 | 1
- 7 | 2
- 6 | 4
- 5 | 8
- 4 | 16
- 3 | 32
- 2 | 64
- 1 | 128
-
-Some Examples::
-
- Switch | Hex | Decimal
- 1 2 3 4 5 6 7 8 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first three switches in switch group SW2 are used to select one
-of eight possible I/O Base addresses using the following table::
-
- Switch | Hex I/O
- 1 2 3 | Address
- ------------|--------
- ON ON ON | 260
- ON ON OFF | 290
- ON OFF ON | 2E0 (Manufacturer's default)
- ON OFF OFF | 2F0
- OFF ON ON | 300
- OFF ON OFF | 350
- OFF OFF ON | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer requires 2K of a 16K block of RAM. The base of this
-16K block can be located in any of eight positions.
-Switches 4-6 of switch group SW2 select the Base of the 16K block.
-Within that 16K address space, the buffer may be assigned any one of four
-positions, determined by the offset, switches 7 and 8 of group SW2.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 4 5 6 7 8 | Address | Address *)
- -----------|---------|-----------
- 0 0 0 0 0 | C0000 | C2000
- 0 0 0 0 1 | C0800 | C2000
- 0 0 0 1 0 | C1000 | C2000
- 0 0 0 1 1 | C1800 | C2000
- | |
- 0 0 1 0 0 | C4000 | C6000
- 0 0 1 0 1 | C4800 | C6000
- 0 0 1 1 0 | C5000 | C6000
- 0 0 1 1 1 | C5800 | C6000
- | |
- 0 1 0 0 0 | CC000 | CE000
- 0 1 0 0 1 | CC800 | CE000
- 0 1 0 1 0 | CD000 | CE000
- 0 1 0 1 1 | CD800 | CE000
- | |
- 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default)
- 0 1 1 0 1 | D0800 | D2000
- 0 1 1 1 0 | D1000 | D2000
- 0 1 1 1 1 | D1800 | D2000
- | |
- 1 0 0 0 0 | D4000 | D6000
- 1 0 0 0 1 | D4800 | D6000
- 1 0 0 1 0 | D5000 | D6000
- 1 0 0 1 1 | D5800 | D6000
- | |
- 1 0 1 0 0 | D8000 | DA000
- 1 0 1 0 1 | D8800 | DA000
- 1 0 1 1 0 | D9000 | DA000
- 1 0 1 1 1 | D9800 | DA000
- | |
- 1 1 0 0 0 | DC000 | DE000
- 1 1 0 0 1 | DC800 | DE000
- 1 1 0 1 0 | DD000 | DE000
- 1 1 0 1 1 | DD800 | DE000
- | |
- 1 1 1 0 0 | E0000 | E2000
- 1 1 1 0 1 | E0800 | E2000
- 1 1 1 1 0 | E1000 | E2000
- 1 1 1 1 1 | E1800 | E2000
-
- *) To enable the 8K Boot PROM install the jumper ROM.
- The default is jumper ROM not installed.
-
-
-Setting Interrupt Request Lines (IRQ)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To select a hardware interrupt level set one (only one!) of the jumpers
-IRQ2, IRQ3, IRQ4, IRQ5 or IRQ7. The manufacturer's default is IRQ2.
-
-
-Setting the Timeouts
-^^^^^^^^^^^^^^^^^^^^
-
-The two jumpers labeled ET1 and ET2 are used to determine the timeout
-parameters (response and reconfiguration time). Every node in a network
-must be set to the same timeout values.
-
-::
-
- ET1 ET2 | Response Time (us) | Reconfiguration Time (ms)
- --------|--------------------|--------------------------
- Off Off | 78 | 840 (Default)
- Off On | 285 | 1680
- On Off | 563 | 1680
- On On | 1130 | 1680
-
-On means jumper installed, Off means jumper not installed
-
-
-16-BIT ARCNET
--------------
-
-The manual of my 8-Bit NONAME ARCnet Card contains another description
-of a 16-Bit Coax / Twisted Pair Card. This description is incomplete,
-because there are missing two pages in the manual booklet. (The table
-of contents reports pages ... 2-9, 2-11, 2-12, 3-1, ... but inside
-the booklet there is a different way of counting ... 2-9, 2-10, A-1,
-(empty page), 3-1, ..., 3-18, A-1 (again), A-2)
-Also the picture of the board layout is not as good as the picture of
-8-Bit card, because there isn't any letter like "SW1" written to the
-picture.
-
-Should somebody have such a board, please feel free to complete this
-description or to send a mail to me!
-
-This description has been written by Juergen Seifert <seifert@htwm.de>
-using information from the Original
-
- "ARCnet Installation Manual"
-
-::
-
- ___________________________________________________________________
- < _________________ _________________ |
- > | SW? || SW? | |
- < |_________________||_________________| |
- > ____________________ |
- < | | |
- > | | |
- < | | |
- > | | |
- < | | |
- > | | |
- < | | |
- > |____________________| |
- < ____|
- > ____________________ | |
- < | | | J1 |
- > | < | |
- < |____________________| ? ? ? ? ? ? |____|
- > |o|o|o|o|o|o| |
- < |o|o|o|o|o|o| |
- > |
- < __ ___________|
- > | | |
- <____________| |_______________________________________|
-
-
-Setting one of the switches to Off means "1", On means "0".
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in group SW2 are used to set the node ID.
-Each node attached to the network must have an unique node ID which
-must be different from 0.
-Switch 8 serves as the least significant bit (LSB).
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 8 | 1
- 7 | 2
- 6 | 4
- 5 | 8
- 4 | 16
- 3 | 32
- 2 | 64
- 1 | 128
-
-Some Examples::
-
- Switch | Hex | Decimal
- 1 2 3 4 5 6 7 8 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first three switches in switch group SW1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
- Switch | Hex I/O
- 3 2 1 | Address
- ------------|--------
- ON ON ON | 260
- ON ON OFF | 290
- ON OFF ON | 2E0 (Manufacturer's default)
- ON OFF OFF | 2F0
- OFF ON ON | 300
- OFF ON OFF | 350
- OFF OFF ON | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer requires 2K of a 16K block of RAM. The base of this
-16K block can be located in any of eight positions.
-Switches 6-8 of switch group SW1 select the Base of the 16K block.
-Within that 16K address space, the buffer may be assigned any one of four
-positions, determined by the offset, switches 4 and 5 of group SW1::
-
- Switch | Hex RAM | Hex ROM
- 8 7 6 5 4 | Address | Address
- -----------|---------|-----------
- 0 0 0 0 0 | C0000 | C2000
- 0 0 0 0 1 | C0800 | C2000
- 0 0 0 1 0 | C1000 | C2000
- 0 0 0 1 1 | C1800 | C2000
- | |
- 0 0 1 0 0 | C4000 | C6000
- 0 0 1 0 1 | C4800 | C6000
- 0 0 1 1 0 | C5000 | C6000
- 0 0 1 1 1 | C5800 | C6000
- | |
- 0 1 0 0 0 | CC000 | CE000
- 0 1 0 0 1 | CC800 | CE000
- 0 1 0 1 0 | CD000 | CE000
- 0 1 0 1 1 | CD800 | CE000
- | |
- 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default)
- 0 1 1 0 1 | D0800 | D2000
- 0 1 1 1 0 | D1000 | D2000
- 0 1 1 1 1 | D1800 | D2000
- | |
- 1 0 0 0 0 | D4000 | D6000
- 1 0 0 0 1 | D4800 | D6000
- 1 0 0 1 0 | D5000 | D6000
- 1 0 0 1 1 | D5800 | D6000
- | |
- 1 0 1 0 0 | D8000 | DA000
- 1 0 1 0 1 | D8800 | DA000
- 1 0 1 1 0 | D9000 | DA000
- 1 0 1 1 1 | D9800 | DA000
- | |
- 1 1 0 0 0 | DC000 | DE000
- 1 1 0 0 1 | DC800 | DE000
- 1 1 0 1 0 | DD000 | DE000
- 1 1 0 1 1 | DD800 | DE000
- | |
- 1 1 1 0 0 | E0000 | E2000
- 1 1 1 0 1 | E0800 | E2000
- 1 1 1 1 0 | E1000 | E2000
- 1 1 1 1 1 | E1800 | E2000
-
-
-Setting Interrupt Request Lines (IRQ)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-??????????????????????????????????????
-
-
-Setting the Timeouts
-^^^^^^^^^^^^^^^^^^^^
-
-??????????????????????????????????????
-
-
-8-bit cards ("Made in Taiwan R.O.C.")
--------------------------------------
-
- - from Vojtech Pavlik <vojtech@suse.cz>
-
-I have named this ARCnet card "NONAME", since I got only the card with
-no manual at all and the only text identifying the manufacturer is
-"MADE IN TAIWAN R.O.C" printed on the card.
-
-::
-
- ____________________________________________________________
- | 1 2 3 4 5 6 7 8 |
- | |o|o| JP1 o|o|o|o|o|o|o|o| ON |
- | + o|o|o|o|o|o|o|o| ___|
- | _____________ o|o|o|o|o|o|o|o| OFF _____ | | ID7
- | | | SW1 | | | | ID6
- | > RAM (2k) | ____________________ | H | | S | ID5
- | |_____________| | || y | | W | ID4
- | | || b | | 2 | ID3
- | | || r | | | ID2
- | | || i | | | ID1
- | | 90C65 || d | |___| ID0
- | SW3 | || | |
- | |o|o|o|o|o|o|o|o| ON | || I | |
- | |o|o|o|o|o|o|o|o| | || C | |
- | |o|o|o|o|o|o|o|o| OFF |____________________|| | _____|
- | 1 2 3 4 5 6 7 8 | | | |___
- | ______________ | | | BNC |___|
- | | | |_____| |_____|
- | > EPROM SOCKET | |
- | |______________| |
- | ______________|
- | |
- |_____________________________________________|
-
-Legend::
-
- 90C65 ARCNET Chip
- SW1 1-5: Base Memory Address Select
- 6-8: Base I/O Address Select
- SW2 1-8: Node ID Select (ID0-ID7)
- SW3 1-5: IRQ Select
- 6-7: Extra Timeout
- 8 : ROM Enable
- JP1 Led connector
- BNC Coax connector
-
-Although the jumpers SW1 and SW3 are marked SW, not JP, they are jumpers, not
-switches.
-
-Setting the jumpers to ON means connecting the upper two pins, off the bottom
-two - or - in case of IRQ setting, connecting none of them at all.
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in SW2 are used to set the node ID. Each node attached
-to the network must have an unique node ID which must not be 0.
-Switch 1 (ID0) serves as the least significant bit (LSB).
-
-Setting one of the switches to Off means "1", On means "0".
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Label | Value
- -------|-------|-------
- 1 | ID0 | 1
- 2 | ID1 | 2
- 3 | ID2 | 4
- 4 | ID3 | 8
- 5 | ID4 | 16
- 6 | ID5 | 32
- 7 | ID6 | 64
- 8 | ID7 | 128
-
-Some Examples::
-
- Switch | Hex | Decimal
- 8 7 6 5 4 3 2 1 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed
- 0 0 0 0 0 0 0 1 | 1 | 1
- 0 0 0 0 0 0 1 0 | 2 | 2
- 0 0 0 0 0 0 1 1 | 3 | 3
- . . . | |
- 0 1 0 1 0 1 0 1 | 55 | 85
- . . . | |
- 1 0 1 0 1 0 1 0 | AA | 170
- . . . | |
- 1 1 1 1 1 1 0 1 | FD | 253
- 1 1 1 1 1 1 1 0 | FE | 254
- 1 1 1 1 1 1 1 1 | FF | 255
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The last three switches in switch block SW1 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 6 7 8 | Address
- ------------|--------
- ON ON ON | 260
- OFF ON ON | 290
- ON OFF ON | 2E0 (Manufacturer's default)
- OFF OFF ON | 2F0
- ON ON OFF | 300
- OFF ON OFF | 350
- ON OFF OFF | 380
- OFF OFF OFF | 3E0
-
-
-Setting the Base Memory (RAM) buffer Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer (RAM) requires 2K. The base of this buffer can be
-located in any of eight positions. The address of the Boot Prom is
-memory base + 0x2000.
-
-Jumpers 3-5 of jumper block SW1 select the Memory Base address.
-
-::
-
- Switch | Hex RAM | Hex ROM
- 1 2 3 4 5 | Address | Address *)
- --------------------|---------|-----------
- ON ON ON ON ON | C0000 | C2000
- ON ON OFF ON ON | C4000 | C6000
- ON ON ON OFF ON | CC000 | CE000
- ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default)
- ON ON ON ON OFF | D4000 | D6000
- ON ON OFF ON OFF | D8000 | DA000
- ON ON ON OFF OFF | DC000 | DE000
- ON ON OFF OFF OFF | E0000 | E2000
-
- *) To enable the Boot ROM set the jumper 8 of jumper block SW3 to position ON.
-
-The jumpers 1 and 2 probably add 0x0800, 0x1000 and 0x1800 to RAM adders.
-
-Setting the Interrupt Line
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Jumpers 1-5 of the jumper block SW3 control the IRQ level::
-
- Jumper | IRQ
- 1 2 3 4 5 |
- ----------------------------
- ON OFF OFF OFF OFF | 2
- OFF ON OFF OFF OFF | 3
- OFF OFF ON OFF OFF | 4
- OFF OFF OFF ON OFF | 5
- OFF OFF OFF OFF ON | 7
-
-
-Setting the Timeout Parameters
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The jumpers 6-7 of the jumper block SW3 are used to determine the timeout
-parameters. These two jumpers are normally left in the OFF position.
-
-
-
-(Generic Model 9058)
---------------------
- - from Andrew J. Kroll <ag784@freenet.buffalo.edu>
- - Sorry this sat in my to-do box for so long, Andrew! (yikes - over a
- year!)
-
-::
-
- _____
- | <
- | .---'
- ________________________________________________________________ | |
- | | SW2 | | |
- | ___________ |_____________| | |
- | | | 1 2 3 4 5 6 ___| |
- | > 6116 RAM | _________ 8 | | |
- | |___________| |20MHzXtal| 7 | | |
- | |_________| __________ 6 | S | |
- | 74LS373 | |- 5 | W | |
- | _________ | E |- 4 | | |
- | >_______| ______________|..... P |- 3 | 3 | |
- | | | : O |- 2 | | |
- | | | : X |- 1 |___| |
- | ________________ | | : Y |- | |
- | | SW1 | | SL90C65 | : |- | |
- | |________________| | | : B |- | |
- | 1 2 3 4 5 6 7 8 | | : O |- | |
- | |_________o____|..../ A |- _______| |
- | ____________________ | R |- | |------,
- | | | | D |- | BNC | # |
- | > 2764 PROM SOCKET | |__________|- |_______|------'
- | |____________________| _________ | |
- | >________| <- 74LS245 | |
- | | |
- |___ ______________| |
- |H H H H H H H H H H H H H H H H H H H H H H H| | |
- |U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U| | |
- \|
-
-Legend::
-
- SL90C65 ARCNET Controller / Transceiver /Logic
- SW1 1-5: IRQ Select
- 6: ET1
- 7: ET2
- 8: ROM ENABLE
- SW2 1-3: Memory Buffer/PROM Address
- 3-6: I/O Address Map
- SW3 1-8: Node ID Select
- BNC BNC RG62/U Connection
- *I* have had success using RG59B/U with *NO* terminators!
- What gives?!
-
-SW1: Timeouts, Interrupt and ROM
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To select a hardware interrupt level set one (only one!) of the dip switches
-up (on) SW1...(switches 1-5)
-IRQ3, IRQ4, IRQ5, IRQ7, IRQ2. The Manufacturer's default is IRQ2.
-
-The switches on SW1 labeled EXT1 (switch 6) and EXT2 (switch 7)
-are used to determine the timeout parameters. These two dip switches
-are normally left off (down).
-
- To enable the 8K Boot PROM position SW1 switch 8 on (UP) labeled ROM.
- The default is jumper ROM not installed.
-
-
-Setting the I/O Base Address
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The last three switches in switch group SW2 are used to select one
-of eight possible I/O Base addresses using the following table::
-
-
- Switch | Hex I/O
- 4 5 6 | Address
- -------|--------
- 0 0 0 | 260
- 0 0 1 | 290
- 0 1 0 | 2E0 (Manufacturer's default)
- 0 1 1 | 2F0
- 1 0 0 | 300
- 1 0 1 | 350
- 1 1 0 | 380
- 1 1 1 | 3E0
-
-
-Setting the Base Memory Address (RAM & ROM)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The memory buffer requires 2K of a 16K block of RAM. The base of this
-16K block can be located in any of eight positions.
-Switches 1-3 of switch group SW2 select the Base of the 16K block.
-(0 = DOWN, 1 = UP)
-I could, however, only verify two settings...
-
-
-::
-
- Switch| Hex RAM | Hex ROM
- 1 2 3 | Address | Address
- ------|---------|-----------
- 0 0 0 | E0000 | E2000
- 0 0 1 | D0000 | D2000 (Manufacturer's default)
- 0 1 0 | ????? | ?????
- 0 1 1 | ????? | ?????
- 1 0 0 | ????? | ?????
- 1 0 1 | ????? | ?????
- 1 1 0 | ????? | ?????
- 1 1 1 | ????? | ?????
-
-
-Setting the Node ID
-^^^^^^^^^^^^^^^^^^^
-
-The eight switches in group SW3 are used to set the node ID.
-Each node attached to the network must have an unique node ID which
-must be different from 0.
-Switch 1 serves as the least significant bit (LSB).
-switches in the DOWN position are OFF (0) and in the UP position are ON (1)
-
-The node ID is the sum of the values of all switches set to "1"
-These values are::
-
- Switch | Value
- -------|-------
- 1 | 1
- 2 | 2
- 3 | 4
- 4 | 8
- 5 | 16
- 6 | 32
- 7 | 64
- 8 | 128
-
-Some Examples::
-
- Switch# | Hex | Decimal
- 8 7 6 5 4 3 2 1 | Node ID | Node ID
- ----------------|---------|---------
- 0 0 0 0 0 0 0 0 | not allowed <-.
- 0 0 0 0 0 0 0 1 | 1 | 1 |
- 0 0 0 0 0 0 1 0 | 2 | 2 |
- 0 0 0 0 0 0 1 1 | 3 | 3 |
- . . . | | |
- 0 1 0 1 0 1 0 1 | 55 | 85 |
- . . . | | + Don't use 0 or 255!
- 1 0 1 0 1 0 1 0 | AA | 170 |
- . . . | | |
- 1 1 1 1 1 1 0 1 | FD | 253 |
- 1 1 1 1 1 1 1 0 | FE | 254 |
- 1 1 1 1 1 1 1 1 | FF | 255 <-'
-
-
-Tiara
-=====
-
-(model unknown)
----------------
-
- - from Christoph Lameter <cl@gentwo.org>
-
-
-Here is information about my card as far as I could figure it out::
-
-
- ----------------------------------------------- tiara
- Tiara LanCard of Tiara Computer Systems.
-
- +----------------------------------------------+
- ! ! Transmitter Unit ! !
- ! +------------------+ -------
- ! MEM Coax Connector
- ! ROM 7654321 <- I/O -------
- ! : : +--------+ !
- ! : : ! 90C66LJ! +++
- ! : : ! ! !D Switch to set
- ! : : ! ! !I the Nodenumber
- ! : : +--------+ !P
- ! !++
- ! 234567 <- IRQ !
- +------------!!!!!!!!!!!!!!!!!!!!!!!!--------+
- !!!!!!!!!!!!!!!!!!!!!!!!
-
-- 0 = Jumper Installed
-- 1 = Open
-
-Top Jumper line Bit 7 = ROM Enable 654=Memory location 321=I/O
-
-Settings for Memory Location (Top Jumper Line)
-
-=== ================
-456 Address selected
-=== ================
-000 C0000
-001 C4000
-010 CC000
-011 D0000
-100 D4000
-101 D8000
-110 DC000
-111 E0000
-=== ================
-
-Settings for I/O Address (Top Jumper Line)
-
-=== ====
-123 Port
-=== ====
-000 260
-001 290
-010 2E0
-011 2F0
-100 300
-101 350
-110 380
-111 3E0
-=== ====
-
-Settings for IRQ Selection (Lower Jumper Line)
-
-====== =====
-234567
-====== =====
-011111 IRQ 2
-101111 IRQ 3
-110111 IRQ 4
-111011 IRQ 5
-111110 IRQ 7
-====== =====
-
-Other Cards
-===========
-
-I have no information on other models of ARCnet cards at the moment.
-
-Thanks.
diff --git a/Documentation/networking/arcnet.rst b/Documentation/networking/arcnet.rst
index cd43a18ad149..ce1b009bef96 100644
--- a/Documentation/networking/arcnet.rst
+++ b/Documentation/networking/arcnet.rst
@@ -8,7 +8,7 @@ ARCnet
.. note::
- See also arcnet-hardware.txt in this directory for jumper-setting
+ See also arcnet-hardware.rst in this directory for jumper-setting
and cabling information if you're like many of us and didn't happen to get a
manual with your ARCnet card.
@@ -88,157 +88,43 @@ versions are available on my WWW page, or via e-mail if you don't have WWW
access.
-Installing the Driver
----------------------
-All you will need to do in order to install the driver is::
+Supported Hardware
+------------------
- make config
- (be sure to choose ARCnet in the network devices
- and at least one chipset driver.)
- make clean
- make zImage
+Only PCI and PCI Express devices based on the COM20020 chipset are supported.
+This is the newest chipset from SMC with support for promiscuous mode (packet
+sniffing), extra diagnostic information, etc. These devices use the com20020_pci
+driver.
-If you obtained this ARCnet package as an upgrade to the ARCnet driver in
-your current kernel, you will need to first copy arcnet.c over the one in
-the linux/drivers/net directory.
+Support for older chipsets and ISA and PCMCIA devices was previously available
+but has been removed.
-You will know the driver is installed properly if you get some ARCnet
-messages when you reboot into the new Linux kernel.
-There are four chipset options:
-
- 1. Standard ARCnet COM90xx chipset.
-
-This is the normal ARCnet card, which you've probably got. This is the only
-chipset driver which will autoprobe if not told where the card is.
-It following options on the command line::
-
- com90xx=[<io>[,<irq>[,<shmem>]]][,<name>] | <name>
-
-If you load the chipset support as a module, the options are::
-
- io=<io> irq=<irq> shmem=<shmem> device=<name>
-
-To disable the autoprobe, just specify "com90xx=" on the kernel command line.
-To specify the name alone, but allow autoprobe, just put "com90xx=<name>"
-
- 2. ARCnet COM20020 chipset.
+Configuring the Driver
+----------------------
-This is the new chipset from SMC with support for promiscuous mode (packet
-sniffing), extra diagnostic information, etc. Unfortunately, there is no
-sensible method of autoprobing for these cards. You must specify the I/O
-address on the kernel command line.
+The COM20020 driver will be loaded automatically at boot if a supported card is
+detected.
-The command line options are::
+If the com20020_pci driver was compiled as a loadable module, the options are::
- com20020=<io>[,<irq>[,<node_ID>[,backplane[,CKP[,timeout]]]]][,name]
+ node=<node_ID> backplane=<backplane> clockp=<CKP> clockm=<CKM>
+ timeout=<timeout> device=<interface_name>
-If you load the chipset support as a module, the options are::
+If the driver was compiled into the kernel, the same options can be specified on
+the kernel command line by prefixing them with `com20020_pci.`, as in the
+following example::
- io=<io> irq=<irq> node=<node_ID> backplane=<backplane> clock=<CKP>
- timeout=<timeout> device=<name>
+ com20020_pci.device=eth1
The COM20020 chipset allows you to set the node ID in software, overriding the
default which is still set in DIP switches on the card. If you don't have the
-COM20020 data sheets, and you don't know what the other three options refer
+COM20020 data sheets, and you don't know what the other options refer
to, then they won't interest you - forget them.
- 3. ARCnet COM90xx chipset in IO-mapped mode.
-
-This will also work with the normal ARCnet cards, but doesn't use the shared
-memory. It performs less well than the above driver, but is provided in case
-you have a card which doesn't support shared memory, or (strangely) in case
-you have so many ARCnet cards in your machine that you run out of shmem slots.
-If you don't give the IO address on the kernel command line, then the driver
-will not find the card.
-
-The command line options are::
-
- com90io=<io>[,<irq>][,<name>]
-
-If you load the chipset support as a module, the options are:
- io=<io> irq=<irq> device=<name>
-
- 4. ARCnet RIM I cards.
-
-These are COM90xx chips which are _completely_ memory mapped. The support for
-these is not tested. If you have one, please mail the author with a success
-report. All options must be specified, except the device name.
-Command line options::
-
- arcrimi=<shmem>,<irq>,<node_ID>[,<name>]
-
-If you load the chipset support as a module, the options are::
-
- shmem=<shmem> irq=<irq> node=<node_ID> device=<name>
-
-
-Loadable Module Support
------------------------
-
-Configure and rebuild Linux. When asked, answer 'm' to "Generic ARCnet
-support" and to support for your ARCnet chipset if you want to use the
-loadable module. You can also say 'y' to "Generic ARCnet support" and 'm'
-to the chipset support if you wish.
-
-::
-
- make config
- make clean
- make zImage
- make modules
-
-If you're using a loadable module, you need to use insmod to load it, and
-you can specify various characteristics of your card on the command
-line. (In recent versions of the driver, autoprobing is much more reliable
-and works as a module, so most of this is now unnecessary.)
-
-For example::
-
- cd /usr/src/linux/modules
- insmod arcnet.o
- insmod com90xx.o
- insmod com20020.o io=0x2e0 device=eth1
-
-
-Using the Driver
-----------------
-
-If you build your kernel with ARCnet COM90xx support included, it should
-probe for your card automatically when you boot. If you use a different
-chipset driver complied into the kernel, you must give the necessary options
-on the kernel command line, as detailed above.
-
-Go read the NET-2-HOWTO and ETHERNET-HOWTO for Linux; they should be
-available where you picked up this driver. Think of your ARCnet as a
-souped-up (or down, as the case may be) Ethernet card.
-
-By the way, be sure to change all references from "eth0" to "arc0" in the
-HOWTOs. Remember that ARCnet isn't a "true" Ethernet, and the device name
-is DIFFERENT.
-
-
-Multiple Cards in One Computer
-------------------------------
-
-Linux has pretty good support for this now, but since I've been busy, the
-ARCnet driver has somewhat suffered in this respect. COM90xx support, if
-compiled into the kernel, will (try to) autodetect all the installed cards.
-
-If you have other cards, with support compiled into the kernel, then you can
-just repeat the options on the kernel command line, e.g.::
-
- LILO: linux com20020=0x2e0 com20020=0x380 com90io=0x260
-
-If you have the chipset support built as a loadable module, then you need to
-do something like this::
-
- insmod -o arc0 com90xx
- insmod -o arc1 com20020 io=0x2e0
- insmod -o arc2 com90xx
-
-The ARCnet drivers will now sort out their names automatically.
+Otherwise, ARCnet can be configured in a similar way to Ethernet, with the
+exception that ARCnet interface names begin with `arc`.
How do I get it to work with...?
@@ -524,10 +410,6 @@ first! D_DURING displays 4-5 lines for each packet sent or received. D_TX,
D_RX, and D_SKB actually DISPLAY each packet as it is sent or received,
which is obviously quite big.
-Starting with v2.40 ALPHA, the autoprobe routines have changed
-significantly. In particular, they won't tell you why the card was not
-found unless you turn on the D_INIT_REASONS debugging flag.
-
Once the driver is running, you can run the arcdump shell script (available
from me or in the full ARCnet package, if you have it) as root to list the
contents of the arcnet buffers at any time. To make any sense at all out of
@@ -548,7 +430,7 @@ out which bytes are being used by a packet.
You can change the debug level without recompiling the kernel by typing::
ifconfig arc0 down metric 1xxx
- /etc/rc.d/rc.inet1
+ ifconfig arc0 up
where "xxx" is the debug level you want. For example, "metric 1015" would put
you at debug level 15. Debug level 7 is currently the default.
diff --git a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig
index 3629afbe5d75..1d223be90993 100644
--- a/arch/mips/configs/mtx1_defconfig
+++ b/arch/mips/configs/mtx1_defconfig
@@ -221,12 +221,8 @@ CONFIG_ARCNET_1201=m
CONFIG_ARCNET_1051=m
CONFIG_ARCNET_RAW=m
CONFIG_ARCNET_CAP=m
-CONFIG_ARCNET_COM90xx=m
-CONFIG_ARCNET_COM90xxIO=m
-CONFIG_ARCNET_RIM_I=m
CONFIG_ARCNET_COM20020=m
CONFIG_ARCNET_COM20020_PCI=m
-CONFIG_ARCNET_COM20020_CS=m
CONFIG_VORTEX=m
CONFIG_TYPHOON=m
CONFIG_ADAPTEC_STARFIRE=m
diff --git a/drivers/net/arcnet/Kconfig b/drivers/net/arcnet/Kconfig
index d1d07a1d4fbc..4611a37168c4 100644
--- a/drivers/net/arcnet/Kconfig
+++ b/drivers/net/arcnet/Kconfig
@@ -4,7 +4,7 @@
#
menuconfig ARCNET
- depends on NETDEVICES && (ISA || PCI || PCMCIA) && HAS_IOPORT
+ depends on NETDEVICES && PCI && HAS_IOPORT
tristate "ARCnet support"
help
If you have a network card of this type, say Y and check out the
@@ -12,9 +12,7 @@ menuconfig ARCNET
<file:Documentation/networking/arcnet.rst>.
You need both this driver, and the driver for the particular ARCnet
- chipset of your card. If you don't know, then it's probably a
- COM90xx type card, so say Y (or M) to "ARCnet COM90xx chipset
- support" below.
+ chipset of your card.
To compile this driver as a module, choose M here. The module will
be called arcnet.
@@ -70,38 +68,6 @@ config ARCNET_CAP
Cap only listens to protocol 1-8.
-config ARCNET_COM90xx
- tristate "ARCnet COM90xx (normal) chipset driver"
- help
- This is the chipset driver for the standard COM90xx cards. If you
- have always used the old ARCnet driver without knowing what type of
- card you had, this is probably the one for you.
-
- To compile this driver as a module, choose M here. The module will
- be called com90xx.
-
-config ARCNET_COM90xxIO
- tristate "ARCnet COM90xx (IO mapped) chipset driver"
- help
- This is the chipset driver for the COM90xx cards, using them in
- IO-mapped mode instead of memory-mapped mode. This is slower than
- the normal driver. Only use it if your card doesn't support shared
- memory.
-
- To compile this driver as a module, choose M here. The module will
- be called com90io.
-
-config ARCNET_RIM_I
- tristate "ARCnet COM90xx (RIM I) chipset driver"
- help
- This is yet another chipset driver for the COM90xx cards, but this
- time only using memory-mapped mode, and no IO ports at all. This
- driver is completely untested, so if you have one of these cards,
- please mail <dwmw2@infradead.org>, especially if it works!
-
- To compile this driver as a module, choose M here. The module will
- be called arc-rimi.
-
config ARCNET_COM20020
tristate "ARCnet COM20020 chipset driver"
depends on LEDS_CLASS
@@ -113,22 +79,8 @@ config ARCNET_COM20020
To compile this driver as a module, choose M here. The module will
be called com20020.
-config ARCNET_COM20020_ISA
- tristate "Support for COM20020 on ISA"
- depends on ARCNET_COM20020 && ISA
-
config ARCNET_COM20020_PCI
tristate "Support for COM20020 on PCI"
depends on ARCNET_COM20020 && PCI
-config ARCNET_COM20020_CS
- tristate "COM20020 ARCnet PCMCIA support"
- depends on ARCNET_COM20020 && PCMCIA
- help
- Say Y here if you intend to attach this type of ARCnet PCMCIA card
- to your computer.
-
- To compile this driver as a module, choose M here: the module will be
- called com20020_cs. If unsure, say N.
-
endif # ARCNET
diff --git a/drivers/net/arcnet/Makefile b/drivers/net/arcnet/Makefile
index 53525e8ea130..e5df03a08b0e 100644
--- a/drivers/net/arcnet/Makefile
+++ b/drivers/net/arcnet/Makefile
@@ -7,10 +7,5 @@ obj-$(CONFIG_ARCNET_1201) += rfc1201.o
obj-$(CONFIG_ARCNET_1051) += rfc1051.o
obj-$(CONFIG_ARCNET_RAW) += arc-rawmode.o
obj-$(CONFIG_ARCNET_CAP) += capmode.o
-obj-$(CONFIG_ARCNET_COM90xx) += com90xx.o
-obj-$(CONFIG_ARCNET_COM90xxIO) += com90io.o
-obj-$(CONFIG_ARCNET_RIM_I) += arc-rimi.o
obj-$(CONFIG_ARCNET_COM20020) += com20020.o
-obj-$(CONFIG_ARCNET_COM20020_ISA) += com20020-isa.o
obj-$(CONFIG_ARCNET_COM20020_PCI) += com20020-pci.o
-obj-$(CONFIG_ARCNET_COM20020_CS) += com20020_cs.o
diff --git a/drivers/net/arcnet/arc-rimi.c b/drivers/net/arcnet/arc-rimi.c
deleted file mode 100644
index fb3d3565aa9a..000000000000
--- a/drivers/net/arcnet/arc-rimi.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards
- *
- * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
- * Derived from skeleton.c by Donald Becker.
- *
- * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
- * for sponsoring the further development of this driver.
- *
- * **********************
- *
- * The original copyright of skeleton.c was as follows:
- *
- * skeleton.c Written 1993 by Donald Becker.
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency. This software may only be used
- * and distributed according to the terms of the GNU General Public License as
- * modified by SRC, incorporated herein by reference.
- *
- * **********************
- *
- * For more details, see drivers/net/arcnet.c
- *
- * **********************
- */
-
-#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/netdevice.h>
-#include <linux/memblock.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/io.h>
-
-#include "arcdevice.h"
-#include "com9026.h"
-
-/* Internal function declarations */
-
-static int arcrimi_probe(struct net_device *dev);
-static int arcrimi_found(struct net_device *dev);
-static void arcrimi_command(struct net_device *dev, int command);
-static int arcrimi_status(struct net_device *dev);
-static void arcrimi_setmask(struct net_device *dev, int mask);
-static int arcrimi_reset(struct net_device *dev, int really_reset);
-static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
- void *buf, int count);
-static void arcrimi_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count);
-
-/* Handy defines for ARCnet specific stuff */
-
-/* Amount of I/O memory used by the card */
-#define BUFFER_SIZE (512)
-#define MIRROR_SIZE (BUFFER_SIZE * 4)
-
-/* We cannot probe for a RIM I card; one reason is I don't know how to reset
- * them. In fact, we can't even get their node ID automatically. So, we
- * need to be passed a specific shmem address, IRQ, and node ID.
- */
-static int __init arcrimi_probe(struct net_device *dev)
-{
- if (BUGLVL(D_NORMAL)) {
- pr_info("%s\n", "RIM I (entirely mem-mapped) support");
- pr_info("E-mail me if you actually test the RIM I driver, please!\n");
- pr_info("Given: node %02Xh, shmem %lXh, irq %d\n",
- dev->dev_addr[0], dev->mem_start, dev->irq);
- }
-
- if (dev->mem_start <= 0 || dev->irq <= 0) {
- if (BUGLVL(D_NORMAL))
- pr_err("No autoprobe for RIM I; you must specify the shmem and irq!\n");
- return -ENODEV;
- }
- if (dev->dev_addr[0] == 0) {
- if (BUGLVL(D_NORMAL))
- pr_err("You need to specify your card's station ID!\n");
- return -ENODEV;
- }
- /* Grab the memory region at mem_start for MIRROR_SIZE bytes.
- * Later in arcrimi_found() the real size will be determined
- * and this reserve will be released and the correct size
- * will be taken.
- */
- if (!request_mem_region(dev->mem_start, MIRROR_SIZE, "arcnet (90xx)")) {
- if (BUGLVL(D_NORMAL))
- pr_notice("Card memory already allocated\n");
- return -ENODEV;
- }
- return arcrimi_found(dev);
-}
-
-static int check_mirror(unsigned long addr, size_t size)
-{
- void __iomem *p;
- int res = -1;
-
- if (!request_mem_region(addr, size, "arcnet (90xx)"))
- return -1;
-
- p = ioremap(addr, size);
- if (p) {
- if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue)
- res = 1;
- else
- res = 0;
- iounmap(p);
- }
-
- release_mem_region(addr, size);
- return res;
-}
-
-/* Set up the struct net_device associated with this card.
- * Called after probing succeeds.
- */
-static int __init arcrimi_found(struct net_device *dev)
-{
- struct arcnet_local *lp;
- unsigned long first_mirror, last_mirror, shmem;
- void __iomem *p;
- int mirror_size;
- int err;
-
- p = ioremap(dev->mem_start, MIRROR_SIZE);
- if (!p) {
- release_mem_region(dev->mem_start, MIRROR_SIZE);
- arc_printk(D_NORMAL, dev, "Can't ioremap\n");
- return -ENODEV;
- }
-
- /* reserve the irq */
- if (request_irq(dev->irq, arcnet_interrupt, 0, "arcnet (RIM I)", dev)) {
- iounmap(p);
- release_mem_region(dev->mem_start, MIRROR_SIZE);
- arc_printk(D_NORMAL, dev, "Can't get IRQ %d!\n", dev->irq);
- return -ENODEV;
- }
-
- shmem = dev->mem_start;
- arcnet_writeb(TESTvalue, p, COM9026_REG_W_INTMASK);
- arcnet_writeb(TESTvalue, p, COM9026_REG_W_COMMAND);
- /* actually the station/node ID */
-
- /* find the real shared memory start/end points, including mirrors */
-
- /* guess the actual size of one "memory mirror" - the number of
- * bytes between copies of the shared memory. On most cards, it's
- * 2k (or there are no mirrors at all) but on some, it's 4k.
- */
- mirror_size = MIRROR_SIZE;
- if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue &&
- check_mirror(shmem - MIRROR_SIZE, MIRROR_SIZE) == 0 &&
- check_mirror(shmem - 2 * MIRROR_SIZE, MIRROR_SIZE) == 1)
- mirror_size = 2 * MIRROR_SIZE;
-
- first_mirror = shmem - mirror_size;
- while (check_mirror(first_mirror, mirror_size) == 1)
- first_mirror -= mirror_size;
- first_mirror += mirror_size;
-
- last_mirror = shmem + mirror_size;
- while (check_mirror(last_mirror, mirror_size) == 1)
- last_mirror += mirror_size;
- last_mirror -= mirror_size;
-
- dev->mem_start = first_mirror;
- dev->mem_end = last_mirror + MIRROR_SIZE - 1;
-
- /* initialize the rest of the device structure. */
-
- lp = netdev_priv(dev);
- lp->card_name = "RIM I";
- lp->hw.command = arcrimi_command;
- lp->hw.status = arcrimi_status;
- lp->hw.intmask = arcrimi_setmask;
- lp->hw.reset = arcrimi_reset;
- lp->hw.owner = THIS_MODULE;
- lp->hw.copy_to_card = arcrimi_copy_to_card;
- lp->hw.copy_from_card = arcrimi_copy_from_card;
-
- /* re-reserve the memory region - arcrimi_probe() allocated this reqion
- * but didn't know the real size. Free that region and then re-get
- * with the correct size. There is a VERY slim chance this could
- * fail.
- */
- iounmap(p);
- release_mem_region(shmem, MIRROR_SIZE);
- if (!request_mem_region(dev->mem_start,
- dev->mem_end - dev->mem_start + 1,
- "arcnet (90xx)")) {
- arc_printk(D_NORMAL, dev, "Card memory already allocated\n");
- goto err_free_irq;
- }
-
- lp->mem_start = ioremap(dev->mem_start,
- dev->mem_end - dev->mem_start + 1);
- if (!lp->mem_start) {
- arc_printk(D_NORMAL, dev, "Can't remap device memory!\n");
- goto err_release_mem;
- }
-
- /* get and check the station ID from offset 1 in shmem */
- arcnet_set_addr(dev, arcnet_readb(lp->mem_start,
- COM9026_REG_R_STATION));
-
- arc_printk(D_NORMAL, dev, "ARCnet RIM I: station %02Xh found at IRQ %d, ShMem %lXh (%ld*%d bytes)\n",
- dev->dev_addr[0],
- dev->irq, dev->mem_start,
- (dev->mem_end - dev->mem_start + 1) / mirror_size,
- mirror_size);
-
- err = register_netdev(dev);
- if (err)
- goto err_unmap;
-
- return 0;
-
-err_unmap:
- iounmap(lp->mem_start);
-err_release_mem:
- release_mem_region(dev->mem_start, dev->mem_end - dev->mem_start + 1);
-err_free_irq:
- free_irq(dev->irq, dev);
- return -EIO;
-}
-
-/* Do a hardware reset on the card, and set up necessary registers.
- *
- * This should be called as little as possible, because it disrupts the
- * token on the network (causes a RECON) and requires a significant delay.
- *
- * However, it does make sure the card is in a defined state.
- */
-static int arcrimi_reset(struct net_device *dev, int really_reset)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *ioaddr = lp->mem_start + 0x800;
-
- arc_printk(D_INIT, dev, "Resetting %s (status=%02Xh)\n",
- dev->name, arcnet_readb(ioaddr, COM9026_REG_R_STATUS));
-
- if (really_reset) {
- arcnet_writeb(TESTvalue, ioaddr, -0x800); /* fake reset */
- return 0;
- }
- /* clear flags & end reset */
- arcnet_writeb(CFLAGScmd | RESETclear, ioaddr, COM9026_REG_W_COMMAND);
- arcnet_writeb(CFLAGScmd | CONFIGclear, ioaddr, COM9026_REG_W_COMMAND);
-
- /* enable extended (512-byte) packets */
- arcnet_writeb(CONFIGcmd | EXTconf, ioaddr, COM9026_REG_W_COMMAND);
-
- /* done! return success. */
- return 0;
-}
-
-static void arcrimi_setmask(struct net_device *dev, int mask)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *ioaddr = lp->mem_start + 0x800;
-
- arcnet_writeb(mask, ioaddr, COM9026_REG_W_INTMASK);
-}
-
-static int arcrimi_status(struct net_device *dev)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *ioaddr = lp->mem_start + 0x800;
-
- return arcnet_readb(ioaddr, COM9026_REG_R_STATUS);
-}
-
-static void arcrimi_command(struct net_device *dev, int cmd)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *ioaddr = lp->mem_start + 0x800;
-
- arcnet_writeb(cmd, ioaddr, COM9026_REG_W_COMMAND);
-}
-
-static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
- void *buf, int count)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
-
- TIME(dev, "memcpy_toio", count, memcpy_toio(memaddr, buf, count));
-}
-
-static void arcrimi_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
-
- TIME(dev, "memcpy_fromio", count, memcpy_fromio(buf, memaddr, count));
-}
-
-static int node;
-static int io; /* use the insmod io= irq= node= options */
-static int irq;
-static char device[9]; /* use eg. device=arc1 to change name */
-
-module_param(node, int, 0);
-module_param(io, int, 0);
-module_param(irq, int, 0);
-module_param_string(device, device, sizeof(device), 0);
-MODULE_DESCRIPTION("ARCnet COM90xx RIM I chipset driver");
-MODULE_LICENSE("GPL");
-
-static struct net_device *my_dev;
-
-static int __init arc_rimi_init(void)
-{
- struct net_device *dev;
-
- dev = alloc_arcdev(device);
- if (!dev)
- return -ENOMEM;
-
- if (node && node != 0xff)
- arcnet_set_addr(dev, node);
-
- dev->mem_start = io;
- dev->irq = irq;
- if (dev->irq == 2)
- dev->irq = 9;
-
- if (arcrimi_probe(dev)) {
- free_arcdev(dev);
- return -EIO;
- }
-
- my_dev = dev;
- return 0;
-}
-
-static void __exit arc_rimi_exit(void)
-{
- struct net_device *dev = my_dev;
- struct arcnet_local *lp = netdev_priv(dev);
-
- unregister_netdev(dev);
- iounmap(lp->mem_start);
- release_mem_region(dev->mem_start, dev->mem_end - dev->mem_start + 1);
- free_irq(dev->irq, dev);
- free_arcdev(dev);
-}
-
-#ifndef MODULE
-static int __init arcrimi_setup(char *s)
-{
- int ints[8];
-
- s = get_options(s, 8, ints);
- if (!ints[0])
- return 1;
- switch (ints[0]) {
- default: /* ERROR */
- pr_err("Too many arguments\n");
- fallthrough;
- case 3: /* Node ID */
- node = ints[3];
- fallthrough;
- case 2: /* IRQ */
- irq = ints[2];
- fallthrough;
- case 1: /* IO address */
- io = ints[1];
- }
- if (*s)
- snprintf(device, sizeof(device), "%s", s);
- return 1;
-}
-__setup("arcrimi=", arcrimi_setup);
-#endif /* MODULE */
-
-module_init(arc_rimi_init)
-module_exit(arc_rimi_exit)
diff --git a/drivers/net/arcnet/com20020-isa.c b/drivers/net/arcnet/com20020-isa.c
deleted file mode 100644
index fef2ac2852a8..000000000000
--- a/drivers/net/arcnet/com20020-isa.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Linux ARCnet driver - COM20020 chipset support
- *
- * Written 1997 by David Woodhouse.
- * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
- * Derived from skeleton.c by Donald Becker.
- *
- * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
- * for sponsoring the further development of this driver.
- *
- * **********************
- *
- * The original copyright of skeleton.c was as follows:
- *
- * skeleton.c Written 1993 by Donald Becker.
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency. This software may only be used
- * and distributed according to the terms of the GNU General Public License as
- * modified by SRC, incorporated herein by reference.
- *
- * **********************
- *
- * For more details, see drivers/net/arcnet.c
- *
- * **********************
- */
-
-#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
-
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/ioport.h>
-#include <linux/errno.h>
-#include <linux/delay.h>
-#include <linux/netdevice.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/memblock.h>
-#include <linux/io.h>
-
-#include "arcdevice.h"
-#include "com20020.h"
-
-/* We cannot (yet) probe for an IO mapped card, although we can check that
- * it's where we were told it was, and even do autoirq.
- */
-static int __init com20020isa_probe(struct net_device *dev)
-{
- int ioaddr;
- unsigned long airqmask;
- struct arcnet_local *lp = netdev_priv(dev);
- int err;
-
- if (BUGLVL(D_NORMAL))
- pr_info("%s\n", "COM20020 ISA support (by David Woodhouse et al.)");
-
- ioaddr = dev->base_addr;
- if (!ioaddr) {
- arc_printk(D_NORMAL, dev, "No autoprobe (yet) for IO mapped cards; you must specify the base address!\n");
- return -ENODEV;
- }
- if (!request_region(ioaddr, ARCNET_TOTAL_SIZE, "arcnet (COM20020)")) {
- arc_printk(D_NORMAL, dev, "IO region %xh-%xh already allocated.\n",
- ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
- return -ENXIO;
- }
- if (arcnet_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
- arc_printk(D_NORMAL, dev, "IO address %x empty\n", ioaddr);
- err = -ENODEV;
- goto out;
- }
- if (com20020_check(dev)) {
- err = -ENODEV;
- goto out;
- }
-
- if (!dev->irq) {
- /* if we do this, we're sure to get an IRQ since the
- * card has just reset and the NORXflag is on until
- * we tell it to start receiving.
- */
- arc_printk(D_INIT_REASONS, dev, "intmask was %02Xh\n",
- arcnet_inb(ioaddr, COM20020_REG_R_STATUS));
- arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
- airqmask = probe_irq_on();
- arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
- udelay(1);
- arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
- dev->irq = probe_irq_off(airqmask);
-
- if ((int)dev->irq <= 0) {
- arc_printk(D_INIT_REASONS, dev, "Autoprobe IRQ failed first time\n");
- airqmask = probe_irq_on();
- arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
- udelay(5);
- arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
- dev->irq = probe_irq_off(airqmask);
- if ((int)dev->irq <= 0) {
- arc_printk(D_NORMAL, dev, "Autoprobe IRQ failed.\n");
- err = -ENODEV;
- goto out;
- }
- }
- }
-
- lp->card_name = "ISA COM20020";
-
- err = com20020_found(dev, 0);
- if (err != 0)
- goto out;
-
- return 0;
-
-out:
- release_region(ioaddr, ARCNET_TOTAL_SIZE);
- return err;
-}
-
-static int node = 0;
-static int io = 0x0; /* <--- EDIT THESE LINES FOR YOUR CONFIGURATION */
-static int irq = 0; /* or use the insmod io= irq= shmem= options */
-static char device[9]; /* use eg. device="arc1" to change name */
-static int timeout = 3;
-static int backplane = 0;
-static int clockp = 0;
-static int clockm = 0;
-
-module_param(node, int, 0);
-module_param_hw(io, int, ioport, 0);
-module_param_hw(irq, int, irq, 0);
-module_param_string(device, device, sizeof(device), 0);
-module_param(timeout, int, 0);
-module_param(backplane, int, 0);
-module_param(clockp, int, 0);
-module_param(clockm, int, 0);
-
-MODULE_DESCRIPTION("ARCnet COM20020 chipset ISA driver");
-MODULE_LICENSE("GPL");
-
-static struct net_device *my_dev;
-
-static int __init com20020_init(void)
-{
- struct net_device *dev;
- struct arcnet_local *lp;
-
- dev = alloc_arcdev(device);
- if (!dev)
- return -ENOMEM;
-
- if (node && node != 0xff)
- arcnet_set_addr(dev, node);
-
- dev->netdev_ops = &com20020_netdev_ops;
-
- lp = netdev_priv(dev);
- lp->backplane = backplane;
- lp->clockp = clockp & 7;
- lp->clockm = clockm & 3;
- lp->timeout = timeout & 3;
- lp->hw.owner = THIS_MODULE;
-
- dev->base_addr = io;
- dev->irq = irq;
-
- if (dev->irq == 2)
- dev->irq = 9;
-
- if (com20020isa_probe(dev)) {
- free_arcdev(dev);
- return -EIO;
- }
-
- my_dev = dev;
- return 0;
-}
-
-static void __exit com20020_exit(void)
-{
- unregister_netdev(my_dev);
- free_irq(my_dev->irq, my_dev);
- release_region(my_dev->base_addr, ARCNET_TOTAL_SIZE);
- free_arcdev(my_dev);
-}
-
-#ifndef MODULE
-static int __init com20020isa_setup(char *s)
-{
- int ints[8];
-
- s = get_options(s, 8, ints);
- if (!ints[0])
- return 1;
-
- switch (ints[0]) {
- default: /* ERROR */
- pr_info("Too many arguments\n");
- fallthrough;
- case 6: /* Timeout */
- timeout = ints[6];
- fallthrough;
- case 5: /* CKP value */
- clockp = ints[5];
- fallthrough;
- case 4: /* Backplane flag */
- backplane = ints[4];
- fallthrough;
- case 3: /* Node ID */
- node = ints[3];
- fallthrough;
- case 2: /* IRQ */
- irq = ints[2];
- fallthrough;
- case 1: /* IO address */
- io = ints[1];
- }
- if (*s)
- snprintf(device, sizeof(device), "%s", s);
- return 1;
-}
-
-__setup("com20020=", com20020isa_setup);
-
-#endif /* MODULE */
-
-module_init(com20020_init)
-module_exit(com20020_exit)
diff --git a/drivers/net/arcnet/com20020.c b/drivers/net/arcnet/com20020.c
index 59a4748d051f..21f962357b0b 100644
--- a/drivers/net/arcnet/com20020.c
+++ b/drivers/net/arcnet/com20020.c
@@ -384,9 +384,7 @@ static void com20020_set_rx_mode(struct net_device *dev)
}
}
-#if defined(CONFIG_ARCNET_COM20020_PCI_MODULE) || \
- defined(CONFIG_ARCNET_COM20020_ISA_MODULE) || \
- defined(CONFIG_ARCNET_COM20020_CS_MODULE)
+#ifdef CONFIG_ARCNET_COM20020_PCI_MODULE
EXPORT_SYMBOL(com20020_check);
EXPORT_SYMBOL(com20020_found);
EXPORT_SYMBOL(com20020_netdev_ops);
diff --git a/drivers/net/arcnet/com20020_cs.c b/drivers/net/arcnet/com20020_cs.c
deleted file mode 100644
index 5c3c91677b62..000000000000
--- a/drivers/net/arcnet/com20020_cs.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Linux ARCnet driver - COM20020 PCMCIA support
- *
- * Written 1994-1999 by Avery Pennarun,
- * based on an ISA version by David Woodhouse.
- * Derived from ibmtr_cs.c by Steve Kipisz (pcmcia-cs 3.1.4)
- * which was derived from pcnet_cs.c by David Hinds.
- * Some additional portions derived from skeleton.c by Donald Becker.
- *
- * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
- * for sponsoring the further development of this driver.
- *
- * **********************
- *
- * The original copyright of skeleton.c was as follows:
- *
- * skeleton.c Written 1993 by Donald Becker.
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency. This software may only be used
- * and distributed according to the terms of the GNU General Public License as
- * modified by SRC, incorporated herein by reference.
- *
- * **********************
- * Changes:
- * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/08/2000
- * - reorganize kmallocs in com20020_attach, checking all for failure
- * and releasing the previous allocations if one fails
- * **********************
- *
- * For more details, see drivers/net/arcnet.c
- *
- * **********************
- */
-
-#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
-
-#include <linux/kernel.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/timer.h>
-#include <linux/delay.h>
-#include <linux/module.h>
-#include <linux/netdevice.h>
-#include <linux/io.h>
-#include <pcmcia/cistpl.h>
-#include <pcmcia/ds.h>
-
-#include "arcdevice.h"
-#include "com20020.h"
-
-static void regdump(struct net_device *dev)
-{
-#ifdef DEBUG
- int ioaddr = dev->base_addr;
- int count;
-
- netdev_dbg(dev, "register dump:\n");
- for (count = 0; count < 16; count++) {
- if (!(count % 16))
- pr_cont("%04X:", ioaddr + count);
- pr_cont(" %02X", arcnet_inb(ioaddr, count));
- }
- pr_cont("\n");
-
- netdev_dbg(dev, "buffer0 dump:\n");
- /* set up the address register */
- count = 0;
- arcnet_outb((count >> 8) | RDDATAflag | AUTOINCflag,
- ioaddr, COM20020_REG_W_ADDR_HI);
- arcnet_outb(count & 0xff, ioaddr, COM20020_REG_W_ADDR_LO);
-
- for (count = 0; count < 256 + 32; count++) {
- if (!(count % 16))
- pr_cont("%04X:", count);
-
- /* copy the data */
- pr_cont(" %02X", arcnet_inb(ioaddr, COM20020_REG_RW_MEMDATA));
- }
- pr_cont("\n");
-#endif
-}
-
-/*====================================================================*/
-
-/* Parameters that can be set with 'insmod' */
-
-static int node;
-static int timeout = 3;
-static int backplane;
-static int clockp;
-static int clockm;
-
-module_param(node, int, 0);
-module_param(timeout, int, 0);
-module_param(backplane, int, 0);
-module_param(clockp, int, 0);
-module_param(clockm, int, 0);
-
-MODULE_DESCRIPTION("ARCnet COM20020 chipset PCMCIA driver");
-MODULE_LICENSE("GPL");
-
-/*====================================================================*/
-
-static int com20020_config(struct pcmcia_device *link);
-static void com20020_release(struct pcmcia_device *link);
-
-static void com20020_detach(struct pcmcia_device *p_dev);
-
-/*====================================================================*/
-
-static int com20020_probe(struct pcmcia_device *p_dev)
-{
- struct com20020_dev *info;
- struct net_device *dev;
- struct arcnet_local *lp;
- int ret = -ENOMEM;
-
- dev_dbg(&p_dev->dev, "com20020_attach()\n");
-
- /* Create new network device */
- info = kzalloc_obj(*info);
- if (!info)
- goto fail_alloc_info;
-
- dev = alloc_arcdev("");
- if (!dev)
- goto fail_alloc_dev;
-
- lp = netdev_priv(dev);
- lp->timeout = timeout;
- lp->backplane = backplane;
- lp->clockp = clockp;
- lp->clockm = clockm & 3;
- lp->hw.owner = THIS_MODULE;
-
- /* fill in our module parameters as defaults */
- arcnet_set_addr(dev, node);
-
- p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8;
- p_dev->resource[0]->end = 16;
- p_dev->config_flags |= CONF_ENABLE_IRQ;
-
- info->dev = dev;
- p_dev->priv = info;
-
- ret = com20020_config(p_dev);
- if (ret)
- goto fail_config;
-
- return 0;
-
-fail_config:
- free_arcdev(dev);
-fail_alloc_dev:
- kfree(info);
-fail_alloc_info:
- return ret;
-} /* com20020_attach */
-
-static void com20020_detach(struct pcmcia_device *link)
-{
- struct com20020_dev *info = link->priv;
- struct net_device *dev = info->dev;
-
- dev_dbg(&link->dev, "detach...\n");
-
- dev_dbg(&link->dev, "com20020_detach\n");
-
- dev_dbg(&link->dev, "unregister...\n");
-
- unregister_netdev(dev);
-
- /* this is necessary because we register our IRQ separately
- * from card services.
- */
- if (dev->irq)
- free_irq(dev->irq, dev);
-
- com20020_release(link);
-
- /* Unlink device structure, free bits */
- dev_dbg(&link->dev, "unlinking...\n");
- if (link->priv) {
- dev = info->dev;
- if (dev) {
- dev_dbg(&link->dev, "kfree...\n");
- free_arcdev(dev);
- }
- dev_dbg(&link->dev, "kfree2...\n");
- kfree(info);
- }
-
-} /* com20020_detach */
-
-static int com20020_config(struct pcmcia_device *link)
-{
- struct arcnet_local *lp;
- struct com20020_dev *info;
- struct net_device *dev;
- int i, ret;
- int ioaddr;
-
- info = link->priv;
- dev = info->dev;
-
- dev_dbg(&link->dev, "config...\n");
-
- dev_dbg(&link->dev, "com20020_config\n");
-
- dev_dbg(&link->dev, "baseport1 is %Xh\n",
- (unsigned int)link->resource[0]->start);
-
- i = -ENODEV;
- link->io_lines = 16;
-
- if (!link->resource[0]->start) {
- for (ioaddr = 0x100; ioaddr < 0x400; ioaddr += 0x10) {
- link->resource[0]->start = ioaddr;
- i = pcmcia_request_io(link);
- if (i == 0)
- break;
- }
- } else {
- i = pcmcia_request_io(link);
- }
-
- if (i != 0) {
- dev_dbg(&link->dev, "requestIO failed totally!\n");
- goto failed;
- }
-
- ioaddr = dev->base_addr = link->resource[0]->start;
- dev_dbg(&link->dev, "got ioaddr %Xh\n", ioaddr);
-
- dev_dbg(&link->dev, "request IRQ %d\n",
- link->irq);
- if (!link->irq) {
- dev_dbg(&link->dev, "requestIRQ failed totally!\n");
- goto failed;
- }
-
- dev->irq = link->irq;
-
- ret = pcmcia_enable_device(link);
- if (ret)
- goto failed;
-
- if (com20020_check(dev)) {
- regdump(dev);
- goto failed;
- }
-
- lp = netdev_priv(dev);
- lp->card_name = "PCMCIA COM20020";
- lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */
-
- SET_NETDEV_DEV(dev, &link->dev);
-
- i = com20020_found(dev, 0); /* calls register_netdev */
-
- if (i != 0) {
- dev_notice(&link->dev,
- "com20020_found() failed\n");
- goto failed;
- }
-
- netdev_dbg(dev, "port %#3lx, irq %d\n",
- dev->base_addr, dev->irq);
- return 0;
-
-failed:
- dev_dbg(&link->dev, "com20020_config failed...\n");
- com20020_release(link);
- return -ENODEV;
-} /* com20020_config */
-
-static void com20020_release(struct pcmcia_device *link)
-{
- dev_dbg(&link->dev, "com20020_release\n");
- pcmcia_disable_device(link);
-}
-
-static int com20020_suspend(struct pcmcia_device *link)
-{
- struct com20020_dev *info = link->priv;
- struct net_device *dev = info->dev;
-
- if (link->open)
- netif_device_detach(dev);
-
- return 0;
-}
-
-static int com20020_resume(struct pcmcia_device *link)
-{
- struct com20020_dev *info = link->priv;
- struct net_device *dev = info->dev;
-
- if (link->open) {
- int ioaddr = dev->base_addr;
- struct arcnet_local *lp = netdev_priv(dev);
-
- arcnet_outb(lp->config | 0x80, ioaddr, COM20020_REG_W_CONFIG);
- udelay(5);
- arcnet_outb(lp->config, ioaddr, COM20020_REG_W_CONFIG);
- }
-
- return 0;
-}
-
-static const struct pcmcia_device_id com20020_ids[] = {
- PCMCIA_DEVICE_PROD_ID12("Contemporary Control Systems, Inc.",
- "PCM20 Arcnet Adapter", 0x59991666, 0x95dfffaf),
- PCMCIA_DEVICE_PROD_ID12("SoHard AG",
- "SH ARC PCMCIA", 0xf8991729, 0x69dff0c7),
- PCMCIA_DEVICE_NULL
-};
-MODULE_DEVICE_TABLE(pcmcia, com20020_ids);
-
-static struct pcmcia_driver com20020_cs_driver = {
- .owner = THIS_MODULE,
- .name = "com20020_cs",
- .probe = com20020_probe,
- .remove = com20020_detach,
- .id_table = com20020_ids,
- .suspend = com20020_suspend,
- .resume = com20020_resume,
-};
-module_pcmcia_driver(com20020_cs_driver);
diff --git a/drivers/net/arcnet/com90io.c b/drivers/net/arcnet/com90io.c
deleted file mode 100644
index 3b463fbc6402..000000000000
--- a/drivers/net/arcnet/com90io.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Linux ARCnet driver - COM90xx chipset (IO-mapped buffers)
- *
- * Written 1997 by David Woodhouse.
- * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
- * Derived from skeleton.c by Donald Becker.
- *
- * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
- * for sponsoring the further development of this driver.
- *
- * **********************
- *
- * The original copyright of skeleton.c was as follows:
- *
- * skeleton.c Written 1993 by Donald Becker.
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency. This software may only be used
- * and distributed according to the terms of the GNU General Public License as
- * modified by SRC, incorporated herein by reference.
- *
- * **********************
- *
- * For more details, see drivers/net/arcnet.c
- *
- * **********************
- */
-
-#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/netdevice.h>
-#include <linux/memblock.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/io.h>
-
-#include "arcdevice.h"
-#include "com9026.h"
-
-/* Internal function declarations */
-
-static int com90io_found(struct net_device *dev);
-static void com90io_command(struct net_device *dev, int command);
-static int com90io_status(struct net_device *dev);
-static void com90io_setmask(struct net_device *dev, int mask);
-static int com90io_reset(struct net_device *dev, int really_reset);
-static void com90io_copy_to_card(struct net_device *dev, int bufnum, int offset,
- void *buf, int count);
-static void com90io_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count);
-
-/* Handy defines for ARCnet specific stuff */
-
-/* The number of low I/O ports used by the card. */
-#define ARCNET_TOTAL_SIZE 16
-
-/****************************************************************************
- * *
- * IO-mapped operation routines *
- * *
- ****************************************************************************/
-
-#undef ONE_AT_A_TIME_TX
-#undef ONE_AT_A_TIME_RX
-
-static u_char get_buffer_byte(struct net_device *dev, unsigned offset)
-{
- int ioaddr = dev->base_addr;
-
- arcnet_outb(offset >> 8, ioaddr, COM9026_REG_W_ADDR_HI);
- arcnet_outb(offset & 0xff, ioaddr, COM9026_REG_W_ADDR_LO);
-
- return arcnet_inb(ioaddr, COM9026_REG_RW_MEMDATA);
-}
-
-#ifdef ONE_AT_A_TIME_TX
-static void put_buffer_byte(struct net_device *dev, unsigned offset,
- u_char datum)
-{
- int ioaddr = dev->base_addr;
-
- arcnet_outb(offset >> 8, ioaddr, COM9026_REG_W_ADDR_HI);
- arcnet_outb(offset & 0xff, ioaddr, COM9026_REG_W_ADDR_LO);
-
- arcnet_outb(datum, ioaddr, COM9026_REG_RW_MEMDATA);
-}
-
-#endif
-
-static void get_whole_buffer(struct net_device *dev, unsigned offset,
- unsigned length, char *dest)
-{
- int ioaddr = dev->base_addr;
-
- arcnet_outb((offset >> 8) | AUTOINCflag, ioaddr, COM9026_REG_W_ADDR_HI);
- arcnet_outb(offset & 0xff, ioaddr, COM9026_REG_W_ADDR_LO);
-
- while (length--)
-#ifdef ONE_AT_A_TIME_RX
- *(dest++) = get_buffer_byte(dev, offset++);
-#else
- *(dest++) = arcnet_inb(ioaddr, COM9026_REG_RW_MEMDATA);
-#endif
-}
-
-static void put_whole_buffer(struct net_device *dev, unsigned offset,
- unsigned length, char *dest)
-{
- int ioaddr = dev->base_addr;
-
- arcnet_outb((offset >> 8) | AUTOINCflag, ioaddr, COM9026_REG_W_ADDR_HI);
- arcnet_outb(offset & 0xff, ioaddr,COM9026_REG_W_ADDR_LO);
-
- while (length--)
-#ifdef ONE_AT_A_TIME_TX
- put_buffer_byte(dev, offset++, *(dest++));
-#else
- arcnet_outb(*(dest++), ioaddr, COM9026_REG_RW_MEMDATA);
-#endif
-}
-
-/* We cannot probe for an IO mapped card either, although we can check that
- * it's where we were told it was, and even autoirq
- */
-static int __init com90io_probe(struct net_device *dev)
-{
- int ioaddr = dev->base_addr, status;
- unsigned long airqmask;
-
- if (BUGLVL(D_NORMAL)) {
- pr_info("%s\n", "COM90xx IO-mapped mode support (by David Woodhouse et el.)");
- pr_info("E-mail me if you actually test this driver, please!\n");
- }
-
- if (!ioaddr) {
- arc_printk(D_NORMAL, dev, "No autoprobe for IO mapped cards; you must specify the base address!\n");
- return -ENODEV;
- }
- if (!request_region(ioaddr, ARCNET_TOTAL_SIZE, "com90io probe")) {
- arc_printk(D_INIT_REASONS, dev, "IO request_region %x-%x failed\n",
- ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
- return -ENXIO;
- }
- if (arcnet_inb(ioaddr, COM9026_REG_R_STATUS) == 0xFF) {
- arc_printk(D_INIT_REASONS, dev, "IO address %x empty\n",
- ioaddr);
- goto err_out;
- }
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
- mdelay(RESETtime);
-
- status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
-
- if ((status & 0x9D) != (NORXflag | RECONflag | TXFREEflag | RESETflag)) {
- arc_printk(D_INIT_REASONS, dev, "Status invalid (%Xh)\n",
- status);
- goto err_out;
- }
- arc_printk(D_INIT_REASONS, dev, "Status after reset: %X\n", status);
-
- arcnet_outb(CFLAGScmd | RESETclear | CONFIGclear,
- ioaddr, COM9026_REG_W_COMMAND);
-
- arc_printk(D_INIT_REASONS, dev, "Status after reset acknowledged: %X\n",
- status);
-
- status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
-
- if (status & RESETflag) {
- arc_printk(D_INIT_REASONS, dev, "Eternal reset (status=%Xh)\n",
- status);
- goto err_out;
- }
- arcnet_outb((0x16 | IOMAPflag) & ~ENABLE16flag,
- ioaddr, COM9026_REG_RW_CONFIG);
-
- /* Read first loc'n of memory */
-
- arcnet_outb(AUTOINCflag, ioaddr, COM9026_REG_W_ADDR_HI);
- arcnet_outb(0, ioaddr, COM9026_REG_W_ADDR_LO);
-
- status = arcnet_inb(ioaddr, COM9026_REG_RW_MEMDATA);
- if (status != 0xd1) {
- arc_printk(D_INIT_REASONS, dev, "Signature byte not found (%Xh instead).\n",
- status);
- goto err_out;
- }
- if (!dev->irq) {
- /* if we do this, we're sure to get an IRQ since the
- * card has just reset and the NORXflag is on until
- * we tell it to start receiving.
- */
-
- airqmask = probe_irq_on();
- arcnet_outb(NORXflag, ioaddr, COM9026_REG_W_INTMASK);
- udelay(1);
- arcnet_outb(0, ioaddr, COM9026_REG_W_INTMASK);
- dev->irq = probe_irq_off(airqmask);
-
- if ((int)dev->irq <= 0) {
- arc_printk(D_INIT_REASONS, dev, "Autoprobe IRQ failed\n");
- goto err_out;
- }
- }
- release_region(ioaddr, ARCNET_TOTAL_SIZE); /* end of probing */
- return com90io_found(dev);
-
-err_out:
- release_region(ioaddr, ARCNET_TOTAL_SIZE);
- return -ENODEV;
-}
-
-/* Set up the struct net_device associated with this card. Called after
- * probing succeeds.
- */
-static int __init com90io_found(struct net_device *dev)
-{
- struct arcnet_local *lp;
- int ioaddr = dev->base_addr;
- int err;
-
- /* Reserve the irq */
- if (request_irq(dev->irq, arcnet_interrupt, 0,
- "arcnet (COM90xx-IO)", dev)) {
- arc_printk(D_NORMAL, dev, "Can't get IRQ %d!\n", dev->irq);
- return -ENODEV;
- }
- /* Reserve the I/O region */
- if (!request_region(dev->base_addr, ARCNET_TOTAL_SIZE,
- "arcnet (COM90xx-IO)")) {
- free_irq(dev->irq, dev);
- return -EBUSY;
- }
-
- lp = netdev_priv(dev);
- lp->card_name = "COM90xx I/O";
- lp->hw.command = com90io_command;
- lp->hw.status = com90io_status;
- lp->hw.intmask = com90io_setmask;
- lp->hw.reset = com90io_reset;
- lp->hw.owner = THIS_MODULE;
- lp->hw.copy_to_card = com90io_copy_to_card;
- lp->hw.copy_from_card = com90io_copy_from_card;
-
- lp->config = (0x16 | IOMAPflag) & ~ENABLE16flag;
- arcnet_outb(lp->config, ioaddr, COM9026_REG_RW_CONFIG);
-
- /* get and check the station ID from offset 1 in shmem */
-
- arcnet_set_addr(dev, get_buffer_byte(dev, 1));
-
- err = register_netdev(dev);
- if (err) {
- arcnet_outb(arcnet_inb(ioaddr, COM9026_REG_RW_CONFIG) & ~IOMAPflag,
- ioaddr, COM9026_REG_RW_CONFIG);
- free_irq(dev->irq, dev);
- release_region(dev->base_addr, ARCNET_TOTAL_SIZE);
- return err;
- }
-
- arc_printk(D_NORMAL, dev, "COM90IO: station %02Xh found at %03lXh, IRQ %d.\n",
- dev->dev_addr[0], dev->base_addr, dev->irq);
-
- return 0;
-}
-
-/* Do a hardware reset on the card, and set up necessary registers.
- *
- * This should be called as little as possible, because it disrupts the
- * token on the network (causes a RECON) and requires a significant delay.
- *
- * However, it does make sure the card is in a defined state.
- */
-static int com90io_reset(struct net_device *dev, int really_reset)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- short ioaddr = dev->base_addr;
-
- arc_printk(D_INIT, dev, "Resetting %s (status=%02Xh)\n",
- dev->name, arcnet_inb(ioaddr, COM9026_REG_R_STATUS));
-
- if (really_reset) {
- /* reset the card */
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
- mdelay(RESETtime);
- }
- /* Set the thing to IO-mapped, 8-bit mode */
- lp->config = (0x1C | IOMAPflag) & ~ENABLE16flag;
- arcnet_outb(lp->config, ioaddr, COM9026_REG_RW_CONFIG);
-
- arcnet_outb(CFLAGScmd | RESETclear, ioaddr, COM9026_REG_W_COMMAND);
- /* clear flags & end reset */
- arcnet_outb(CFLAGScmd | CONFIGclear, ioaddr, COM9026_REG_W_COMMAND);
-
- /* verify that the ARCnet signature byte is present */
- if (get_buffer_byte(dev, 0) != TESTvalue) {
- arc_printk(D_NORMAL, dev, "reset failed: TESTvalue not present.\n");
- return 1;
- }
- /* enable extended (512-byte) packets */
- arcnet_outb(CONFIGcmd | EXTconf, ioaddr, COM9026_REG_W_COMMAND);
- /* done! return success. */
- return 0;
-}
-
-static void com90io_command(struct net_device *dev, int cmd)
-{
- short ioaddr = dev->base_addr;
-
- arcnet_outb(cmd, ioaddr, COM9026_REG_W_COMMAND);
-}
-
-static int com90io_status(struct net_device *dev)
-{
- short ioaddr = dev->base_addr;
-
- return arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
-}
-
-static void com90io_setmask(struct net_device *dev, int mask)
-{
- short ioaddr = dev->base_addr;
-
- arcnet_outb(mask, ioaddr, COM9026_REG_W_INTMASK);
-}
-
-static void com90io_copy_to_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count)
-{
- TIME(dev, "put_whole_buffer", count,
- put_whole_buffer(dev, bufnum * 512 + offset, count, buf));
-}
-
-static void com90io_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count)
-{
- TIME(dev, "get_whole_buffer", count,
- get_whole_buffer(dev, bufnum * 512 + offset, count, buf));
-}
-
-static int io; /* use the insmod io= irq= shmem= options */
-static int irq;
-static char device[9]; /* use eg. device=arc1 to change name */
-
-module_param_hw(io, int, ioport, 0);
-module_param_hw(irq, int, irq, 0);
-module_param_string(device, device, sizeof(device), 0);
-MODULE_DESCRIPTION("ARCnet COM90xx IO mapped chipset driver");
-MODULE_LICENSE("GPL");
-
-#ifndef MODULE
-static int __init com90io_setup(char *s)
-{
- int ints[4];
-
- s = get_options(s, 4, ints);
- if (!ints[0])
- return 0;
- switch (ints[0]) {
- default: /* ERROR */
- pr_err("Too many arguments\n");
- fallthrough;
- case 2: /* IRQ */
- irq = ints[2];
- fallthrough;
- case 1: /* IO address */
- io = ints[1];
- }
- if (*s)
- snprintf(device, sizeof(device), "%s", s);
- return 1;
-}
-__setup("com90io=", com90io_setup);
-#endif
-
-static struct net_device *my_dev;
-
-static int __init com90io_init(void)
-{
- struct net_device *dev;
- int err;
-
- dev = alloc_arcdev(device);
- if (!dev)
- return -ENOMEM;
-
- dev->base_addr = io;
- dev->irq = irq;
- if (dev->irq == 2)
- dev->irq = 9;
-
- err = com90io_probe(dev);
-
- if (err) {
- free_arcdev(dev);
- return err;
- }
-
- my_dev = dev;
- return 0;
-}
-
-static void __exit com90io_exit(void)
-{
- struct net_device *dev = my_dev;
- int ioaddr = dev->base_addr;
-
- unregister_netdev(dev);
-
- /* In case the old driver is loaded later,
- * set the thing back to MMAP mode
- */
- arcnet_outb(arcnet_inb(ioaddr, COM9026_REG_RW_CONFIG) & ~IOMAPflag,
- ioaddr, COM9026_REG_RW_CONFIG);
-
- free_irq(dev->irq, dev);
- release_region(dev->base_addr, ARCNET_TOTAL_SIZE);
- free_arcdev(dev);
-}
-
-module_init(com90io_init)
-module_exit(com90io_exit)
diff --git a/drivers/net/arcnet/com90xx.c b/drivers/net/arcnet/com90xx.c
deleted file mode 100644
index b3b287c16561..000000000000
--- a/drivers/net/arcnet/com90xx.c
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
- * Linux ARCnet driver - COM90xx chipset (memory-mapped buffers)
- *
- * Written 1994-1999 by Avery Pennarun.
- * Written 1999 by Martin Mares <mj@ucw.cz>.
- * Derived from skeleton.c by Donald Becker.
- *
- * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
- * for sponsoring the further development of this driver.
- *
- * **********************
- *
- * The original copyright of skeleton.c was as follows:
- *
- * skeleton.c Written 1993 by Donald Becker.
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency. This software may only be used
- * and distributed according to the terms of the GNU General Public License as
- * modified by SRC, incorporated herein by reference.
- *
- * **********************
- *
- * For more details, see drivers/net/arcnet.c
- *
- * **********************
- */
-
-#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
-
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/netdevice.h>
-#include <linux/slab.h>
-#include <linux/io.h>
-
-#include "arcdevice.h"
-#include "com9026.h"
-
-/* Define this to speed up the autoprobe by assuming if only one io port and
- * shmem are left in the list at Stage 5, they must correspond to each
- * other.
- *
- * This is undefined by default because it might not always be true, and the
- * extra check makes the autoprobe even more careful. Speed demons can turn
- * it on - I think it should be fine if you only have one ARCnet card
- * installed.
- *
- * If no ARCnet cards are installed, this delay never happens anyway and thus
- * the option has no effect.
- */
-#undef FAST_PROBE
-
-/* Internal function declarations */
-static int com90xx_found(int ioaddr, int airq, u_long shmem, void __iomem *);
-static void com90xx_command(struct net_device *dev, int command);
-static int com90xx_status(struct net_device *dev);
-static void com90xx_setmask(struct net_device *dev, int mask);
-static int com90xx_reset(struct net_device *dev, int really_reset);
-static void com90xx_copy_to_card(struct net_device *dev, int bufnum, int offset,
- void *buf, int count);
-static void com90xx_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count);
-
-/* Known ARCnet cards */
-
-static struct net_device *cards[16];
-static int numcards;
-
-/* Handy defines for ARCnet specific stuff */
-
-/* The number of low I/O ports used by the card */
-#define ARCNET_TOTAL_SIZE 16
-
-/* Amount of I/O memory used by the card */
-#define BUFFER_SIZE (512)
-#define MIRROR_SIZE (BUFFER_SIZE * 4)
-
-static int com90xx_skip_probe __initdata = 0;
-
-/* Module parameters */
-
-static int io; /* use the insmod io= irq= shmem= options */
-static int irq;
-static int shmem;
-static char device[9]; /* use eg. device=arc1 to change name */
-
-module_param_hw(io, int, ioport, 0);
-module_param_hw(irq, int, irq, 0);
-module_param(shmem, int, 0);
-module_param_string(device, device, sizeof(device), 0);
-
-static void __init com90xx_probe(void)
-{
- int count, status, ioaddr, numprint, airq, openparen = 0;
- unsigned long airqmask;
- int ports[(0x3f0 - 0x200) / 16 + 1] = { 0 };
- unsigned long *shmems;
- void __iomem **iomem;
- int numports, numshmems, *port;
- u_long *p;
- int index;
-
- if (!io && !irq && !shmem && !*device && com90xx_skip_probe)
- return;
-
- shmems = kzalloc(((0x100000 - 0xa0000) / 0x800) * sizeof(unsigned long),
- GFP_KERNEL);
- if (!shmems)
- return;
- iomem = kzalloc(((0x100000 - 0xa0000) / 0x800) * sizeof(void __iomem *),
- GFP_KERNEL);
- if (!iomem) {
- kfree(shmems);
- return;
- }
-
- if (BUGLVL(D_NORMAL))
- pr_info("%s\n", "COM90xx chipset support");
-
- /* set up the arrays where we'll store the possible probe addresses */
- numports = numshmems = 0;
- if (io)
- ports[numports++] = io;
- else
- for (count = 0x200; count <= 0x3f0; count += 16)
- ports[numports++] = count;
- if (shmem)
- shmems[numshmems++] = shmem;
- else
- for (count = 0xA0000; count <= 0xFF800; count += 2048)
- shmems[numshmems++] = count;
-
- /* Stage 1: abandon any reserved ports, or ones with status==0xFF
- * (empty), and reset any others by reading the reset port.
- */
- numprint = -1;
- for (port = &ports[0]; port - ports < numports; port++) {
- numprint++;
- numprint %= 8;
- if (!numprint) {
- arc_cont(D_INIT, "\n");
- arc_cont(D_INIT, "S1: ");
- }
- arc_cont(D_INIT, "%Xh ", *port);
-
- ioaddr = *port;
-
- if (!request_region(*port, ARCNET_TOTAL_SIZE,
- "arcnet (90xx)")) {
- arc_cont(D_INIT_REASONS, "(request_region)\n");
- arc_cont(D_INIT_REASONS, "S1: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- *port-- = ports[--numports];
- continue;
- }
- if (arcnet_inb(ioaddr, COM9026_REG_R_STATUS) == 0xFF) {
- arc_cont(D_INIT_REASONS, "(empty)\n");
- arc_cont(D_INIT_REASONS, "S1: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- release_region(*port, ARCNET_TOTAL_SIZE);
- *port-- = ports[--numports];
- continue;
- }
- /* begin resetting card */
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
-
- arc_cont(D_INIT_REASONS, "\n");
- arc_cont(D_INIT_REASONS, "S1: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- }
- arc_cont(D_INIT, "\n");
-
- if (!numports) {
- arc_cont(D_NORMAL, "S1: No ARCnet cards found.\n");
- kfree(shmems);
- kfree(iomem);
- return;
- }
- /* Stage 2: we have now reset any possible ARCnet cards, so we can't
- * do anything until they finish. If D_INIT, print the list of
- * cards that are left.
- */
- numprint = -1;
- for (port = &ports[0]; port < ports + numports; port++) {
- numprint++;
- numprint %= 8;
- if (!numprint) {
- arc_cont(D_INIT, "\n");
- arc_cont(D_INIT, "S2: ");
- }
- arc_cont(D_INIT, "%Xh ", *port);
- }
- arc_cont(D_INIT, "\n");
- mdelay(RESETtime);
-
- /* Stage 3: abandon any shmem addresses that don't have the signature
- * 0xD1 byte in the right place, or are read-only.
- */
- numprint = -1;
- for (index = 0, p = &shmems[0]; index < numshmems; p++, index++) {
- void __iomem *base;
-
- numprint++;
- numprint %= 8;
- if (!numprint) {
- arc_cont(D_INIT, "\n");
- arc_cont(D_INIT, "S3: ");
- }
- arc_cont(D_INIT, "%lXh ", *p);
-
- if (!request_mem_region(*p, MIRROR_SIZE, "arcnet (90xx)")) {
- arc_cont(D_INIT_REASONS, "(request_mem_region)\n");
- arc_cont(D_INIT_REASONS, "Stage 3: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- goto out;
- }
- base = ioremap(*p, MIRROR_SIZE);
- if (!base) {
- arc_cont(D_INIT_REASONS, "(ioremap)\n");
- arc_cont(D_INIT_REASONS, "Stage 3: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- goto out1;
- }
- if (arcnet_readb(base, COM9026_REG_R_STATUS) != TESTvalue) {
- arc_cont(D_INIT_REASONS, "(%02Xh != %02Xh)\n",
- arcnet_readb(base, COM9026_REG_R_STATUS),
- TESTvalue);
- arc_cont(D_INIT_REASONS, "S3: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- goto out2;
- }
- /* By writing 0x42 to the TESTvalue location, we also make
- * sure no "mirror" shmem areas show up - if they occur
- * in another pass through this loop, they will be discarded
- * because *cptr != TESTvalue.
- */
- arcnet_writeb(0x42, base, COM9026_REG_W_INTMASK);
- if (arcnet_readb(base, COM9026_REG_R_STATUS) != 0x42) {
- arc_cont(D_INIT_REASONS, "(read only)\n");
- arc_cont(D_INIT_REASONS, "S3: ");
- goto out2;
- }
- arc_cont(D_INIT_REASONS, "\n");
- arc_cont(D_INIT_REASONS, "S3: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- iomem[index] = base;
- continue;
- out2:
- iounmap(base);
- out1:
- release_mem_region(*p, MIRROR_SIZE);
- out:
- *p-- = shmems[--numshmems];
- index--;
- }
- arc_cont(D_INIT, "\n");
-
- if (!numshmems) {
- arc_cont(D_NORMAL, "S3: No ARCnet cards found.\n");
- for (port = &ports[0]; port < ports + numports; port++)
- release_region(*port, ARCNET_TOTAL_SIZE);
- kfree(shmems);
- kfree(iomem);
- return;
- }
- /* Stage 4: something of a dummy, to report the shmems that are
- * still possible after stage 3.
- */
- numprint = -1;
- for (p = &shmems[0]; p < shmems + numshmems; p++) {
- numprint++;
- numprint %= 8;
- if (!numprint) {
- arc_cont(D_INIT, "\n");
- arc_cont(D_INIT, "S4: ");
- }
- arc_cont(D_INIT, "%lXh ", *p);
- }
- arc_cont(D_INIT, "\n");
-
- /* Stage 5: for any ports that have the correct status, can disable
- * the RESET flag, and (if no irq is given) generate an autoirq,
- * register an ARCnet device.
- *
- * Currently, we can only register one device per probe, so quit
- * after the first one is found.
- */
- numprint = -1;
- for (port = &ports[0]; port < ports + numports; port++) {
- int found = 0;
-
- numprint++;
- numprint %= 8;
- if (!numprint) {
- arc_cont(D_INIT, "\n");
- arc_cont(D_INIT, "S5: ");
- }
- arc_cont(D_INIT, "%Xh ", *port);
-
- ioaddr = *port;
- status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
-
- if ((status & 0x9D)
- != (NORXflag | RECONflag | TXFREEflag | RESETflag)) {
- arc_cont(D_INIT_REASONS, "(status=%Xh)\n", status);
- arc_cont(D_INIT_REASONS, "S5: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- release_region(*port, ARCNET_TOTAL_SIZE);
- *port-- = ports[--numports];
- continue;
- }
- arcnet_outb(CFLAGScmd | RESETclear | CONFIGclear,
- ioaddr, COM9026_REG_W_COMMAND);
- status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
- if (status & RESETflag) {
- arc_cont(D_INIT_REASONS, " (eternal reset, status=%Xh)\n",
- status);
- arc_cont(D_INIT_REASONS, "S5: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- release_region(*port, ARCNET_TOTAL_SIZE);
- *port-- = ports[--numports];
- continue;
- }
- /* skip this completely if an IRQ was given, because maybe
- * we're on a machine that locks during autoirq!
- */
- if (!irq) {
- /* if we do this, we're sure to get an IRQ since the
- * card has just reset and the NORXflag is on until
- * we tell it to start receiving.
- */
- airqmask = probe_irq_on();
- arcnet_outb(NORXflag, ioaddr, COM9026_REG_W_INTMASK);
- udelay(1);
- arcnet_outb(0, ioaddr, COM9026_REG_W_INTMASK);
- airq = probe_irq_off(airqmask);
-
- if (airq <= 0) {
- arc_cont(D_INIT_REASONS, "(airq=%d)\n", airq);
- arc_cont(D_INIT_REASONS, "S5: ");
- if (BUGLVL(D_INIT_REASONS))
- numprint = 0;
- release_region(*port, ARCNET_TOTAL_SIZE);
- *port-- = ports[--numports];
- continue;
- }
- } else {
- airq = irq;
- }
-
- arc_cont(D_INIT, "(%d,", airq);
- openparen = 1;
-
- /* Everything seems okay. But which shmem, if any, puts
- * back its signature byte when the card is reset?
- *
- * If there are multiple cards installed, there might be
- * multiple shmems still in the list.
- */
-#ifdef FAST_PROBE
- if (numports > 1 || numshmems > 1) {
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
- mdelay(RESETtime);
- } else {
- /* just one shmem and port, assume they match */
- arcnet_writeb(TESTvalue, iomem[0],
- COM9026_REG_W_INTMASK);
- }
-#else
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
- mdelay(RESETtime);
-#endif
-
- for (index = 0; index < numshmems; index++) {
- u_long ptr = shmems[index];
- void __iomem *base = iomem[index];
-
- if (arcnet_readb(base, COM9026_REG_R_STATUS) == TESTvalue) { /* found one */
- arc_cont(D_INIT, "%lXh)\n", *p);
- openparen = 0;
-
- /* register the card */
- if (com90xx_found(*port, airq, ptr, base) == 0)
- found = 1;
- numprint = -1;
-
- /* remove shmem from the list */
- shmems[index] = shmems[--numshmems];
- iomem[index] = iomem[numshmems];
- break; /* go to the next I/O port */
- } else {
- arc_cont(D_INIT_REASONS, "%Xh-",
- arcnet_readb(base, COM9026_REG_R_STATUS));
- }
- }
-
- if (openparen) {
- if (BUGLVL(D_INIT))
- pr_cont("no matching shmem)\n");
- if (BUGLVL(D_INIT_REASONS)) {
- pr_cont("S5: ");
- numprint = 0;
- }
- }
- if (!found)
- release_region(*port, ARCNET_TOTAL_SIZE);
- *port-- = ports[--numports];
- }
-
- if (BUGLVL(D_INIT_REASONS))
- pr_cont("\n");
-
- /* Now put back TESTvalue on all leftover shmems. */
- for (index = 0; index < numshmems; index++) {
- arcnet_writeb(TESTvalue, iomem[index], COM9026_REG_W_INTMASK);
- iounmap(iomem[index]);
- release_mem_region(shmems[index], MIRROR_SIZE);
- }
- kfree(shmems);
- kfree(iomem);
-}
-
-static int __init check_mirror(unsigned long addr, size_t size)
-{
- void __iomem *p;
- int res = -1;
-
- if (!request_mem_region(addr, size, "arcnet (90xx)"))
- return -1;
-
- p = ioremap(addr, size);
- if (p) {
- if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue)
- res = 1;
- else
- res = 0;
- iounmap(p);
- }
-
- release_mem_region(addr, size);
- return res;
-}
-
-/* Set up the struct net_device associated with this card. Called after
- * probing succeeds.
- */
-static int __init com90xx_found(int ioaddr, int airq, u_long shmem,
- void __iomem *p)
-{
- struct net_device *dev = NULL;
- struct arcnet_local *lp;
- u_long first_mirror, last_mirror;
- int mirror_size;
-
- /* allocate struct net_device */
- dev = alloc_arcdev(device);
- if (!dev) {
- arc_cont(D_NORMAL, "com90xx: Can't allocate device!\n");
- iounmap(p);
- release_mem_region(shmem, MIRROR_SIZE);
- return -ENOMEM;
- }
- lp = netdev_priv(dev);
- /* find the real shared memory start/end points, including mirrors */
-
- /* guess the actual size of one "memory mirror" - the number of
- * bytes between copies of the shared memory. On most cards, it's
- * 2k (or there are no mirrors at all) but on some, it's 4k.
- */
- mirror_size = MIRROR_SIZE;
- if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue &&
- check_mirror(shmem - MIRROR_SIZE, MIRROR_SIZE) == 0 &&
- check_mirror(shmem - 2 * MIRROR_SIZE, MIRROR_SIZE) == 1)
- mirror_size = 2 * MIRROR_SIZE;
-
- first_mirror = shmem - mirror_size;
- while (check_mirror(first_mirror, mirror_size) == 1)
- first_mirror -= mirror_size;
- first_mirror += mirror_size;
-
- last_mirror = shmem + mirror_size;
- while (check_mirror(last_mirror, mirror_size) == 1)
- last_mirror += mirror_size;
- last_mirror -= mirror_size;
-
- dev->mem_start = first_mirror;
- dev->mem_end = last_mirror + MIRROR_SIZE - 1;
-
- iounmap(p);
- release_mem_region(shmem, MIRROR_SIZE);
-
- if (!request_mem_region(dev->mem_start,
- dev->mem_end - dev->mem_start + 1,
- "arcnet (90xx)"))
- goto err_free_dev;
-
- /* reserve the irq */
- if (request_irq(airq, arcnet_interrupt, 0, "arcnet (90xx)", dev)) {
- arc_printk(D_NORMAL, dev, "Can't get IRQ %d!\n", airq);
- goto err_release_mem;
- }
- dev->irq = airq;
-
- /* Initialize the rest of the device structure. */
- lp->card_name = "COM90xx";
- lp->hw.command = com90xx_command;
- lp->hw.status = com90xx_status;
- lp->hw.intmask = com90xx_setmask;
- lp->hw.reset = com90xx_reset;
- lp->hw.owner = THIS_MODULE;
- lp->hw.copy_to_card = com90xx_copy_to_card;
- lp->hw.copy_from_card = com90xx_copy_from_card;
- lp->mem_start = ioremap(dev->mem_start,
- dev->mem_end - dev->mem_start + 1);
- if (!lp->mem_start) {
- arc_printk(D_NORMAL, dev, "Can't remap device memory!\n");
- goto err_free_irq;
- }
-
- /* get and check the station ID from offset 1 in shmem */
- arcnet_set_addr(dev, arcnet_readb(lp->mem_start,
- COM9026_REG_R_STATION));
-
- dev->base_addr = ioaddr;
-
- arc_printk(D_NORMAL, dev, "COM90xx station %02Xh found at %03lXh, IRQ %d, ShMem %lXh (%ld*%xh).\n",
- dev->dev_addr[0],
- dev->base_addr, dev->irq, dev->mem_start,
- (dev->mem_end - dev->mem_start + 1) / mirror_size,
- mirror_size);
-
- if (register_netdev(dev))
- goto err_unmap;
-
- cards[numcards++] = dev;
- return 0;
-
-err_unmap:
- iounmap(lp->mem_start);
-err_free_irq:
- free_irq(dev->irq, dev);
-err_release_mem:
- release_mem_region(dev->mem_start, dev->mem_end - dev->mem_start + 1);
-err_free_dev:
- free_arcdev(dev);
- return -EIO;
-}
-
-static void com90xx_command(struct net_device *dev, int cmd)
-{
- short ioaddr = dev->base_addr;
-
- arcnet_outb(cmd, ioaddr, COM9026_REG_W_COMMAND);
-}
-
-static int com90xx_status(struct net_device *dev)
-{
- short ioaddr = dev->base_addr;
-
- return arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
-}
-
-static void com90xx_setmask(struct net_device *dev, int mask)
-{
- short ioaddr = dev->base_addr;
-
- arcnet_outb(mask, ioaddr, COM9026_REG_W_INTMASK);
-}
-
-/* Do a hardware reset on the card, and set up necessary registers.
- *
- * This should be called as little as possible, because it disrupts the
- * token on the network (causes a RECON) and requires a significant delay.
- *
- * However, it does make sure the card is in a defined state.
- */
-static int com90xx_reset(struct net_device *dev, int really_reset)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- short ioaddr = dev->base_addr;
-
- arc_printk(D_INIT, dev, "Resetting (status=%02Xh)\n",
- arcnet_inb(ioaddr, COM9026_REG_R_STATUS));
-
- if (really_reset) {
- /* reset the card */
- arcnet_inb(ioaddr, COM9026_REG_R_RESET);
- mdelay(RESETtime);
- }
- /* clear flags & end reset */
- arcnet_outb(CFLAGScmd | RESETclear, ioaddr, COM9026_REG_W_COMMAND);
- arcnet_outb(CFLAGScmd | CONFIGclear, ioaddr, COM9026_REG_W_COMMAND);
-
-#if 0
- /* don't do this until we verify that it doesn't hurt older cards! */
- arcnet_outb(arcnet_inb(ioaddr, COM9026_REG_RW_CONFIG) | ENABLE16flag,
- ioaddr, COM9026_REG_RW_CONFIG);
-#endif
-
- /* verify that the ARCnet signature byte is present */
- if (arcnet_readb(lp->mem_start, COM9026_REG_R_STATUS) != TESTvalue) {
- if (really_reset)
- arc_printk(D_NORMAL, dev, "reset failed: TESTvalue not present.\n");
- return 1;
- }
- /* enable extended (512-byte) packets */
- arcnet_outb(CONFIGcmd | EXTconf, ioaddr, COM9026_REG_W_COMMAND);
-
- /* clean out all the memory to make debugging make more sense :) */
- if (BUGLVL(D_DURING))
- memset_io(lp->mem_start, 0x42, 2048);
-
- /* done! return success. */
- return 0;
-}
-
-static void com90xx_copy_to_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *memaddr = lp->mem_start + bufnum * 512 + offset;
-
- TIME(dev, "memcpy_toio", count, memcpy_toio(memaddr, buf, count));
-}
-
-static void com90xx_copy_from_card(struct net_device *dev, int bufnum,
- int offset, void *buf, int count)
-{
- struct arcnet_local *lp = netdev_priv(dev);
- void __iomem *memaddr = lp->mem_start + bufnum * 512 + offset;
-
- TIME(dev, "memcpy_fromio", count, memcpy_fromio(buf, memaddr, count));
-}
-
-MODULE_DESCRIPTION("ARCnet COM90xx normal chipset driver");
-MODULE_LICENSE("GPL");
-
-static int __init com90xx_init(void)
-{
- if (irq == 2)
- irq = 9;
- com90xx_probe();
- if (!numcards)
- return -EIO;
- return 0;
-}
-
-static void __exit com90xx_exit(void)
-{
- struct net_device *dev;
- struct arcnet_local *lp;
- int count;
-
- for (count = 0; count < numcards; count++) {
- dev = cards[count];
- lp = netdev_priv(dev);
-
- unregister_netdev(dev);
- free_irq(dev->irq, dev);
- iounmap(lp->mem_start);
- release_region(dev->base_addr, ARCNET_TOTAL_SIZE);
- release_mem_region(dev->mem_start,
- dev->mem_end - dev->mem_start + 1);
- free_arcdev(dev);
- }
-}
-
-module_init(com90xx_init);
-module_exit(com90xx_exit);
-
-#ifndef MODULE
-static int __init com90xx_setup(char *s)
-{
- int ints[8];
-
- s = get_options(s, 8, ints);
- if (!ints[0] && !*s) {
- pr_notice("Disabled\n");
- return 1;
- }
-
- switch (ints[0]) {
- default: /* ERROR */
- pr_err("Too many arguments\n");
- fallthrough;
- case 3: /* Mem address */
- shmem = ints[3];
- fallthrough;
- case 2: /* IRQ */
- irq = ints[2];
- fallthrough;
- case 1: /* IO address */
- io = ints[1];
- }
-
- if (*s)
- snprintf(device, sizeof(device), "%s", s);
-
- return 1;
-}
-
-__setup("com90xx=", com90xx_setup);
-#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread