Remove Token Ring support.
This commit is contained in:
parent
e3921a1b91
commit
ed469c22d6
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: mi,v 1.2302 2020/01/19 10:50:25 martin Exp $
|
||||
# $NetBSD: mi,v 1.2303 2020/01/19 20:00:36 thorpej Exp $
|
||||
#
|
||||
# Note: don't delete entries from here - mark them as "obsolete" instead.
|
||||
./etc/mtree/set.comp comp-sys-root
|
||||
|
@ -2366,7 +2366,7 @@
|
|||
./usr/include/net/if_stf.h comp-c-include
|
||||
./usr/include/net/if_stripvar.h comp-obsolete obsolete
|
||||
./usr/include/net/if_tap.h comp-c-include
|
||||
./usr/include/net/if_token.h comp-c-include
|
||||
./usr/include/net/if_token.h comp-obsolete obsolete
|
||||
./usr/include/net/if_tun.h comp-c-include
|
||||
./usr/include/net/if_types.h comp-c-include
|
||||
./usr/include/net/if_vlanvar.h comp-c-include
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: mi,v 1.1672 2020/01/19 17:53:15 thorpej Exp $
|
||||
# $NetBSD: mi,v 1.1673 2020/01/19 20:00:36 thorpej Exp $
|
||||
#
|
||||
# Note: don't delete entries from here - mark them as "obsolete" instead.
|
||||
#
|
||||
|
@ -1845,7 +1845,7 @@
|
|||
./usr/share/man/cat4/tprof.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/tps65217pmic.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/tqphy.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/tr.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/tr.0 man-obsolete obsolete
|
||||
./usr/share/man/cat4/tra.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/trm.0 man-sys-catman .cat
|
||||
./usr/share/man/cat4/tsllux.0 man-sys-catman .cat
|
||||
|
@ -4955,7 +4955,7 @@
|
|||
./usr/share/man/html4/tprof.html man-sys-htmlman html
|
||||
./usr/share/man/html4/tps65217pmic.html man-sys-htmlman html
|
||||
./usr/share/man/html4/tqphy.html man-sys-htmlman html
|
||||
./usr/share/man/html4/tr.html man-sys-htmlman html
|
||||
./usr/share/man/html4/tr.html man-obsolete obsolete
|
||||
./usr/share/man/html4/tra.html man-sys-htmlman html
|
||||
./usr/share/man/html4/trm.html man-sys-htmlman html
|
||||
./usr/share/man/html4/tsllux.html man-sys-htmlman html
|
||||
|
@ -7985,7 +7985,7 @@
|
|||
./usr/share/man/man4/tprof.4 man-sys-man .man
|
||||
./usr/share/man/man4/tps65217pmic.4 man-sys-man .man
|
||||
./usr/share/man/man4/tqphy.4 man-sys-man .man
|
||||
./usr/share/man/man4/tr.4 man-sys-man .man
|
||||
./usr/share/man/man4/tr.4 man-obsolete obsolete
|
||||
./usr/share/man/man4/tra.4 man-sys-man .man
|
||||
./usr/share/man/man4/trm.4 man-sys-man .man
|
||||
./usr/share/man/man4/tsllux.4 man-sys-man .man
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.696 2020/01/19 17:53:15 thorpej Exp $
|
||||
# $NetBSD: Makefile,v 1.697 2020/01/19 20:00:35 thorpej Exp $
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/18/93
|
||||
|
||||
MAN= aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
|
||||
|
@ -63,7 +63,7 @@ MAN= aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
|
|||
ssdfb.4 st.4 ste.4 stge.4 sti.4 stpcide.4 sv.4 \
|
||||
svwsata.4 swsensor.4 swwdog.4 sysmon.4 \
|
||||
tap.4 tc.4 tcds.4 tcp.4 tcu.4 tdvfb.4 tea5767radio.4 termios.4 tfb.4 \
|
||||
thinkpad.4 ti.4 tl.4 tlp.4 tlphy.4 tpm.4 tprof.4 tr.4 tra.4 \
|
||||
thinkpad.4 ti.4 tl.4 tlp.4 tlphy.4 tpm.4 tprof.4 tra.4 \
|
||||
trm.4 tsllux.4 tty.4 tun.4 tqphy.4 twa.4 twe.4 txp.4 \
|
||||
uark.4 ubsec.4 udp.4 uep.4 ug.4 uha.4 uk.4 ukphy.4 umb.4 \
|
||||
unix.4 userconf.4 \
|
||||
|
|
|
@ -1,112 +0,0 @@
|
|||
.\" $NetBSD: tr.4,v 1.15 2008/04/30 13:10:54 martin Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" This code is derived from software contributed to The NetBSD Foundation
|
||||
.\" by Christoph Badura.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd April 14, 1999
|
||||
.Dt TR 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm tr
|
||||
.Nd TROPIC based shared memory Token-Ring cards device driver
|
||||
.Sh SYNOPSIS
|
||||
.Cd "tr0 at isa? port 0xa20 iomem 0xd800 irq ?"
|
||||
.Cd "tr* at isa? port ? irq ?"
|
||||
.Cd "tr* at isapnp?"
|
||||
.Cd "tr* at mca? slot ?"
|
||||
.Cd "tr* at pcmcia? function ?"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
device driver supports TROPIC I based shared-memory Token-Ring cards.
|
||||
.Sh HARDWARE
|
||||
Supported cards include the following IBM and 3Com models:
|
||||
.Pp
|
||||
.Bl -tag -width xxxx -offset indent
|
||||
.It IBM
|
||||
Token-Ring Network PC Adapter
|
||||
.It IBM
|
||||
Token-Ring Network PC Adapter II
|
||||
.It IBM
|
||||
Token-Ring Network Adapter/A
|
||||
.It IBM
|
||||
Token-Ring Network 16/4 Adapter
|
||||
.It IBM
|
||||
Token-Ring Network 16/4 Adapter/A
|
||||
.It IBM
|
||||
Token-Ring 16/4 Credit Card Adapter
|
||||
.It IBM
|
||||
Token Ring Auto 16/4 Credit Card Adapter
|
||||
.It IBM
|
||||
Turbo 16/4 Token Ring PC Card
|
||||
.It IBM
|
||||
16/4 ISA Adapter
|
||||
.It IBM
|
||||
Auto 16/4 Token-Ring ISA Adapter
|
||||
.It IBM
|
||||
Token Ring 16/4 Credit Card Adapter
|
||||
.It IBM
|
||||
Token Ring Auto 16/4 Credit Card Adapter
|
||||
.It IBM
|
||||
Turbo 16/4 Token Ring PC Card
|
||||
.It 3Com
|
||||
3C619 TokenLink
|
||||
.It 3Com
|
||||
3C319 TokenLink Velocity
|
||||
.It 3Com
|
||||
3C389 TokenLink Velocity PC Card
|
||||
.El
|
||||
.Sh SOURCE ROUTING
|
||||
Setting IFF_LINK0 enables Token-Ring source routing. Setting
|
||||
IFF_LINK1 uses all-routes broadcasts otherwise single-route broadcasts
|
||||
are used.
|
||||
.Sh NOTES
|
||||
The MCA attachment has been only tested on
|
||||
IBM Token Ring 16/4 Adapter/A so far.
|
||||
It doesn't support
|
||||
.Xr ifmedia 4
|
||||
yet, too.
|
||||
.\".Sh MEDIA SELECTION
|
||||
.\".Sh DIAGNOSTICS
|
||||
.Sh SEE ALSO
|
||||
.Xr ifmedia 4 ,
|
||||
.Xr intro 4 ,
|
||||
.Xr isa 4 ,
|
||||
.Xr isapnp 4 ,
|
||||
.Xr mca 4 ,
|
||||
.Xr pcmcia 4 ,
|
||||
.Xr ifconfig 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
driver
|
||||
appeared in
|
||||
.Nx 1.4 .
|
||||
.Sh BUGS
|
||||
The PCMCIA attachment does not work with the
|
||||
.Xr cbb 4
|
||||
CardBus driver.
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: ALL,v 1.138 2020/01/19 06:55:22 thorpej Exp $
|
||||
# $NetBSD: ALL,v 1.139 2020/01/19 20:00:37 thorpej Exp $
|
||||
# From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
|
||||
#
|
||||
# ALL machine description file
|
||||
|
@ -17,7 +17,7 @@ include "arch/amd64/conf/std.amd64"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "ALL-$Revision: 1.138 $"
|
||||
#ident "ALL-$Revision: 1.139 $"
|
||||
|
||||
maxusers 64 # estimated number of users
|
||||
|
||||
|
@ -1036,8 +1036,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLAN/IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
@ -1069,9 +1067,6 @@ le* at bicc?
|
|||
ne0 at isa? port 0x280 irq 9 # NE[12]000 Ethernet cards
|
||||
ne1 at isa? port 0x300 irq 10
|
||||
sm0 at isa? port 0x300 irq 10 # SMC91C9x Ethernet
|
||||
tr0 at isa? port 0xa20 iomem 0xd8000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr1 at isa? port 0xa24 iomem 0xd0000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr* at isa? port ? irq ? # 3Com TROPIC based Token-Ring
|
||||
we0 at isa? port 0x280 iomem 0xd0000 irq 9 # WD/SMC Ethernet
|
||||
we1 at isa? port 0x300 iomem 0xcc000 irq 10
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: GENERIC,v 1.556 2020/01/19 06:55:22 thorpej Exp $
|
||||
# $NetBSD: GENERIC,v 1.557 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# GENERIC machine description file
|
||||
#
|
||||
|
@ -22,7 +22,7 @@ include "arch/amd64/conf/std.amd64"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "GENERIC-$Revision: 1.556 $"
|
||||
#ident "GENERIC-$Revision: 1.557 $"
|
||||
|
||||
maxusers 64 # estimated number of users
|
||||
|
||||
|
@ -852,8 +852,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
#tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
|
|
@ -213,7 +213,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: MPCSA_GENERIC,v 1.68 2020/01/19 01:25:04 thorpej Exp $
|
||||
# $NetBSD: MPCSA_GENERIC,v 1.69 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# GENERIC machine description file
|
||||
#
|
||||
|
@ -22,7 +22,7 @@ include "arch/evbarm/conf/std.mpcsa"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "GENERIC-$Revision: 1.68 $"
|
||||
#ident "GENERIC-$Revision: 1.69 $"
|
||||
|
||||
maxusers 32 # estimated number of users
|
||||
|
||||
|
@ -370,8 +370,6 @@ sd* at atapibus? drive ? flags 0x0000 # ATAPI disk drives
|
|||
#ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
#ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
#sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
#tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
#xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
#com* at xirc?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: TWINTAIL,v 1.76 2020/01/19 01:25:05 thorpej Exp $
|
||||
# $NetBSD: TWINTAIL,v 1.77 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# TWINTAIL -- Genetec corp. G4255EB-X002 Evaluation Board Kernel
|
||||
#
|
||||
|
@ -325,8 +325,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: OPENBLOCKS266_OPT,v 1.27 2019/04/13 08:22:59 isaki Exp $
|
||||
# $NetBSD: OPENBLOCKS266_OPT,v 1.28 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
|
||||
include "arch/evbppc/conf/OPENBLOCKS266"
|
||||
|
@ -77,8 +77,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
#tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: ALL,v 1.482 2020/01/19 06:55:23 thorpej Exp $
|
||||
# $NetBSD: ALL,v 1.483 2020/01/19 20:00:37 thorpej Exp $
|
||||
# From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
|
||||
#
|
||||
# ALL machine description file
|
||||
|
@ -17,7 +17,7 @@ include "arch/i386/conf/std.i386"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "ALL-$Revision: 1.482 $"
|
||||
#ident "ALL-$Revision: 1.483 $"
|
||||
|
||||
maxusers 64 # estimated number of users
|
||||
|
||||
|
@ -1115,7 +1115,6 @@ ep* at isapnp? # 3Com 3c509 Ethernet
|
|||
fmv* at isapnp? # Fujitsu FMV-183
|
||||
le* at isapnp? # AMD PCnet-ISA Ethernet
|
||||
ne* at isapnp? # NE2000-compatible Ethernet
|
||||
tr* at isapnp? # IBM/3Com TROPIC Token-Ring
|
||||
|
||||
# PCMCIA network interfaces
|
||||
an* at pcmcia? function ? # Aironet PC4500/PC4800 (802.11)
|
||||
|
@ -1128,8 +1127,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLAN/IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
@ -1161,9 +1158,6 @@ le* at bicc?
|
|||
ne0 at isa? port 0x280 irq 9 # NE[12]000 Ethernet cards
|
||||
ne1 at isa? port 0x300 irq 10
|
||||
sm0 at isa? port 0x300 irq 10 # SMC91C9x Ethernet
|
||||
tr0 at isa? port 0xa20 iomem 0xd8000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr1 at isa? port 0xa24 iomem 0xd0000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr* at isa? port ? irq ? # 3Com TROPIC based Token-Ring
|
||||
we0 at isa? port 0x280 iomem 0xd0000 irq 9 # WD/SMC Ethernet
|
||||
we1 at isa? port 0x300 iomem 0xcc000 irq 10
|
||||
|
||||
|
@ -1187,7 +1181,6 @@ ep* at mca? slot ? # 3Com EtherLink III (3c529)
|
|||
we* at mca? slot ? # WD/SMC Ethernet
|
||||
ate* at mca? slot ? # Allied Telesis AT1720
|
||||
ne* at mca? slot ? # Novell NE/2 and clones
|
||||
tr* at mca? slot ? # IBM Token Ring adapter
|
||||
tra* at mca? slot ? # Tiara LANCard/E and clones
|
||||
le* at mca? slot ? # SKNET Personal/MC2+
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: GENERIC,v 1.1220 2020/01/19 06:55:23 thorpej Exp $
|
||||
# $NetBSD: GENERIC,v 1.1221 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# GENERIC machine description file
|
||||
#
|
||||
|
@ -22,7 +22,7 @@ include "arch/i386/conf/std.i386"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "GENERIC-$Revision: 1.1220 $"
|
||||
#ident "GENERIC-$Revision: 1.1221 $"
|
||||
|
||||
maxusers 64 # estimated number of users
|
||||
|
||||
|
@ -1029,7 +1029,6 @@ ep* at isapnp? # 3Com 3c509 Ethernet
|
|||
fmv* at isapnp? # Fujitsu FMV-183
|
||||
le* at isapnp? # AMD PCnet-ISA Ethernet
|
||||
ne* at isapnp? # NE2000-compatible Ethernet
|
||||
tr* at isapnp? # IBM/3Com TROPIC Token-Ring
|
||||
|
||||
# PCMCIA network interfaces
|
||||
an* at pcmcia? function ? # Aironet PC4500/PC4800 (802.11)
|
||||
|
@ -1042,8 +1041,6 @@ mbe* at pcmcia? function ? # MB8696x based Ethernet
|
|||
ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
ray* at pcmcia? function ? # Raytheon Raylink (802.11)
|
||||
sm* at pcmcia? function ? # Megahertz Ethernet
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
#tr* at pcmcia? function ? # TROPIC based Token-Ring
|
||||
wi* at pcmcia? function ? # Lucent/Intersil WaveLAN/IEEE (802.11)
|
||||
xirc* at pcmcia? function ? # Xircom CreditCard Ethernet
|
||||
com* at xirc?
|
||||
|
@ -1075,9 +1072,6 @@ le* at bicc?
|
|||
ne0 at isa? port 0x280 irq 9 # NE[12]000 Ethernet cards
|
||||
ne1 at isa? port 0x300 irq 10
|
||||
sm0 at isa? port 0x300 irq 10 # SMC91C9x Ethernet
|
||||
tr0 at isa? port 0xa20 iomem 0xd8000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr1 at isa? port 0xa24 iomem 0xd0000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr* at isa? port ? irq ? # 3Com TROPIC based Token-Ring
|
||||
we0 at isa? port 0x280 iomem 0xd0000 irq 9 # WD/SMC Ethernet
|
||||
we1 at isa? port 0x300 iomem 0xcc000 irq 10
|
||||
|
||||
|
@ -1101,7 +1095,6 @@ ep* at mca? slot ? # 3Com EtherLink III (3c529)
|
|||
we* at mca? slot ? # WD/SMC Ethernet
|
||||
ate* at mca? slot ? # Allied Telesis AT1720
|
||||
ne* at mca? slot ? # Novell NE/2 and clones
|
||||
tr* at mca? slot ? # IBM Token Ring adapter
|
||||
tra* at mca? slot ? # Tiara LANCard/E and clones
|
||||
le* at mca? slot ? # SKNET Personal/MC2+
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: GENERIC_PS2TINY,v 1.80 2018/08/01 16:59:09 maxv Exp $
|
||||
# $NetBSD: GENERIC_PS2TINY,v 1.81 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# GENERIC-style kernel config for IBM PS/2 with MCA bus. It only contains
|
||||
# IBM PS/2 related stuff and has been generally trimmed down somewhat,
|
||||
|
@ -177,7 +177,6 @@ ep* at mca? slot ? # 3Com EtherLink III (3c529)
|
|||
we* at mca? slot ? # WD/SMC Ethernet
|
||||
ate* at mca? slot ? # Allied Telesis AT1720
|
||||
ne* at mca? slot ? # Novell NE/2 and clones
|
||||
tr* at mca? slot ? # IBM Token Ring adapter
|
||||
tra* at mca? slot ? # Tiara LANCard/E and clones
|
||||
le* at mca? slot ? # SKNET Personal/MC2+
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: INSTALL_FLOPPY,v 1.51 2020/01/19 06:55:23 thorpej Exp $
|
||||
# $NetBSD: INSTALL_FLOPPY,v 1.52 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# INSTALL - Installation kernel.
|
||||
#
|
||||
|
@ -525,7 +525,6 @@ ep* at isapnp? # 3Com 3c509 Ethernet
|
|||
fmv* at isapnp? # Fujitsu FMV-183
|
||||
le* at isapnp? # AMD PCnet-ISA Ethernet
|
||||
ne* at isapnp? # NE2000-compatible Ethernet
|
||||
tr* at isapnp? # IBM/3Com TROPIC Token-Ring
|
||||
|
||||
# PCMCIA network interfaces
|
||||
an* at pcmcia? function ? # Aironet PC4500/PC4800 (802.11)
|
||||
|
@ -568,9 +567,6 @@ le* at bicc?
|
|||
ne0 at isa? port 0x280 irq 9 # NE[12]000 Ethernet cards
|
||||
ne1 at isa? port 0x300 irq 10
|
||||
sm0 at isa? port 0x300 irq 10 # SMC91C9x Ethernet
|
||||
tr0 at isa? port 0xa20 iomem 0xd8000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr1 at isa? port 0xa24 iomem 0xd0000 irq ? # IBM TROPIC based Token-Ring
|
||||
tr* at isa? port ? irq ? # 3Com TROPIC based Token-Ring
|
||||
we0 at isa? port 0x280 iomem 0xd0000 irq 9 # WD/SMC Ethernet
|
||||
we1 at isa? port 0x300 iomem 0xcc000 irq 10
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: GENERIC,v 1.220 2020/01/19 06:55:24 thorpej Exp $
|
||||
# $NetBSD: GENERIC,v 1.221 2020/01/19 20:00:37 thorpej Exp $
|
||||
#
|
||||
# GENERIC machine description file
|
||||
#
|
||||
|
@ -22,7 +22,7 @@ include "arch/sparc64/conf/std.sparc64"
|
|||
|
||||
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
|
||||
|
||||
#ident "GENERIC-$Revision: 1.220 $"
|
||||
#ident "GENERIC-$Revision: 1.221 $"
|
||||
|
||||
maxusers 64
|
||||
|
||||
|
@ -796,8 +796,6 @@ pseudo-device stf # 6to4 IPv6 over IPv4 encapsulation
|
|||
#ne* at pcmcia? function ? # NE2000-compatible Ethernet
|
||||
#ray* at pcmcia? function ? # Raytheon Raylink (802.11) UT
|
||||
#sm* at pcmcia? function ? # Megahertz Ethernet UT
|
||||
# tr at pcmcia has problems with Cardbus bridges
|
||||
#tr* at pcmcia? function ? # TROPIC based Token-Ring UT
|
||||
#wi* at pcmcia? function ? # Lucent/Intersil WaveLan IEEE (802.11)
|
||||
#xirc* at pcmcia? function ? # Xircom CreditCard Ethernet UT
|
||||
#com* at xirc?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files,v 1.1250 2020/01/19 06:55:24 thorpej Exp $
|
||||
# $NetBSD: files,v 1.1251 2020/01/19 20:00:37 thorpej Exp $
|
||||
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
|
||||
|
||||
version 20171118
|
||||
|
@ -438,14 +438,12 @@ include "dev/splash/files.splash"
|
|||
include "dev/videomode/files.videomode"
|
||||
|
||||
# net device attributes - we have generic code for arc(net), ether(net),
|
||||
# fddi, and token ring.
|
||||
# and fddi
|
||||
#
|
||||
define arcnet
|
||||
define ether
|
||||
define fddi
|
||||
define hippi
|
||||
define ieee1394
|
||||
define token
|
||||
define sppp
|
||||
define wlan
|
||||
define crypto
|
||||
|
@ -771,11 +769,6 @@ file dev/ic/dp83905.c dp83905
|
|||
define mx98905
|
||||
file dev/ic/mx98905.c mx98905
|
||||
|
||||
# TROPIC Token-Ring controller
|
||||
#
|
||||
device tr: arp, token, ifnet
|
||||
file dev/ic/tropic.c tr
|
||||
|
||||
# NCR 5380 SCSI Bus Controller
|
||||
#
|
||||
define ncr5380sbc
|
||||
|
|
1744
sys/dev/ic/tropic.c
1744
sys/dev/ic/tropic.c
File diff suppressed because it is too large
Load Diff
|
@ -1,555 +0,0 @@
|
|||
/* $NetBSD: tropicreg.h,v 1.6 2005/12/11 12:21:28 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991 Carnegie Mellon University
|
||||
* Copyright (c) 1991 IBM Corporation
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation,
|
||||
* and that the name IBM not be used in advertising or publicity
|
||||
* pertaining to distribution of the software without specific, written
|
||||
* prior permission.
|
||||
*
|
||||
* CARNEGIE MELLON AND IBM ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON AND IBM DISCLAIM ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
/* $ACIS:if_lanreg.h 12.0$ */
|
||||
|
||||
#define TR_SWITCH 0
|
||||
#define TR_RESET 1
|
||||
#define TR_RELEASE 2
|
||||
#define TR_CLEARINT 3
|
||||
|
||||
/* macros to deal with accessing the MMIO region */
|
||||
#define MM_OUTB(sc, off, val) \
|
||||
bus_space_write_1((sc)->sc_memt, (sc)->sc_mmioh, (off), (val))
|
||||
#define MM_OUTW(sc, off, val) \
|
||||
bus_space_write_2((sc)->sc_memt, (sc)->sc_mmioh, (off), htons((val)))
|
||||
#define MM_INB(sc, off) \
|
||||
bus_space_read_1((sc)->sc_memt, (sc)->sc_mmioh, (off))
|
||||
#define MM_INW(sc, off) \
|
||||
ntohs(bus_space_read_2((sc)->sc_memt, (sc)->sc_mmioh, (off)))
|
||||
|
||||
/* macros to deal with accesses to the shared ram */
|
||||
#define SR_INB(sc, off) \
|
||||
bus_space_read_1(sc->sc_memt, sc->sc_sramh, (off))
|
||||
#define SR_INW(sc, off) \
|
||||
htons(bus_space_read_2(sc->sc_memt, sc->sc_sramh, (off)))
|
||||
#define SR_OUTB(sc, off, val) \
|
||||
bus_space_write_1((sc)->sc_memt, (sc)->sc_sramh, (off), (val))
|
||||
#define SR_OUTW(sc, off, val) \
|
||||
bus_space_write_2((sc)->sc_memt, (sc)->sc_sramh, (off), htons((val)))
|
||||
|
||||
/* macros to deal with accesses to the recv buffers */
|
||||
#define RB_INB(sc, rb, reg) SR_INB(sc, (rb)+(reg))
|
||||
#define RB_INW(sc, rb, reg) SR_INW(sc, (rb)+(reg))
|
||||
|
||||
/* macros to deal with the ACA */
|
||||
#define ACA_RDB(sc, reg) MM_INB(sc, ((sc->sc_aca+(reg))|ACA_RW))
|
||||
#define ACA_RDW(sc, reg) MM_INW(sc, ((sc->sc_aca+(reg))|ACA_RW))
|
||||
#define ACA_OUTB(sc, reg, val) MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_RW), (val))
|
||||
#define ACA_SETB(sc, reg, val) MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_SET), (val))
|
||||
#define ACA_RSTB(sc, reg, val) MM_OUTB(sc, ((sc->sc_aca+(reg))|ACA_RST), (val))
|
||||
|
||||
/* macros to deal with the SSB */
|
||||
#define SSB_INB(sc, ssb, reg) SR_INB(sc, (ssb)+(reg))
|
||||
|
||||
/* macros to deal with the ARB */
|
||||
#define ARB_INB(sc, arb, reg) SR_INB(sc, (arb)+(reg))
|
||||
#define ARB_INW(sc, arb, reg) SR_INW(sc, (arb)+(reg))
|
||||
|
||||
/* macros to deal with the SRB */
|
||||
#define SRB_INB(sc, srb, reg) SR_INB(sc, (srb)+(reg))
|
||||
#define SRB_INW(sc, srb, reg) SR_INW(sc, (srb)+(reg))
|
||||
#define SRB_OUTB(sc, srb, reg, val) SR_OUTB(sc, (srb)+(reg), (val))
|
||||
#define SRB_OUTW(sc, srb, reg, val) SR_OUTW(sc, (srb)+(reg), (val))
|
||||
|
||||
/* macros to deal with the ASB */
|
||||
#define ASB_INB(sc, asb, reg) SR_INB(sc, (asb)+(reg))
|
||||
#define ASB_INW(sc, asb, reg) SR_INW(sc, (asb)+(reg))
|
||||
#define ASB_OUTB(sc, asb, reg, val) SR_OUTB(sc, (asb)+(reg), (val))
|
||||
#define ASB_OUTW(sc, asb, reg, val) SR_OUTW(sc, (asb)+(reg), (val))
|
||||
|
||||
/* macros to deal with the TXCA */
|
||||
#define TXCA_INW(sc, reg) SR_INW(sc, sc->sc_txca+(reg))
|
||||
#define TXCA_OUTW(sc, reg, val) SR_OUTW(sc, sc->sc_txca+(reg), (val))
|
||||
|
||||
/* macros to deal with the txbuffers */
|
||||
#define TXB_INB(sc, buf, reg) SR_INB(sc, (buf)+(reg))
|
||||
#define TXB_INW(sc, buf, reg) SR_INW(sc, (buf)+(reg))
|
||||
#define TXB_OUTB(sc, buf, reg, val) SR_OUTB(sc, (buf)+(reg), (val))
|
||||
#define TXB_OUTW(sc, buf, reg, val) SR_OUTW(sc, (buf)+(reg), (val))
|
||||
|
||||
/* ACA registers */
|
||||
#define ACA_RRR 0
|
||||
#define ACA_RRR_e ACA_RRR
|
||||
#define ACA_RRR_o (ACA_RRR+1)
|
||||
#define ACA_WRBR 2
|
||||
#define ACA_WRBR_e ACA_WRBR
|
||||
#define ACA_WRBR_o (ACA_WRBR+1)
|
||||
#define ACA_WWOR 4
|
||||
#define ACA_WWOR_e ACA_WWOR
|
||||
#define ACA_WWOR_o (ACA_WWOR+1)
|
||||
#define ACA_WWCR 6
|
||||
#define ACA_WWCR_e ACA_WWCR
|
||||
#define ACA_WWCR_o (ACA_WWCR+1)
|
||||
#define ACA_ISRP 8
|
||||
#define ACA_ISRP_e ACA_ISRP
|
||||
#define ACA_ISRP_o (ACA_ISRP+1)
|
||||
#define ACA_ISRA 10
|
||||
#define ACA_ISRA_e ACA_ISRA
|
||||
#define ACA_ISRA_o (ACA_ISRA+1)
|
||||
#define ACA_TCR 12
|
||||
#define ACA_TCR_e ACA_TCR
|
||||
#define ACA_TCR_o (ACA_TCR+1)
|
||||
#define ACA_TVR 14
|
||||
#define ACA_TVR_e ACA_TVR
|
||||
#define ACA_TVR_o (ACA_TVR+1)
|
||||
|
||||
/* access flags; to be or-ed into offset */
|
||||
#define ACA_RW 0
|
||||
#define ACA_RST 0x20
|
||||
#define ACA_SET 0x40
|
||||
|
||||
/* offsets valid for all command blocks */
|
||||
#define CMD_CMD 0
|
||||
#define CMD_RETCODE 2
|
||||
|
||||
/*
|
||||
* Structure of SSB (System Status Block)
|
||||
*/
|
||||
#define SSB_SIZE 20 /* size of SSB */
|
||||
#define SSB_CMD 0
|
||||
#define SSB_CMDCORR 1
|
||||
#define SSB_RETCODE 2
|
||||
#define SSB_STATIONID 4
|
||||
#define SSB_XMITERR 6
|
||||
|
||||
/*
|
||||
* Structure of ARB (Adapter Request Block)
|
||||
*/
|
||||
#define ARB_SIZE 28 /* size of ARB */
|
||||
#define ARB_CMD 0
|
||||
#define ARB_STATIONID 4 /* ID of receiving station */
|
||||
|
||||
/* receive data command block */
|
||||
#define ARB_RXD_BUFADDR 6 /* RAM offset of 1st rec buf */
|
||||
#define ARB_RXD_LANHDRLEN 8 /* Length of LAN header */
|
||||
#define ARB_RXD_DLCHDRLEN 9 /* Length of DLC header */
|
||||
#define ARB_RXD_FRAMELEN 10 /* Length of entire frame */
|
||||
#define ARB_RXD_MSGTYPE 12 /* Category of message */
|
||||
|
||||
/* transmit data command block */
|
||||
#define ARB_XMT_CMDCORR 1
|
||||
#define ARB_XMT_DHBADDR 6
|
||||
|
||||
/* ring status change information block */
|
||||
#define ARB_RINGSTATUS 6
|
||||
|
||||
/* DLC status change response block */
|
||||
#define ARB_DLCSTAT_STATUS 6 /* status info field */
|
||||
#define ARB_DLCSTAT_FRMRDATA 8 /* 5 bytes */
|
||||
#define ARB_DLCSTAT_ACCPRIO 13
|
||||
#define ARB_DLCSTAT_REMADDR 14 /* remote address */
|
||||
#define ARB_DLCSTAT_REMSAP 20 /* remote sap */
|
||||
|
||||
/*
|
||||
* Structure of SRB (System Request Block)
|
||||
*/
|
||||
#define SRB_SIZE 28 /* size of SRB */
|
||||
#define SRB_CMD 0
|
||||
#define SRB_RETCODE 2
|
||||
|
||||
/* contents of SRB after adapter reset */
|
||||
#define INIT_COMPL 0x80 /* in SRB_CMD */
|
||||
#define SRB_INIT_STATUS 1
|
||||
#define RSP_DETECT 0x40
|
||||
#define FAST_PATH_TRANSMIT 0x20
|
||||
#define RING_MEASUREMENT 0x08
|
||||
#define RPL 0x02
|
||||
#define RSP_16 0x01
|
||||
#define SRB_INIT_STATUS2 2
|
||||
#define PNP 0x80
|
||||
#define SET_DEF_RSP 0x40
|
||||
#define AUTO_DEF_RSP_UPDATE 0x20
|
||||
#define SRB_INIT_BUC 6 /* bring up code */
|
||||
#define SRB_INIT_ENCADDR 8 /* offset of adapter's */
|
||||
/* permanent encoded address */
|
||||
#define SRB_INIT_LVLADDR 10 /* offset of adapter's */
|
||||
/* microcode level */
|
||||
#define SRB_INIT_ADAPADDR 12 /* offset of adapter addresses */
|
||||
#define SRB_INIT_PARMSADDR 14 /* offset of adapter parameters */
|
||||
#define SRB_INIT_MACADDR 16 /* offset of adapter MAC buffer */
|
||||
#define SRB_INIT_UTILADDR 18 /* offset of ring utilization measurement */
|
||||
|
||||
/* config fast path ram command block */
|
||||
#define SRB_CFP_CMDSIZE 12 /* length of command block */
|
||||
#define SRB_CFP_RAMSIZE 8
|
||||
#define SRB_CFP_BUFSIZE 10
|
||||
|
||||
/* config fast path transmit response block */
|
||||
#define SRB_CFPRESP_FPXMIT 8 /* offset to transmit control area */
|
||||
#define SRB_CFPRESP_SRBADDR 10 /* offset for the next SRB address */
|
||||
|
||||
/* open command block */
|
||||
#define SRB_OPEN_CMDSIZE 60
|
||||
#define SRB_OPEN_OPTIONS 8 /* open options */
|
||||
#define SRB_OPEN_NODEADDR 10 /* adapter's ring address */
|
||||
#define SRB_OPEN_GROUPADDR 16 /* adapter's group address */
|
||||
#define SRB_OPEN_FUNCTADDR 20 /* adapter's functional address */
|
||||
#define SRB_OPEN_NUMRCVBUF 24 /* number of receive buffers */
|
||||
#define SRB_OPEN_RCVBUFLEN 26 /* length of receive buffers */
|
||||
#define SRB_OPEN_DHBLEN 28 /* length of DHBs */
|
||||
#define SRB_OPEN_NUMDHB 30 /* number of DHBs */
|
||||
#define SRB_OPEN_DLCMAXSAP 32 /* max. number of SAPs */
|
||||
#define SRB_OPEN_DLCMAXSTA 33 /* max. number of link stations */
|
||||
#define SRB_OPEN_DLCMAXGSAP 34 /* max. number of group SAPs */
|
||||
#define SRB_OPEN_DLCMAXGMEM 35 /* max. members per group SAP */
|
||||
#define SRB_OPEN_DLCT1TICK1 36 /* timer T1 intvl. group one */
|
||||
#define SRB_OPEN_DLCT2TICK1 37 /* timer T7 intvl. group one */
|
||||
#define SRB_OPEN_DLCTITICK1 38 /* timer Ti intvl. group one */
|
||||
#define SRB_OPEN_DLCT1TICK2 39 /* timer T1 intvl. group two */
|
||||
#define SRB_OPEN_DLCT2TICK2 40 /* timer T7 intvl. group two */
|
||||
#define SRB_OPEN_DLCTITICK2 41 /* timer Ti intvl. group two */
|
||||
#define SRB_OPEN_PODUCTID 42 /* product id (18 bytes) */
|
||||
|
||||
/* open command response block */
|
||||
#define SRB_OPENRESP_ERRCODE 6
|
||||
#define SRB_OPENRESP_ASBADDR 8 /* offset of ASB */
|
||||
#define SRB_OPENRESP_SRBADDR 10 /* offset of SRB */
|
||||
#define SRB_OPENRESP_ARBADDR 12 /* offset of ARB */
|
||||
#define SRB_OPENRESP_SSBADDR 14 /* offset of SSB */
|
||||
|
||||
/* open sap command and response block */
|
||||
#define SRB_OPNSAP_STATIONID 4 /* ID of SAP after open */
|
||||
#define SRB_OPNSAP_TIMERT1 6 /* response timer */
|
||||
#define SRB_OPNSAP_TIMERT2 7 /* acknowledge timer */
|
||||
#define SRB_OPNSAP_TIMERTI 8 /* inactivity timer */
|
||||
#define SRB_OPNSAP_MAXOUT 9 /* max. xmits without ack */
|
||||
#define SRB_OPNSAP_MAXIN 10 /* max. recvs without ack */
|
||||
#define SRB_OPNSAP_MAXOUTINCR 11 /* window increment value */
|
||||
#define SRB_OPNSAP_MAXRETRY 12 /* N2 value */
|
||||
#define SRB_OPNSAP_GSAPMAXMEMB 13 /* max. SAPs for a group SAP */
|
||||
#define SRB_OPNSAP_MAXIFIELD 14 /* max recv info field length */
|
||||
#define SRB_OPNSAP_SAPVALUE 16 /* SAP to be opened */
|
||||
#define SRB_OPNSAP_SAPOPTIONS 17 /* options to be set */
|
||||
#define SRB_OPNSAP_STATIONCNT 18 /* num of link stations to reserve */
|
||||
#define SRB_OPNSAP_SAPGSAPMEMB 19 /* number of GSAP members */
|
||||
#define SRB_OPNSAP_GSAP1 20 /* first gsap request */
|
||||
|
||||
/* read log command and response block */
|
||||
#define SRB_RLOG_LOGDATA 14 /* 14 bytes of log data */
|
||||
#define SRB_LOG_LINEERRS (SRB_RLOG_LOGDATA+0) /* line errors */
|
||||
#define SRB_LOG_INTERRS (SRB_RLOG_LOGDATA+1) /* internal errors */
|
||||
#define SRB_LOG_BRSTERRS (SRB_RLOG_LOGDATA+2) /* burst errors */
|
||||
#define SRB_LOG_ACERRS (SRB_RLOG_LOGDATA+3) /* AC errors */
|
||||
#define SRB_LOG_ABRTERRS (SRB_RLOG_LOGDATA+4) /* abort errors */
|
||||
#define SRB_LOG_LOSTFRMS (SRB_RLOG_LOGDATA+6) /* lost frames */
|
||||
#define SRB_LOG_RCVCONG (SRB_RLOG_LOGDATA+7) /* receive congestion count */
|
||||
#define SRB_LOG_FCPYERRS (SRB_RLOG_LOGDATA+8) /* frame copied errors */
|
||||
#define SRB_LOG_FREQERRS (SRB_RLOG_LOGDATA+9) /* frequency erros */
|
||||
#define SRB_LOG_TOKENERRS (SRB_RLOG_LOGDATA+10) /* token errors */
|
||||
|
||||
/* set default ring speed command */
|
||||
#define SRB_SET_DEFRSP 6
|
||||
|
||||
/*
|
||||
* Structure of ASB (Adapter Status Block)
|
||||
*/
|
||||
#define ASB_SIZE 12 /* size of ASB */
|
||||
#define RECV_CMD 0
|
||||
#define RECV_RETCODE 2
|
||||
#define RECV_STATIONID 4
|
||||
|
||||
#define RECV_RESP_RECBUFADDR 6
|
||||
|
||||
/* host response to xmit-req-data command */
|
||||
#define XMIT_CMD 0
|
||||
#define XMIT_CMDCORR 1 /* command correlator */
|
||||
#define XMIT_RETCODE 2 /* return code */
|
||||
#define XMIT_STATIONID 4 /* id of sending station */
|
||||
#define XMIT_FRAMELEN 6 /* length of entire frame */
|
||||
#define XMIT_HDRLEN 8 /* length of LAN header */
|
||||
#define XMIT_REMSAP 9 /* remote SAP */
|
||||
#define XMIT_DATA 10 /* offset of first data byte */
|
||||
/* fast path specific data */
|
||||
#define XMIT_LASTBUF 12
|
||||
#define XMIT_FRAMEPTR 14
|
||||
#define XMIT_NEXTBUF 16
|
||||
#define XMIT_STATUS 18
|
||||
#define XMIT_STRIPFS 19
|
||||
#define XMIT_BUFLEN 20
|
||||
#define XMIT_FP_DATA 22 /* offset of first data byte */
|
||||
|
||||
#if 0 /* XXXchb unused? */
|
||||
/*
|
||||
* Adapter addresses
|
||||
*/
|
||||
struct adapt_addr {
|
||||
unsigned char node_addr[6]; /* Adapter node address */
|
||||
unsigned char grp_addr[4]; /* Adapter group address */
|
||||
unsigned char func_addr[4]; /* Adapter functional address */
|
||||
};
|
||||
|
||||
/*
|
||||
* Adapter parameters
|
||||
*/
|
||||
struct param_addr {
|
||||
unsigned char phys_addr[4]; /* Adapter physical address */
|
||||
unsigned char up_node_addr[6]; /* Next active upstream node
|
||||
* addr */
|
||||
unsigned char up_phys_addr[4]; /* Next active upstream phys
|
||||
* addr */
|
||||
unsigned char poll_addr[6]; /* Last poll address */
|
||||
unsigned char res0[2];/* Reserved */
|
||||
unsigned char acc_priority[2]; /* Transmit access priority */
|
||||
unsigned char src_class[2]; /* Source class authorization */
|
||||
unsigned char att_code[2]; /* Last attention code */
|
||||
unsigned char src_addr[6]; /* Last source address */
|
||||
unsigned char bcon_type[2]; /* Last beacon type */
|
||||
unsigned char major_vector[2]; /* Last major vector */
|
||||
unsigned char ring_stat[2]; /* ring status */
|
||||
unsigned char soft_error[2]; /* soft error timer value */
|
||||
unsigned char fe_error[2]; /* front end error counter */
|
||||
unsigned char next_state[2]; /* next state indicator */
|
||||
unsigned char mon_error[2]; /* Monitor error code */
|
||||
unsigned char bcon_xmit[2]; /* Beacon transmit type */
|
||||
unsigned char bcon_receive[2]; /* Beacon receive type */
|
||||
unsigned char frame_correl[2]; /* Frame correlator save */
|
||||
unsigned char bcon_naun[6]; /* beacon station NAUN */
|
||||
unsigned char res1[4];/* Reserved */
|
||||
unsigned char bcon_phys[4]; /* Beacon station physical addr */
|
||||
};
|
||||
#endif
|
||||
|
||||
#define TXCA_BUFFER_COUNT 0
|
||||
#define TXCA_FREE_QUEUE_HEAD 2
|
||||
#define TXCA_FREE_QUEUE_TAIL 4
|
||||
#define TXCA_ADAPTER_QUEUE_HEAD 6
|
||||
#define TXCA_BUFFER_SIZE 8
|
||||
#define TXCA_COMPLETION_QUEUE_TAIL 10
|
||||
|
||||
/* Adapter receive buffer structure */
|
||||
#define RB_NEXTBUF 2 /* offset of next buf plus 2 in sram */
|
||||
#define RB_FS 5 /* FS/addr match (last buf only) */
|
||||
#define RB_BUFLEN 6 /* length of data in this buffer */
|
||||
#define RB_DATA 8 /* RCV_BUF_DLEN bytes frame data */
|
||||
|
||||
/* Misc. structure sizes. */
|
||||
#define SAPCB_SIZE 64 /* size of SAP control block */
|
||||
#define LSCB_SIZE 144 /* size of DLC link station control block */
|
||||
|
||||
/* memory in shared ram area that is reserved by the adapter */
|
||||
#define PRIVRAM_SIZE 1416 /* adapter private ram area */
|
||||
#define RESVDMEM_SIZE (PRIVRAM_SIZE+ARB_SIZE+SSB_SIZE+SRB_SIZE+ASB_SIZE)
|
||||
|
||||
/* Memory offsets of adapter control areas */
|
||||
|
||||
#define TR_SRAM_DEFAULT 0xd8000
|
||||
|
||||
/* Offset of MMIO region */
|
||||
#define TR_MMIO_OFFSET 0x80000
|
||||
#define TR_MMIO_MINADDR 0xc0000
|
||||
#define TR_MMIO_MAXADDR 0xde000
|
||||
#define TR_MMIO_SIZE 8192
|
||||
|
||||
#define TR_ACA_OFFSET 0x1e00 /* Offset of ACA in MMIO region */
|
||||
/*
|
||||
* XXX Create AIP structure
|
||||
*/
|
||||
#define TR_MAC_OFFSET 0x1f00 /* Offset of MAC address in MMIO region */
|
||||
#define TR_ID_OFFSET 0x1f30 /* Offset of ID in MMIO region */
|
||||
#define TR_TYP_OFFSET 0x1fa0 /* Offset of TYP in MMIO region */
|
||||
#define TR_RATES_OFFSET 0x1fa2 /* Offset of supported speeds in MMIO region */
|
||||
#define TR_RAM_OFFSET 0x1fa6 /* Offset of available shared RAM */
|
||||
#define TR_PAGE_OFFSET 0x1fa8 /* Offset of shared-RAM paging support */
|
||||
#define TR_DHB4_OFFSET 0x1faa /* Offset of available DHB size at 4Mbit */
|
||||
#define TR_DHB16_OFFSET 0x1fac /* Offset of available DHB size at 16Mbit */
|
||||
#define TR_MEDIAS_OFFSET 0x1fb6 /* Offset of supported media types in MMIO */
|
||||
#define TR_MEDIA_OFFSET 0x1fb8 /* Offset of selected media type in MMIO */
|
||||
#define TR_IRQ_OFFSET 0x1fba /* Offset of IRQs supported in MMIO region */
|
||||
|
||||
/* Bring-Up Test results */
|
||||
|
||||
#define BUT_OK 0x0000 /* Initialization completed OK */
|
||||
#define BUT_PROCESSOR_FAIL 0x0020 /* Failed processor initialization */
|
||||
#define BUT_ROM_FAIL 0x0022 /* Failed ROM test diagnostic */
|
||||
#define BUT_RAM_FAIL 0x0024 /* Failed RAM test diagnostic */
|
||||
#define BUT_INST_FAIL 0x0026 /* Failed instruction test diag. */
|
||||
#define BUT_INTER_FAIL 0x0028 /* Failed interrupt test diagnostic */
|
||||
#define BUT_MEM_FAIL 0x002a /* Failed memory interface diag. */
|
||||
#define BUT_PROTOCOL_FAIL 0x002c /* Failed protocol handler diag. */
|
||||
|
||||
|
||||
/* Direct PC-to-adapter commands */
|
||||
|
||||
#define DIR_INTERRUPT 0x00 /* Cause adapter to interrupt the PC */
|
||||
#define DIR_MOD_OPEN_PARAMS 0x01 /* Modify open options */
|
||||
#define DIR_RESTORE_OPEN_PARMS 0x02 /* Restore open options */
|
||||
#define DIR_OPEN_ADAPTER 0x03 /* Open the adapter card */
|
||||
#define DIR_CLOSE 0x04 /* Close adapter card */
|
||||
#define DIR_SET_GRP_ADDR 0x06 /* Set adapter group address */
|
||||
#define DIR_SET_FUNC_ADDR 0x07 /* Set adapter functional addr */
|
||||
#define DIR_READ_LOG 0x08 /* Read and reset error counters */
|
||||
#define DIR_SET_BRIDGE_PARMS 0x09
|
||||
#define DIR_CONFIG_BRIDGE_RAM 0x0c
|
||||
#define DIR_CONFIG_FAST_PATH_RAM 0x12
|
||||
#define DIR_SINGLE_ROUTE_BROADCAST 0x1f
|
||||
#define DIR_SET_DEFAULT_RING_SPEED 0x21
|
||||
|
||||
#define XMIT_DIR_FRAME 0x0a /* Direct station transmit */
|
||||
#define XMIT_I_FRAME 0x0b
|
||||
#define XMIT_UI_FRM 0x0d /* transmit unnumbered info frame */
|
||||
#define XMIT_XID_CMD 0x0e /* transmit XID command */
|
||||
#define XMIT_XID_RESP_FINAL 0x0f
|
||||
#define XMIT_XID_RESP_NOT_FINAL 0x10
|
||||
#define XMIT_TEST_CMD 0x11 /* transmit TEST command */
|
||||
|
||||
|
||||
/* Adapter-Card-to-PC commands */
|
||||
|
||||
#define REC_DATA 0x81 /* Data received from ring station */
|
||||
#define XMIT_DATA_REQ 0x82 /* Adapter needs data to xmit */
|
||||
#define DLC_STATUS 0x83 /* DLC status has changed */
|
||||
#define RING_STAT_CHANGE 0x84 /* Adapter has new ring-status info */
|
||||
#define REC_BRIDGE_DATA 0x85
|
||||
#define REXMIT_DATA_REQ 0x86
|
||||
|
||||
/* Open options */
|
||||
|
||||
#define OPEN_WRAP 0x8000 /* Wrap xmit data to receive data */
|
||||
#define OPEN_NO_HARD_ERR 0x4000 /* Ring hard error and xmit beacon */
|
||||
/* conditions do not cause interrupt */
|
||||
#define OPEN_NO_SOFT_ERR 0x2000 /* Ring soft errors do not cause */
|
||||
/* interrupt */
|
||||
#define OPEN_PASS_MAC 0x1000 /* Pass all adapter-class MAC frames */
|
||||
/* received but not supported by the */
|
||||
/* adapter */
|
||||
#define OPEN_PASS_ATTN_MAC 0x0800 /* Pass all attention-class MAC */
|
||||
/* frames != the previously received */
|
||||
/* attention MAC frame */
|
||||
#define OPEN_PASS_BCON_MAC 0x0100 /* Pass the first beacon MAC frame */
|
||||
/* and all subsequent beacon MAC */
|
||||
/* frames that have a change in */
|
||||
/* source address or beacon type */
|
||||
#define OPEN_CONT 0x0080 /* Adapter will participate in */
|
||||
/* monitor contention */
|
||||
|
||||
#define NUM_RCV_BUF 4 /* Number of receive buffers in */
|
||||
/* shared RAM needed for adapter to */
|
||||
/* open */
|
||||
#define RCV_BUF_LEN 520 /* Length of each receive buffer */
|
||||
#define RCV_BUF_DLEN RCV_BUF_LEN - 8 /* Length of data in rec buf */
|
||||
|
||||
#define DHB_LENGTH 512 /* Length of each transmit buffer */
|
||||
#define FP_BUF_LEN 536 /* length of each FP transmit buffer */
|
||||
|
||||
/*
|
||||
* Integrity cannot be guaranteed if number of dhbs > 2
|
||||
*/
|
||||
#define NUM_DHB 1 /* Number of transmit buffers */
|
||||
|
||||
#define DLC_MAX_SAP 0 /* MAX number of SAPs */
|
||||
#define DLC_MAX_STA 0 /* MAX number of link stations */
|
||||
#define DLC_MAX_GSAP 0 /* MAX number of group SAPs */
|
||||
#define DLC_MAX_GMEM 0 /* MAX number of SAPs that can be */
|
||||
/* assigned to any given group */
|
||||
#define DLC_TICK 0 /* Zero selects default of 40ms */
|
||||
|
||||
|
||||
/* Open return codes */
|
||||
|
||||
#define OPEN_OK 0x00 /* Open completed successfully */
|
||||
#define OPEN_BAD_COMMAND 0x01 /* Invalid command code */
|
||||
#define OPEN_ALREADY 0x03 /* Adapter is ALREADY open */
|
||||
#define OPEN_MISSING_PARAMS 0x05 /* Required parameters missing */
|
||||
#define OPEN_UNRECOV_FAIL 0x07 /* Unrecoverable failure occurred */
|
||||
#define OPEN_INAD_REC_BUFS 0x30 /* Inadequate receive buffers */
|
||||
#define OPEN_BAD_NODE_ADDR 0x32 /* Invalid NODE address */
|
||||
#define OPEN_BAD_REC_BUF_LEN 0x33 /* Invalid receive buffer length */
|
||||
#define OPEN_BAD_XMIT_BUF_LEN 0x43 /* Invalid transmit buffer length */
|
||||
|
||||
/* Bit definitions of ISRA High Byte, (Adapter Status) */
|
||||
#define PARITY_ERROR 0x80 /* Parity error on the adapter's internal bus */
|
||||
#define TIMER_STAT 0x40 /* A Timer Control Reg. has an interrupt */
|
||||
#define ACCESS_STAT 0x20 /* Shared RAM or MMIO access violation */
|
||||
#define DEADMAN_TIMER 0x10 /* The deadman timer has expired */
|
||||
#define PROCESSOR_CK 0x08 /* Adapter Processor Check */
|
||||
#define H_INT_MASK 0x02 /* When on, no adapter hardware interrupts */
|
||||
#define S_INT_MASK 0x01 /* When on, no adapter software interrupts */
|
||||
|
||||
/* Bit definitions of ISRA Low Byte, (Used by PC to interrupt adapter) */
|
||||
#define XMIT_REQ 0x40 /* Transmit frame in fast path transmit buf */
|
||||
#define CMD_IN_SRB 0x20 /* Inform adapter of command in SRB */
|
||||
#define RESP_IN_ASB 0x10 /* Inform adapter of response in ASB */
|
||||
#define SRB_FREE 0x08 /* Inform PC when SRB is FREE */
|
||||
#define ASB_FREE 0x04 /* Inform PC when ASB is FREE */
|
||||
#define ARB_FREE 0x02 /* Inform adapter ARB is FREE */
|
||||
#define SSB_FREE 0x01 /* Inform adapter SSB is FREE */
|
||||
|
||||
/* Bit definitions of ISRP High Byte, (PC interrupts and interrupt control) */
|
||||
#define NMI_INT_CTL 0x80 /* 1 = all interrupts to PC interrupt level */
|
||||
/* 0 = error and timer interrupts to PC NMI */
|
||||
#define INT_ENABLE 0x40 /* Allow adapter to interrupt the PC */
|
||||
#define TCR_INT 0x10 /* Timer Control Reg. has interrupt for PC */
|
||||
#define ERR_INT 0x08 /* Adap machine check, deadman timer, overrun */
|
||||
#define ACCESS_INT 0x04 /* Shared RAM or MMIO access violation */
|
||||
#define SHARED_INT_BLK 0x02 /* Shared interrupt blocked */
|
||||
#define PRIM_ALT_ADDR 0x01 /* 0 = primary adapter address */
|
||||
/* 1 = alternate adapter address */
|
||||
|
||||
/* Bit definitions of ISRP Low Byte, (PC interrupts) */
|
||||
#define ADAP_CHK_INT 0x40 /* The adapter has an unrecoverable error */
|
||||
#define SRB_RESP_INT 0x20 /* Adapter has placed a response in the SRB */
|
||||
#define ASB_FREE_INT 0x10 /* Adapter has read response in ARB */
|
||||
#define ARB_CMD_INT 0x08 /* ARB has command for PC to act on */
|
||||
#define SSB_RESP_INT 0x04 /* SSB has response to previous SRB command */
|
||||
#define XMIT_COMPLETE 0x02 /* Fast path transmit frame complete */
|
||||
|
||||
|
||||
/* Constants for Token-Ring physical header */
|
||||
#define DLC_HDR_LEN 0x3 /* Length of DLC header */
|
||||
#define SNAP_LENGTH 0x05 /* SNAP field length */
|
||||
/* protocol id = 3 bytes */
|
||||
/* ethertype = 2 bytes */
|
||||
#define HDR_LNGTH_NOROUTE 14 /* length of header with no route info */
|
||||
#define SKIP_DSAP_SSAP 0x02 /* length of dsap and ssap in llc frame */
|
||||
#define TR_MAX_LINK_HDR 46 /* max length of link header with route info */
|
||||
|
||||
/* SAP DLC SRB commands (page 6-50 Token Ring Tech. Ref.) */
|
||||
#define DLC_RESET 0x14
|
||||
#define DLC_OPEN_SAP 0x15 /* activate service access point */
|
||||
#define DLC_CLOSE_SAP 0x16 /* de-activate SAP */
|
||||
#define DLC_REALLOCATE 0x17
|
||||
#define DLC_OPEN_STATION 0x19
|
||||
#define DLC_CLOSE_STATION 0x1a
|
||||
#define DLC_CONNECT_STATION 0x1b
|
||||
#define DLC_MODIFY 0x1c
|
||||
#define DLC_FLOW_CONTROL 0x1d
|
||||
#define DLC_STATISTICS 0x1e
|
||||
|
||||
|
||||
/* ARB RING STATUS CHANGE */
|
||||
#define SIGNAL_LOSS 0x8000 /* signal loss */
|
||||
#define HARD_ERR 0x4000 /* beacon frames sent */
|
||||
#define SOFT_ERR 0x2000 /* soft error */
|
||||
#define LOBE_FAULT 0x0800 /* lobe wire fault */
|
||||
#define LOG_OFLOW 0x0080 /* adapter error log counter overflow */
|
||||
#define SINGLE_STATION 0x0040 /* single station on ring */
|
|
@ -1,117 +0,0 @@
|
|||
/* $NetBSD: tropicvar.h,v 1.14 2012/10/27 17:18:23 chs Exp $ */
|
||||
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991 Carnegie Mellon University
|
||||
* Copyright (c) 1991 IBM Corporation
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation,
|
||||
* and that the name IBM not be used in advertising or publicity
|
||||
* pertaining to distribution of the software without specific, written
|
||||
* prior permission.
|
||||
*
|
||||
* CARNEGIE MELLON AND IBM ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON AND IBM DISCLAIM ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
/* $ACIS:if_lanvar.h 12.0$ */
|
||||
|
||||
#include <sys/callout.h>
|
||||
|
||||
/*
|
||||
* This file contains structures used in the "tr" driver for the
|
||||
* IBM TOKEN-RING NETWORK PC ADAPTER
|
||||
*/
|
||||
|
||||
/* Receive buffer control block */
|
||||
struct rbcb {
|
||||
bus_size_t rbufp; /* offset of current receive buffer */
|
||||
bus_size_t rbufp_next; /* offset of next receive buffer */
|
||||
bus_size_t rbuf_datap; /* offset of data in receive buffer */
|
||||
unsigned short data_len; /* amount of data in this rec buffer */
|
||||
};
|
||||
|
||||
/*
|
||||
* Token-Ring software status per adapter
|
||||
*/
|
||||
struct tr_softc {
|
||||
device_t sc_dev;
|
||||
void *sc_ih;
|
||||
struct ethercom sc_ethercom;
|
||||
struct ifmedia sc_media;
|
||||
u_char sc_xmit_correlator;
|
||||
int sc_xmit_buffers;
|
||||
#if 1
|
||||
int sc_xmit_head;
|
||||
int sc_xmit_tail;
|
||||
#endif
|
||||
int sc_minbuf;
|
||||
int sc_nbuf;
|
||||
bus_size_t sc_txca;
|
||||
|
||||
bus_space_tag_t sc_piot;
|
||||
bus_space_tag_t sc_memt;
|
||||
bus_space_handle_t sc_pioh; /* handle pio area */
|
||||
bus_space_handle_t sc_sramh; /* handle for the shared ram area */
|
||||
bus_space_handle_t sc_mmioh; /* handle for the bios/mmio area */
|
||||
|
||||
struct callout sc_init_callout;
|
||||
struct callout sc_reinit_callout;
|
||||
|
||||
int (*sc_mediachange)(struct tr_softc *);
|
||||
void (*sc_mediastatus)(struct tr_softc *, struct ifmediareq *);
|
||||
struct rbcb rbc; /* receiver buffer control block */
|
||||
bus_size_t sc_aca; /* offset of adapter ACA */
|
||||
bus_size_t sc_ssb; /* offset of System Status Block */
|
||||
bus_size_t sc_arb; /* offset of Adapter Request Block */
|
||||
bus_size_t sc_srb; /* offset of System Request Block */
|
||||
bus_size_t sc_asb; /* offset of Adapter Status Block */
|
||||
u_int sc_maddr; /* mapped shared memory address */
|
||||
u_int sc_memwinsz; /* mapped shared memory window size */
|
||||
u_int sc_memsize; /* memory installed on adapter */
|
||||
u_int sc_memreserved; /* reserved memory on adapter */
|
||||
int sc_dhb4maxsz; /* max. dhb size at 4MBIT ring speed */
|
||||
int sc_dhb16maxsz; /* max. dbh size at 16MBIT ring speed */
|
||||
int sc_maxmtu; /* max. MTU supported by adapter */
|
||||
unsigned char sc_init_status;
|
||||
void * tr_sleepevent; /* tr event signalled on successful */
|
||||
/* open of adapter */
|
||||
unsigned short exsap_station; /* station assigned by open sap cmd */
|
||||
|
||||
void *sc_sdhook;
|
||||
|
||||
/* Power management hooks */
|
||||
int (*sc_enable)(struct tr_softc *);
|
||||
void (*sc_disable)(struct tr_softc *);
|
||||
int sc_enabled;
|
||||
};
|
||||
|
||||
int tr_config(struct tr_softc *);
|
||||
int tr_attach(struct tr_softc *);
|
||||
int tr_intr(void *);
|
||||
void tr_init(void *);
|
||||
int tr_ioctl(struct ifnet *, u_long, void *);
|
||||
void tr_stop(struct tr_softc *);
|
||||
int tr_reset(struct tr_softc *);
|
||||
void tr_sleep(struct tr_softc *);
|
||||
int tr_setspeed(struct tr_softc *, u_int8_t);
|
||||
int tr_enable(struct tr_softc *);
|
||||
void tr_disable(struct tr_softc *);
|
||||
int tr_activate(device_t, enum devact);
|
||||
int tr_detach(device_t, int flags);
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.isa,v 1.174 2019/10/25 17:39:57 martin Exp $
|
||||
# $NetBSD: files.isa,v 1.175 2020/01/19 20:00:35 thorpej Exp $
|
||||
#
|
||||
# Config file and device description for machine-independent ISA code.
|
||||
# Included by ports that need it. Requires that the SCSI files be
|
||||
|
@ -270,13 +270,6 @@ device ix: ether, ifnet, arp, i82586
|
|||
attach ix at isa
|
||||
file dev/isa/if_ix.c ix
|
||||
|
||||
# TROPIC based Token-Ring (IBM/3COM)
|
||||
define tr_isa
|
||||
file dev/isa/if_tr_isa.c tr_isa
|
||||
attach tr at isa with tr_isa: tr_isa, elink
|
||||
file dev/isa/if_tribm_isa.c tr_isa
|
||||
file dev/isa/if_trtcm_isa.c tr_isa
|
||||
|
||||
#
|
||||
# ISA Sound hardware
|
||||
#
|
||||
|
|
|
@ -1,266 +0,0 @@
|
|||
/* $NetBSD: if_tr_isa.c,v 1.26 2016/07/14 10:19:06 msaitoh Exp $ */
|
||||
|
||||
/* XXXJRT changes isa_attach_args too early!! */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Onno van der Linden.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tr_isa.c,v 1.26 2016/07/14 10:19:06 msaitoh Exp $");
|
||||
|
||||
#undef TRISADEBUG
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <sys/cpu.h>
|
||||
#include <sys/bus.h>
|
||||
#include <sys/intr.h>
|
||||
|
||||
#include <dev/isa/isavar.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
|
||||
int tr_isa_probe(device_t, cfdata_t, void *);
|
||||
int trtcm_isa_probe(device_t, cfdata_t, void *);
|
||||
int tribm_isa_probe(device_t, cfdata_t, void *);
|
||||
void tr_isa_attach(device_t, device_t, void *);
|
||||
int tr_isa_map_io(struct isa_attach_args *, bus_space_handle_t *,
|
||||
bus_space_handle_t *);
|
||||
void tr_isa_unmap_io(struct isa_attach_args *, bus_space_handle_t,
|
||||
bus_space_handle_t);
|
||||
int trtcm_isa_mediachange(struct tr_softc *);
|
||||
void trtcm_isa_mediastatus(struct tr_softc *, struct ifmediareq *);
|
||||
#ifdef TRISADEBUG
|
||||
void tr_isa_dumpaip(bus_space_tag_t, bus_space_handle_t);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* List of manufacturer specific probe routines. Order is important.
|
||||
*/
|
||||
int (*tr_isa_probe_list[])(device_t, cfdata_t, void *) = {
|
||||
trtcm_isa_probe,
|
||||
tribm_isa_probe,
|
||||
0
|
||||
};
|
||||
|
||||
CFATTACH_DECL_NEW(tr_isa, sizeof(struct tr_softc),
|
||||
tr_isa_probe, tr_isa_attach, NULL, NULL);
|
||||
|
||||
int
|
||||
tr_isa_map_io(struct isa_attach_args *ia, bus_space_handle_t *pioh,
|
||||
bus_space_handle_t *mmioh)
|
||||
{
|
||||
bus_size_t mmio;
|
||||
u_int8_t s;
|
||||
|
||||
if (bus_space_map(ia->ia_iot, ia->ia_io[0].ir_addr,
|
||||
ia->ia_io[0].ir_size, 0, pioh)) {
|
||||
printf("tr_isa_map_io: can't map PIO ports\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Read adapter switches and calculate addresses of MMIO. */
|
||||
s = bus_space_read_1(ia->ia_iot, *pioh, TR_SWITCH);
|
||||
|
||||
if ((s & 0xfc) < ((TR_MMIO_MINADDR - TR_MMIO_OFFSET) >> 11) ||
|
||||
(s & 0xfc) > ((TR_MMIO_MAXADDR - TR_MMIO_OFFSET) >> 11)) {
|
||||
bus_space_unmap(ia->ia_iot, *pioh, ia->ia_io[0].ir_size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
mmio = ((s & 0xfc) << 11) + TR_MMIO_OFFSET;
|
||||
if (bus_space_map(ia->ia_memt, mmio, TR_MMIO_SIZE, 0, mmioh)) {
|
||||
printf("tr_isa_map_io: can't map MMIO region 0x%05lx/%d\n",
|
||||
(u_long)mmio, TR_MMIO_SIZE);
|
||||
bus_space_unmap(ia->ia_iot, *pioh, ia->ia_io[0].ir_size);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
tr_isa_unmap_io(struct isa_attach_args *ia, bus_space_handle_t pioh,
|
||||
bus_space_handle_t mmioh)
|
||||
{
|
||||
bus_space_unmap(ia->ia_memt, mmioh, TR_MMIO_SIZE);
|
||||
bus_space_unmap(ia->ia_iot, pioh, ia->ia_io[0].ir_size);
|
||||
}
|
||||
|
||||
static u_char tr_isa_id[] = {
|
||||
5, 0, 4, 9, 4, 3, 4, 15, 3, 6, 3, 1, 3, 1, 3, 0, 3, 9, 3, 9, 3, 0, 2, 0
|
||||
};
|
||||
|
||||
/*
|
||||
* XXX handle multiple IBM TR cards (sram mapping !!)
|
||||
*/
|
||||
|
||||
int
|
||||
tr_isa_probe(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct isa_attach_args *ia = aux;
|
||||
int i;
|
||||
bus_size_t tr_id;
|
||||
bus_space_handle_t sramh, pioh, mmioh;
|
||||
int probecode;
|
||||
int matched = 0;
|
||||
|
||||
if (ia->ia_nio < 1)
|
||||
return (0);
|
||||
if (ia->ia_niomem < 1)
|
||||
return (0);
|
||||
if (ia->ia_nirq < 1)
|
||||
return (0);
|
||||
|
||||
if (ISA_DIRECT_CONFIG(ia))
|
||||
return (0);
|
||||
|
||||
for (i = 0; tr_isa_probe_list[i] != 0; i++) {
|
||||
probecode = tr_isa_probe_list[i](parent, match, aux);
|
||||
if (probecode < 0)
|
||||
return 0; /* Fail instantly. */
|
||||
if (probecode > 0)
|
||||
break; /* We have a match. */
|
||||
}
|
||||
if (tr_isa_probe_list[i] == 0)
|
||||
return 0; /* Nothing matched. */
|
||||
if (tr_isa_map_io(ia, &pioh, &mmioh))
|
||||
return 0;
|
||||
tr_id = TR_ID_OFFSET;
|
||||
matched = 1;
|
||||
for (i = 0; i < sizeof(tr_isa_id); i++) {
|
||||
if (bus_space_read_1(ia->ia_memt, mmioh, tr_id) !=
|
||||
tr_isa_id[i])
|
||||
matched = 0;
|
||||
tr_id += 2;
|
||||
}
|
||||
#ifdef TRISADEBUG
|
||||
tr_isa_dumpaip(ia->ia_memt, mmioh);
|
||||
#endif
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
if (!matched) {
|
||||
return 0;
|
||||
}
|
||||
if (bus_space_map(ia->ia_memt, ia->ia_iomem[0].ir_addr,
|
||||
ia->ia_iomem[0].ir_size, 0, &sramh)) {
|
||||
printf("tr_isa_probe: can't map shared ram\n");
|
||||
return 0;
|
||||
}
|
||||
bus_space_unmap(ia->ia_memt, sramh, ia->ia_iomem[0].ir_size);
|
||||
|
||||
ia->ia_nio = 1;
|
||||
ia->ia_niomem = 1;
|
||||
ia->ia_nirq = 1;
|
||||
|
||||
ia->ia_ndrq = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int trtcm_setspeed(struct tr_softc *, int);
|
||||
|
||||
void
|
||||
tr_isa_attach(device_t parent, device_t self, void *aux)
|
||||
{
|
||||
struct tr_softc *sc = device_private(self);
|
||||
struct isa_attach_args *ia = aux;
|
||||
|
||||
printf("\n");
|
||||
|
||||
sc->sc_dev = self;
|
||||
sc->sc_piot = ia->ia_iot;
|
||||
sc->sc_memt = ia->ia_memt;
|
||||
if (tr_isa_map_io(ia, &sc->sc_pioh, &sc->sc_mmioh)) {
|
||||
aprint_error("tr_isa_attach: IO space vanished\n");
|
||||
return;
|
||||
}
|
||||
if (bus_space_map(sc->sc_memt, ia->ia_iomem[0].ir_addr,
|
||||
ia->ia_iomem[0].ir_size, 0, &sc->sc_sramh)) {
|
||||
aprint_error("tr_isa_attach: shared ram space vanished\n");
|
||||
return;
|
||||
}
|
||||
/* set ACA offset */
|
||||
sc->sc_aca = TR_ACA_OFFSET;
|
||||
sc->sc_memwinsz = ia->ia_iomem[0].ir_size;
|
||||
sc->sc_maddr = ia->ia_iomem[0].ir_addr;
|
||||
/*
|
||||
* Determine total RAM on adapter and decide how much to use.
|
||||
* XXX Since we don't use RAM paging, use sc_memwinsz for now.
|
||||
*/
|
||||
sc->sc_memsize = sc->sc_memwinsz;
|
||||
sc->sc_memreserved = 0;
|
||||
|
||||
if (tr_reset(sc) != 0)
|
||||
return;
|
||||
|
||||
if (ia->ia_aux != NULL) {
|
||||
sc->sc_mediastatus = trtcm_isa_mediastatus;
|
||||
sc->sc_mediachange = trtcm_isa_mediachange;
|
||||
}
|
||||
else {
|
||||
sc->sc_mediastatus = NULL;
|
||||
sc->sc_mediachange = NULL;
|
||||
}
|
||||
|
||||
if (tr_attach(sc) != 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* XXX 3Com 619 can use LEVEL intr
|
||||
*/
|
||||
sc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq[0].ir_irq,
|
||||
IST_EDGE, IPL_NET, tr_intr, sc);
|
||||
}
|
||||
|
||||
#ifdef TRISADEBUG
|
||||
/*
|
||||
* Dump the adapters AIP
|
||||
*/
|
||||
void
|
||||
tr_isa_dumpaip(bus_space_tag_t memt, bus_space_handle_t mmioh)
|
||||
{
|
||||
unsigned int off, val;
|
||||
printf("AIP contents:");
|
||||
for (off=0; off < 256; off++) {
|
||||
val = bus_space_read_1(memt, mmioh, TR_MAC_OFFSET + off);
|
||||
if ((off % 16) == 0)
|
||||
printf("\n");
|
||||
printf("%02x ", val);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
|
@ -1,189 +0,0 @@
|
|||
/* $NetBSD: if_tribm_isa.c,v 1.14 2009/05/12 09:10:15 cegger Exp $ */
|
||||
|
||||
/* XXXJRT changes isa_attach_args too early */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Onno van der Linden.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tribm_isa.c,v 1.14 2009/05/12 09:10:15 cegger Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <sys/bus.h>
|
||||
|
||||
#include <dev/isa/isavar.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
int tribm_isa_probe(device_t, cfdata_t, void *);
|
||||
int tr_isa_map_io(struct isa_attach_args *, bus_space_handle_t *,
|
||||
bus_space_handle_t *);
|
||||
void tr_isa_unmap_io(struct isa_attach_args *, bus_space_handle_t,
|
||||
bus_space_handle_t);
|
||||
|
||||
int
|
||||
tribm_isa_probe(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct isa_attach_args *ia = aux;
|
||||
static int irq_f[4] = { 9, 3, 6, 7 };
|
||||
static int irq_e[4] = { 9, 3, 10, 11 };
|
||||
bus_space_tag_t piot = ia->ia_iot;
|
||||
bus_space_tag_t memt = ia->ia_memt;
|
||||
bus_space_handle_t pioh, mmioh;
|
||||
int i, irq;
|
||||
u_int8_t s;
|
||||
|
||||
if (ia->ia_nio < 1)
|
||||
return (0);
|
||||
if (ia->ia_niomem < 1)
|
||||
return (0);
|
||||
if (ia->ia_nirq < 1)
|
||||
return (0);
|
||||
|
||||
if (ISA_DIRECT_CONFIG(ia))
|
||||
return (0);
|
||||
|
||||
#ifdef notyet
|
||||
/* XXX Try both 0xa20 and 0xa24 and store that info like 3com */
|
||||
if (ia->ia_iobase == IOBASEUNK)
|
||||
ia->ia_iobase = 0xa20;
|
||||
#else
|
||||
if (ia->ia_io[0].ir_addr == ISA_UNKNOWN_PORT)
|
||||
return (0);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXXJRT Should not modify attach_args unless we know we match!
|
||||
*/
|
||||
|
||||
ia->ia_io[0].ir_size = 4;
|
||||
ia->ia_aux = NULL;
|
||||
|
||||
if (tr_isa_map_io(ia, &pioh, &mmioh))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* F = Token-Ring Network PC Adapter
|
||||
* Token-Ring Network PC Adapter II
|
||||
* Token-Ring Network Adapter/A
|
||||
* E = Token-Ring Network 16/4 Adapter/A (long card)
|
||||
* Token-Ring Network 16/4 Adapter
|
||||
* D = Token-Ring Network 16/4 Adapter/A (short card)
|
||||
* 16/4 ISA-16 Adapter
|
||||
* C = Auto 16/4 Token-Ring ISA Adapter
|
||||
* Auto 16/4 Token-Ring MC Adapter
|
||||
*/
|
||||
/*
|
||||
* XXX Both 0xD and 0xC types should be able to use 16-bit read and writes
|
||||
*/
|
||||
switch (bus_space_read_1(memt, mmioh, TR_TYP_OFFSET)) {
|
||||
case 0xF:
|
||||
case 0xE:
|
||||
case 0xD:
|
||||
if (ia->ia_iomem[0].ir_addr == ISA_UNKNOWN_IOMEM)
|
||||
#ifdef notyet
|
||||
ia->ia_maddr = TR_SRAM_DEFAULT;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
break;
|
||||
case 0xC:
|
||||
i = bus_space_read_1(memt, mmioh, TR_ACA_OFFSET) << 12;
|
||||
if (ia->ia_iomem[0].ir_addr == ISA_UNKNOWN_IOMEM)
|
||||
ia->ia_iomem[0].ir_addr = i;
|
||||
else if (ia->ia_iomem[0].ir_addr != i) {
|
||||
printf(
|
||||
"tribm_isa_probe: sram mismatch; kernel configured %x != board configured %x\n",
|
||||
ia->ia_iomem[0].ir_addr, i);
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("tribm_isa_probe: unknown type code %x\n",
|
||||
bus_space_read_1(memt, mmioh, TR_TYP_OFFSET));
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s = bus_space_read_1(piot, pioh, TR_SWITCH);
|
||||
|
||||
switch (bus_space_read_1(memt, mmioh, TR_IRQ_OFFSET)) {
|
||||
case 0xF:
|
||||
irq = irq_f[s & 3];
|
||||
break;
|
||||
case 0xE:
|
||||
irq = irq_e[s & 3];
|
||||
break;
|
||||
default:
|
||||
printf("tribm_isa_probe: Unknown IRQ code %x\n",
|
||||
bus_space_read_1(memt, mmioh, TR_IRQ_OFFSET));
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ia->ia_irq[0].ir_irq == ISA_UNKNOWN_IRQ)
|
||||
ia->ia_irq[0].ir_irq = irq;
|
||||
else if (ia->ia_irq[0].ir_irq != irq) {
|
||||
printf(
|
||||
"tribm_isa_probe: irq mismatch; kernel configured %d != board configured %d\n",
|
||||
ia->ia_irq[0].ir_irq, irq);
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* XXX 0x0c == MSIZEMASK (MSIZEBITS)
|
||||
*/
|
||||
ia->ia_iomem[0].ir_size = 8192 <<
|
||||
((bus_space_read_1(memt, mmioh, TR_ACA_OFFSET + 1) & 0x0c) >> 2);
|
||||
tr_isa_unmap_io(ia, pioh, mmioh);
|
||||
/* Check alignment of membase. */
|
||||
if ((ia->ia_iomem[0].ir_addr & (ia->ia_iomem[0].ir_size-1)) != 0) {
|
||||
printf("tribm_isa_probe: SRAM unaligned 0x%04x/%d\n",
|
||||
ia->ia_iomem[0].ir_addr, ia->ia_iomem[0].ir_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ia->ia_nio = 1;
|
||||
ia->ia_niomem = 1;
|
||||
ia->ia_nirq = 1;
|
||||
|
||||
ia->ia_ndrq = 0;
|
||||
|
||||
return 1;
|
||||
}
|
|
@ -1,356 +0,0 @@
|
|||
/* $NetBSD: if_trtcm_isa.c,v 1.20 2019/11/10 21:16:35 chs Exp $ */
|
||||
|
||||
/* XXXJRT verify doens't change isa_attach_args too early */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Onno van der Linden.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_trtcm_isa.c,v 1.20 2019/11/10 21:16:35 chs Exp $");
|
||||
|
||||
#undef TRTCMISADEBUG
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/device.h>
|
||||
#include <sys/malloc.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <sys/bus.h>
|
||||
|
||||
#include <dev/isa/isavar.h>
|
||||
#include <dev/isa/elink.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
#include <dev/ic/elink3reg.h>
|
||||
|
||||
u_int16_t tcmreadeeprom(bus_space_tag_t, bus_space_handle_t, int);
|
||||
#ifdef TRTCMISADEBUG
|
||||
void tcmdumpeeprom(bus_space_tag_t, bus_space_handle_t);
|
||||
#endif
|
||||
|
||||
int trtcm_isa_probe(device_t, cfdata_t, void *);
|
||||
|
||||
int trtcm_isa_mediachange(struct tr_softc *);
|
||||
void trtcm_isa_mediastatus(struct tr_softc *, struct ifmediareq *);
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
*
|
||||
* if_media handling in the 3com case
|
||||
* mediachange() and mediastatus() function
|
||||
* certain newer cards can set their speed on the fly via
|
||||
* DIR_SET_DEFAULT_RING_SPEED or set the speed in the eeprom ??
|
||||
*/
|
||||
|
||||
static void tcmaddcard(int, int, int, int, u_int, int, int);
|
||||
|
||||
/*
|
||||
* This keeps track of which ISAs have been through a 3com probe sequence.
|
||||
* A simple static variable isn't enough, since it's conceivable that
|
||||
* a system might have more than one ISA bus.
|
||||
*
|
||||
* The "tcm_bus" member is the unit number of the parent ISA bus, e.g. "0"
|
||||
* for "isa0".
|
||||
*/
|
||||
struct tcm_isa_done_probe {
|
||||
LIST_ENTRY(tcm_isa_done_probe) tcm_link;
|
||||
int tcm_bus;
|
||||
};
|
||||
static LIST_HEAD(, tcm_isa_done_probe) tcm_isa_all_probes;
|
||||
static int tcm_isa_probes_initialized;
|
||||
|
||||
#define MAXTCMCARDS 20 /* if you have more than 20, you lose */
|
||||
|
||||
static struct tcmcard {
|
||||
int bus;
|
||||
int iobase;
|
||||
int irq;
|
||||
int maddr;
|
||||
u_int msize;
|
||||
long model;
|
||||
char available;
|
||||
char pnpmode;
|
||||
} tcmcards[MAXTCMCARDS];
|
||||
|
||||
static int ntcmcards = 0;
|
||||
|
||||
static void
|
||||
tcmaddcard(int bus, int iobase, int irq, int maddr, u_int msiz, int model, int pnpmode)
|
||||
{
|
||||
|
||||
if (ntcmcards >= MAXTCMCARDS)
|
||||
return;
|
||||
tcmcards[ntcmcards].bus = bus;
|
||||
tcmcards[ntcmcards].iobase = iobase;
|
||||
tcmcards[ntcmcards].irq = irq;
|
||||
tcmcards[ntcmcards].maddr = maddr;
|
||||
tcmcards[ntcmcards].msize = msiz;
|
||||
tcmcards[ntcmcards].model = model;
|
||||
tcmcards[ntcmcards].available = 1;
|
||||
tcmcards[ntcmcards].pnpmode = pnpmode;
|
||||
ntcmcards++;
|
||||
}
|
||||
|
||||
/*
|
||||
* We get eeprom data from the id_port given an offset into the
|
||||
* eeprom. Basically; after the ID_sequence is sent to all of
|
||||
* the cards; they enter the ID_CMD state where they will accept
|
||||
* command requests. 0x80-0xbf loads the eeprom data. We then
|
||||
* read the port 16 times and with every read; the cards check
|
||||
* for contention (ie: if one card writes a 0 bit and another
|
||||
* writes a 1 bit then the host sees a 0. At the end of the cycle;
|
||||
* each card compares the data on the bus; if there is a difference
|
||||
* then that card goes into ID_WAIT state again). In the meantime;
|
||||
* one bit of data is returned in the AX register which is conveniently
|
||||
* returned to us by bus_space_read_1(). Hence; we read 16 times getting one
|
||||
* bit of data with each read.
|
||||
*
|
||||
* NOTE: the caller must provide an i/o handle for ELINK_ID_PORT!
|
||||
*/
|
||||
u_int16_t
|
||||
tcmreadeeprom(bus_space_tag_t iot, bus_space_handle_t ioh, int offset)
|
||||
{
|
||||
u_int16_t data = 0;
|
||||
int i;
|
||||
|
||||
bus_space_write_1(iot, ioh, 0, 0x80 + offset);
|
||||
delay(1000);
|
||||
for (i = 0; i < 16; i++)
|
||||
data = (data << 1) | (bus_space_read_2(iot, ioh, 0) & 1);
|
||||
return (data);
|
||||
}
|
||||
|
||||
#ifdef TRTCMISADEBUG
|
||||
/*
|
||||
* Dump the contents of the EEPROM to the console.
|
||||
*/
|
||||
void
|
||||
tcmdumpeeprom(bus_space_tag_t iot, bus_space_handle_t ioh)
|
||||
{
|
||||
unsigned int off, val;
|
||||
|
||||
printf("EEPROM contents:");
|
||||
for (off=0; off < 32; off++) {
|
||||
val = tcmreadeeprom(iot, ioh, off);
|
||||
if ((off % 8) == 0)
|
||||
printf("\n");
|
||||
printf("%04x ", val);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
trtcm_isa_mediachange(struct tr_softc *sc)
|
||||
{
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
void
|
||||
trtcm_isa_mediastatus(struct tr_softc *sc, struct ifmediareq *ifmr)
|
||||
{
|
||||
struct ifmedia *ifm = &sc->sc_media;
|
||||
|
||||
ifmr->ifm_active = ifm->ifm_cur->ifm_media;
|
||||
}
|
||||
|
||||
/* XXX hard coded constants in readeeprom elink_idseq */
|
||||
|
||||
int
|
||||
trtcm_isa_probe(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct isa_attach_args *ia = aux;
|
||||
int bus = device_unit(parent);
|
||||
bus_space_tag_t iot = ia->ia_iot;
|
||||
bus_space_handle_t ioh;
|
||||
u_int msiz;
|
||||
int slot, iobase, irq, i, maddr, rsrccfg, pnpmode;
|
||||
u_int16_t vendor, model;
|
||||
struct tcm_isa_done_probe *tcm;
|
||||
static int irqs[] = { 7, 15, 6, 11, 3, 10, 9, 5 };
|
||||
|
||||
if (ISA_DIRECT_CONFIG(ia))
|
||||
return (0);
|
||||
|
||||
if (tcm_isa_probes_initialized == 0) {
|
||||
LIST_INIT(&tcm_isa_all_probes);
|
||||
tcm_isa_probes_initialized = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe this bus if we haven't done so already.
|
||||
*/
|
||||
for (tcm = tcm_isa_all_probes.lh_first; tcm != NULL;
|
||||
tcm = tcm->tcm_link.le_next)
|
||||
if (tcm->tcm_bus == bus)
|
||||
goto bus_probed;
|
||||
|
||||
/*
|
||||
* Mark this bus so we don't probe it again.
|
||||
*/
|
||||
tcm = malloc(sizeof(struct tcm_isa_done_probe), M_DEVBUF, M_WAITOK);
|
||||
tcm->tcm_bus = bus;
|
||||
LIST_INSERT_HEAD(&tcm_isa_all_probes, tcm, tcm_link);
|
||||
|
||||
/*
|
||||
* Map the TokenLink ID port for the probe sequence.
|
||||
*/
|
||||
if (bus_space_map(iot, ELINK_ID_PORT, 1, 0, &ioh)) {
|
||||
printf("trtcm_isa_probe: can't map TokenLink ID port\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (slot = 0; slot < MAXTCMCARDS; slot++) {
|
||||
pnpmode = 0;
|
||||
elink_reset(iot, ioh, bus);
|
||||
elink_idseq(iot, ioh, TLINK_619_POLY);
|
||||
|
||||
/* Untag all the adapters so they will talk to us. */
|
||||
if (slot == 0)
|
||||
bus_space_write_1(iot, ioh, 0, TAG_ADAPTER + 0);
|
||||
|
||||
vendor = htons(tcmreadeeprom(iot, ioh, EEPROM_MFG_ID));
|
||||
if (vendor != MFG_ID)
|
||||
continue;
|
||||
|
||||
model = htons(tcmreadeeprom(iot, ioh, EEPROM_PROD_ID));
|
||||
if (((model & 0xfff0) != 0x6190) &&
|
||||
((model & 0xfff0) != 0x3190)) { /* XXX hardcoded */
|
||||
#if 0
|
||||
printf("trtcm: unknown model 0x%04x\n", model);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
#ifdef TRTCMISADEBUG
|
||||
tcmdumpeeprom(iot, ioh);
|
||||
|
||||
printf("speed: %d\n", (tcmreadeeprom(iot,ioh,8) & 2) ? 4 : 16);
|
||||
#endif
|
||||
|
||||
rsrccfg = iobase = tcmreadeeprom(iot, ioh, EEPROM_RESOURCE_CFG);
|
||||
if (iobase & 0x20)
|
||||
iobase = tcmreadeeprom(iot, ioh, EEPROM_ADDR_CFG) & 1 ?
|
||||
0xa20 : 0xa24;
|
||||
else
|
||||
iobase = (iobase & 0x1f) * 0x10 + 0x200;
|
||||
|
||||
maddr = ((tcmreadeeprom(iot, ioh, EEPROM_OEM_ADDR0) & 0xfc00)
|
||||
<< 3) + 0x80000;
|
||||
msiz = 65536 >> ((tcmreadeeprom(iot, ioh, 8) & 0x0c) >> 2);
|
||||
|
||||
irq = tcmreadeeprom(iot, ioh, EEPROM_ADDR_CFG) & 0x180;
|
||||
irq |= (tcmreadeeprom(iot, ioh, EEPROM_RESOURCE_CFG) & 0x40);
|
||||
irq = irqs[irq >> 6];
|
||||
|
||||
/* Tag card so it will not respond to contention again. */
|
||||
bus_space_write_1(iot, ioh, 0, TAG_ADAPTER + 1);
|
||||
|
||||
/*
|
||||
* Don't attach a 3c319 in PnP mode.
|
||||
*
|
||||
* XXX Testing for the 13th bit in iobase being 0 might not
|
||||
* be the right thing to do, but the EEPROM of the 3C319 is
|
||||
* undocumented according to 3COM and this is one of the
|
||||
* three bits that changed when I put the card in PnP mode. -chb
|
||||
*/
|
||||
if (((model & 0xffff0) == 0x3190) &&
|
||||
((rsrccfg & 0x1000) == 0)) {
|
||||
printf("3COM 3C319 TokenLink Velocity in PnP mode\n");
|
||||
pnpmode = 1;
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* XXX: this should probably not be done here
|
||||
* because it enables the drq/irq lines from
|
||||
* the board. Perhaps it should be done after
|
||||
* we have checked for irq/drq collisions?
|
||||
*/
|
||||
bus_space_write_1(iot, ioh, 0,
|
||||
ACTIVATE_ADAPTER_TO_CONFIG);
|
||||
}
|
||||
tcmaddcard(bus, iobase, irq, maddr, msiz, model, pnpmode);
|
||||
}
|
||||
bus_space_unmap(iot, ioh, 1);
|
||||
|
||||
bus_probed:
|
||||
|
||||
if (ia->ia_nio < 1)
|
||||
return (0);
|
||||
if (ia->ia_niomem < 1)
|
||||
return (0);
|
||||
if (ia->ia_nirq < 1)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < ntcmcards; i++) {
|
||||
if (tcmcards[i].bus != bus)
|
||||
continue;
|
||||
if (tcmcards[i].available == 0)
|
||||
continue;
|
||||
if (ia->ia_io[0].ir_addr != ISA_UNKNOWN_PORT &&
|
||||
ia->ia_io[0].ir_addr != tcmcards[i].iobase)
|
||||
continue;
|
||||
if (ia->ia_irq[0].ir_irq != ISA_UNKNOWN_IRQ &&
|
||||
ia->ia_irq[0].ir_irq != tcmcards[i].irq)
|
||||
continue;
|
||||
goto good;
|
||||
}
|
||||
return 0;
|
||||
|
||||
good:
|
||||
tcmcards[i].available = 0;
|
||||
if (tcmcards[i].pnpmode)
|
||||
return -1; /* XXX Don't actually probe this card. */
|
||||
|
||||
ia->ia_nio = 1;
|
||||
ia->ia_io[0].ir_addr = tcmcards[i].iobase;
|
||||
/* XXX probably right, but ...... */
|
||||
if (ia->ia_io[0].ir_addr == 0xa20 || ia->ia_io[0].ir_addr == 0xa24)
|
||||
ia->ia_io[0].ir_size = 4;
|
||||
else
|
||||
ia->ia_io[0].ir_size = 16;
|
||||
|
||||
ia->ia_niomem = 1;
|
||||
ia->ia_iomem[0].ir_addr = tcmcards[i].maddr;
|
||||
ia->ia_iomem[0].ir_size = tcmcards[i].msize;
|
||||
|
||||
ia->ia_nirq = 1;
|
||||
ia->ia_irq[0].ir_irq = tcmcards[i].irq;
|
||||
|
||||
ia->ia_ndrq = 0;
|
||||
|
||||
ia->ia_aux = (void *) tcmcards[i].model;
|
||||
return 1;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.isapnp,v 1.39 2018/09/22 16:22:23 maxv Exp $
|
||||
# $NetBSD: files.isapnp,v 1.40 2020/01/19 20:00:36 thorpej Exp $
|
||||
#
|
||||
# Config file and device description for machine-independent ISAPnP code.
|
||||
# Included by ports that need it.
|
||||
|
@ -30,10 +30,6 @@ file dev/isapnp/if_le_isapnp.c le_isapnp
|
|||
attach ne at isapnp with ne_isapnp: rtl80x9
|
||||
file dev/isapnp/if_ne_isapnp.c ne_isapnp
|
||||
|
||||
# TROPIC based Token-Ring (IBM/3COM)
|
||||
attach tr at isapnp with tr_isapnp
|
||||
file dev/isapnp/if_tr_isapnp.c tr_isapnp
|
||||
|
||||
# Aironet 802.11 ISA
|
||||
attach an at isapnp with an_isapnp
|
||||
file dev/isapnp/if_an_isapnp.c an_isapnp
|
||||
|
|
|
@ -1,138 +0,0 @@
|
|||
/* $NetBSD: if_tr_isapnp.c,v 1.22 2016/07/14 10:19:06 msaitoh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Onno van der Linden.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tr_isapnp.c,v 1.22 2016/07/14 10:19:06 msaitoh Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <sys/cpu.h>
|
||||
#include <sys/bus.h>
|
||||
#include <sys/intr.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
#include <dev/isa/isavar.h>
|
||||
|
||||
#include <dev/isapnp/isapnpreg.h>
|
||||
#include <dev/isapnp/isapnpvar.h>
|
||||
#include <dev/isapnp/isapnpdevs.h>
|
||||
|
||||
int tr_isapnp_match(device_t, cfdata_t, void *);
|
||||
void tr_isapnp_attach(device_t, device_t, void *);
|
||||
|
||||
CFATTACH_DECL_NEW(tr_isapnp, sizeof(struct tr_softc),
|
||||
tr_isapnp_match, tr_isapnp_attach, NULL, NULL);
|
||||
|
||||
int
|
||||
tr_isapnp_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
int pri, variant;
|
||||
|
||||
pri = isapnp_devmatch(aux, &isapnp_tr_devinfo, &variant);
|
||||
if (pri && variant > 0)
|
||||
pri = 0;
|
||||
return pri;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
tr_isapnp_attach(device_t parent, device_t self, void *aux)
|
||||
{
|
||||
struct tr_softc *sc = device_private(self);
|
||||
struct isapnp_attach_args *ipa = aux;
|
||||
int mmioidx, sramidx;
|
||||
|
||||
aprint_naive("\n");
|
||||
aprint_normal("\n");
|
||||
|
||||
if (isapnp_config(ipa->ipa_iot, ipa->ipa_memt, ipa)) {
|
||||
aprint_error_dev(self, "error in region allocation\n");
|
||||
return;
|
||||
}
|
||||
|
||||
aprint_normal_dev(self, "%s %s\n",
|
||||
ipa->ipa_devident, ipa->ipa_devclass);
|
||||
|
||||
sc->sc_dev = self;
|
||||
sc->sc_piot = ipa->ipa_iot;
|
||||
sc->sc_pioh = ipa->ipa_io[0].h;
|
||||
|
||||
if (strcmp(ipa->ipa_devlogic, "TCM3190") == 0) {
|
||||
mmioidx = 0;
|
||||
sramidx = 1;
|
||||
} else { /* Default */
|
||||
mmioidx = 1;
|
||||
sramidx = 0;
|
||||
}
|
||||
sc->sc_memt = ipa->ipa_memt;
|
||||
sc->sc_mmioh = ipa->ipa_mem[mmioidx].h;
|
||||
sc->sc_sramh = ipa->ipa_mem[sramidx].h;
|
||||
sc->sc_memwinsz = ipa->ipa_mem[sramidx].length;
|
||||
/*
|
||||
* Determine total RAM on adapter and decide how much to use.
|
||||
* XXX Since we don't use RAM paging, use sc_memwinsz for now.
|
||||
*/
|
||||
sc->sc_memsize = sc->sc_memwinsz;
|
||||
sc->sc_memreserved = 0;
|
||||
|
||||
sc->sc_aca = TR_ACA_OFFSET;
|
||||
sc->sc_maddr = ipa->ipa_mem[sramidx].base;
|
||||
/*
|
||||
* Reset the card.
|
||||
*/
|
||||
if (tr_reset(sc))
|
||||
return;
|
||||
|
||||
sc->sc_mediastatus = NULL;
|
||||
sc->sc_mediachange = NULL;
|
||||
|
||||
if (tr_attach(sc))
|
||||
return;
|
||||
|
||||
sc->sc_ih = isa_intr_establish(ipa->ipa_ic, ipa->ipa_irq[0].num,
|
||||
ipa->ipa_irq[0].type, IPL_NET, tr_intr, sc);
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.mca,v 1.22 2005/12/11 12:22:18 christos Exp $
|
||||
# $NetBSD: files.mca,v 1.23 2020/01/19 20:00:36 thorpej Exp $
|
||||
#
|
||||
# Config.new file and device description for machine-independent MCA code.
|
||||
# Included by ports that need it.
|
||||
|
@ -24,10 +24,6 @@ file dev/mca/if_we_mca.c we_mca
|
|||
attach aha at mca with aha_mca
|
||||
file dev/mca/aha_mca.c aha_mca
|
||||
|
||||
# TROPIC based Token-Ring (IBM)
|
||||
attach tr at mca with tr_mca
|
||||
file dev/mca/if_tr_mca.c tr_mca
|
||||
|
||||
# 3Com 3C523
|
||||
device elmc: ether, ifnet, arp, i82586
|
||||
attach elmc at mca with elmc_mca
|
||||
|
|
|
@ -1,227 +0,0 @@
|
|||
/* $NetBSD: if_tr_mca.c,v 1.24 2016/07/14 04:19:27 msaitoh Exp $ */
|
||||
|
||||
/*_
|
||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Gregory McGarry <g.mcgarry@ieee.org>.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tr_mca.c,v 1.24 2016/07/14 04:19:27 msaitoh Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <dev/mca/mcareg.h>
|
||||
#include <dev/mca/mcavar.h>
|
||||
#include <dev/mca/mcadevs.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_media.h>
|
||||
#include <net/if_ether.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DPRINTF(x) printf x
|
||||
#else
|
||||
#define DPRINTF(x)
|
||||
#endif
|
||||
|
||||
#define TR_PRI_IOADDR 0x0a20
|
||||
#define TR_ALT_IOADDR 0x0a24
|
||||
#define TR_PIOSIZE 4
|
||||
#define TR_MMIOSIZE 8192
|
||||
#define TR_MBPS_4 0
|
||||
#define TR_MBPS_16 1
|
||||
|
||||
int tr_mca_probe(device_t, cfdata_t, void *);
|
||||
void tr_mca_attach(device_t, device_t, void *);
|
||||
|
||||
CFATTACH_DECL_NEW(tr_mca, sizeof(struct tr_softc),
|
||||
tr_mca_probe, tr_mca_attach, NULL, NULL);
|
||||
|
||||
/* supported products */
|
||||
static const struct tr_mca_product {
|
||||
u_int32_t tr_id;
|
||||
const char *tr_name;
|
||||
} tr_mca_products[] = {
|
||||
{ MCA_PRODUCT_ITR, "IBM Token Ring 16/4 Adapter/A" },
|
||||
{ 0, NULL },
|
||||
};
|
||||
|
||||
static const struct tr_mca_product *tr_mca_lookup(int);
|
||||
|
||||
static const struct tr_mca_product *
|
||||
tr_mca_lookup(int id)
|
||||
{
|
||||
const struct tr_mca_product *trp;
|
||||
|
||||
for(trp = tr_mca_products; trp->tr_name; trp++)
|
||||
if (trp->tr_id == id)
|
||||
return (trp);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
tr_mca_probe(device_t parent, cfdata_t match,
|
||||
void *aux)
|
||||
{
|
||||
struct mca_attach_args *ma = aux;
|
||||
|
||||
if (tr_mca_lookup(ma->ma_id) != NULL)
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
tr_mca_attach(device_t parent, device_t self, void *aux)
|
||||
{
|
||||
struct tr_softc *sc = device_private(self);
|
||||
struct mca_attach_args *ma = aux;
|
||||
bus_space_handle_t pioh, mmioh, sramh;
|
||||
int iobase, irq, sram_size, sram_addr, rom_addr;
|
||||
int pos2, pos3, pos4, pos5;
|
||||
const struct tr_mca_product *tp;
|
||||
|
||||
pos2 = mca_conf_read(ma->ma_mc, ma->ma_slot, 2);
|
||||
pos3 = mca_conf_read(ma->ma_mc, ma->ma_slot, 3);
|
||||
pos4 = mca_conf_read(ma->ma_mc, ma->ma_slot, 4);
|
||||
pos5 = mca_conf_read(ma->ma_mc, ma->ma_slot, 5);
|
||||
__USE(pos5);
|
||||
|
||||
/*
|
||||
* POS register 2: (adf pos0)
|
||||
*
|
||||
* 7 6 5 4 3 2 1 0
|
||||
* \___________/ \__ enable: 0=adapter disabled, 1=adapter enabled
|
||||
* \__________ RAM addr: pos2&0xfe
|
||||
*
|
||||
* POS register 3: (adf pos1)
|
||||
*
|
||||
* 7 6 5 4 3 2 1 0
|
||||
* | \___/ | | | \__ port address: 1=0x0a24-0x0a27, 0=0x0a20-0x0a23
|
||||
* | | \ / \____ speed: 0=4Mbps, 1=16Mbps
|
||||
* | | \_______ RAM size: 00=8kb, 01=16kb, 10=32kb, 11=64kb
|
||||
* | \____________ reserved: 010
|
||||
* \________________ irq component: 0=2, 1=3 (see also pos4)
|
||||
*
|
||||
* POS register 4: (adf pos2)
|
||||
*
|
||||
* 7 6 5 4 3 2 1 0
|
||||
* \___________/ \__ interrupt controller: 0=1st, 1=2nd
|
||||
* \__________ ROM address: pos4&0xfe
|
||||
*
|
||||
* POS register 5: (adf pos3)
|
||||
*
|
||||
* 7 6 5 4 3 2 1 0
|
||||
* | | \_____/
|
||||
* | | \_____ reserved: 0x0
|
||||
* | \__________ autosense: 0=off, 1=on
|
||||
* \____________ boot rom: 0=enabled, 1=disabled
|
||||
*/
|
||||
|
||||
if (pos3 & 0x01)
|
||||
iobase = TR_ALT_IOADDR;
|
||||
else
|
||||
iobase = TR_PRI_IOADDR;
|
||||
|
||||
irq = 2 + (pos3 >> 7) + ((pos4 & 0x01) << 3);
|
||||
if (irq == 2)
|
||||
irq = 9;
|
||||
|
||||
tp = tr_mca_lookup(ma->ma_id);
|
||||
|
||||
printf(" slot %d irq %d: %s\n", ma->ma_slot + 1, irq, tp->tr_name);
|
||||
|
||||
sram_size = 8 << (((pos3 & 0x0c) >> 2) + 10);
|
||||
sram_addr = (pos2 & 0xfe) << 12;
|
||||
|
||||
rom_addr = (pos4 & 0xfe) << 12;
|
||||
|
||||
/* map the pio registers */
|
||||
if (bus_space_map(ma->ma_iot, iobase, TR_PIOSIZE, 0, &pioh)) {
|
||||
aprint_error_dev(self, "unable to map PIO space\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* map the mmio registers */
|
||||
if (bus_space_map(ma->ma_memt, rom_addr, TR_MMIOSIZE, 0, &mmioh)) {
|
||||
aprint_error_dev(self, "unable to map MMIO space\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* map the sram space */
|
||||
if (bus_space_map(ma->ma_memt, sram_addr, sram_size, 0, &sramh)) {
|
||||
aprint_error_dev(self, "unable to map SRAM space\n");
|
||||
return;
|
||||
}
|
||||
|
||||
sc->sc_dev = self;
|
||||
sc->sc_piot = ma->ma_iot;
|
||||
sc->sc_pioh = pioh;
|
||||
sc->sc_memt = ma->ma_memt;
|
||||
sc->sc_mmioh = mmioh;
|
||||
sc->sc_sramh = sramh;
|
||||
|
||||
/* set ACA offset */
|
||||
sc->sc_aca = TR_ACA_OFFSET;
|
||||
sc->sc_memwinsz = sram_size;
|
||||
sc->sc_maddr = sram_addr;
|
||||
|
||||
/*
|
||||
* Determine total RAM on adapter and decide how much to use.
|
||||
* XXX Since we don't use RAM paging, use sc_memwinsz for now.
|
||||
*/
|
||||
sc->sc_memsize = sc->sc_memwinsz;
|
||||
sc->sc_memreserved = 0;
|
||||
|
||||
if (tr_reset(sc) != 0)
|
||||
return;
|
||||
|
||||
/* XXX not implemented (yet) */
|
||||
sc->sc_mediastatus = NULL;
|
||||
sc->sc_mediachange = NULL;
|
||||
|
||||
/* do generic attach */
|
||||
if (tr_attach(sc) != 0)
|
||||
return;
|
||||
|
||||
/* establish interrupt handler */
|
||||
sc->sc_ih = mca_intr_establish(ma->ma_mc, irq, IPL_NET, tr_intr, sc);
|
||||
if (sc->sc_ih == NULL) {
|
||||
aprint_error_dev(self,
|
||||
"couldn't establish interrupt handler\n");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.pcmcia,v 1.59 2018/09/22 16:22:23 maxv Exp $
|
||||
# $NetBSD: files.pcmcia,v 1.60 2020/01/19 20:00:36 thorpej Exp $
|
||||
#
|
||||
# Config.new file and device description for machine-independent PCMCIA code.
|
||||
# Included by ports that need it.
|
||||
|
@ -103,10 +103,6 @@ file dev/pcmcia/xirc.c xirc | com_xirc | xi_xirc
|
|||
needs-flag
|
||||
file dev/pcmcia/if_xi.c xi
|
||||
|
||||
# IBM Tropic-based Token Ring cards
|
||||
attach tr at pcmcia with tr_pcmcia
|
||||
file dev/pcmcia/if_tr_pcmcia.c tr_pcmcia
|
||||
|
||||
# Crystal Semiconductor CS8920 based cards
|
||||
attach cs at pcmcia with cs_pcmcia
|
||||
file dev/pcmcia/if_cs_pcmcia.c cs_pcmcia
|
||||
|
|
|
@ -1,333 +0,0 @@
|
|||
/* $NetBSD: if_tr_pcmcia.c,v 1.29 2019/11/12 13:17:44 msaitoh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||
* Copyright (c) 2000 Onno van der Linden. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* PCMCIA attachment for the following Tropic-based cards.
|
||||
*
|
||||
* o IBM Token Ring 16/4 Credit Card Adapter
|
||||
* o IBM Token Ring Auto 16/4 Credit Card Adapter
|
||||
* o IBM Turbo 16/4 Token Ring PC Card
|
||||
* o 3Com TokenLink Velocity PC Card
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tr_pcmcia.c,v 1.29 2019/11/12 13:17:44 msaitoh Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/callout.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <sys/bus.h>
|
||||
#include <sys/intr.h>
|
||||
|
||||
#include <dev/ic/tropicreg.h>
|
||||
#include <dev/ic/tropicvar.h>
|
||||
|
||||
#include <dev/pcmcia/pcmciareg.h>
|
||||
#include <dev/pcmcia/pcmciavar.h>
|
||||
#include <dev/pcmcia/pcmciadevs.h>
|
||||
|
||||
#define TR_SRAM_SIZE (16 * 1024) /* Really 64KB, but conserve iomem. */
|
||||
|
||||
/*
|
||||
* XXX How do host/PCMCIA/cbb memory spaces actually relate?
|
||||
*/
|
||||
#ifndef TR_PCMCIA_SRAM_ADDR
|
||||
#define TR_PCMCIA_SRAM_ADDR 0xc8000
|
||||
#endif
|
||||
#ifndef TR_PCMCIA_MMIO_ADDR
|
||||
#define TR_PCMCIA_MMIO_ADDR 0xcc000
|
||||
#endif
|
||||
|
||||
struct tr_pcmcia_softc {
|
||||
struct tr_softc sc_tr;
|
||||
|
||||
struct pcmcia_io_handle sc_pioh;
|
||||
int sc_pio_window;
|
||||
struct pcmcia_mem_handle sc_sramh;
|
||||
int sc_sram_window;
|
||||
struct pcmcia_mem_handle sc_mmioh;
|
||||
int sc_mmio_window;
|
||||
struct pcmcia_function *sc_pf;
|
||||
};
|
||||
|
||||
static int tr_pcmcia_match(device_t, cfdata_t, void *);
|
||||
static void tr_pcmcia_attach(device_t, device_t, void *);
|
||||
static int tr_pcmcia_detach(device_t, int);
|
||||
static int tr_pcmcia_enable(struct tr_softc *);
|
||||
static int tr_pcmcia_mediachange(struct tr_softc *);
|
||||
static void tr_pcmcia_mediastatus(struct tr_softc *, struct ifmediareq *);
|
||||
static void tr_pcmcia_disable(struct tr_softc *);
|
||||
static void tr_pcmcia_setup(struct tr_softc *);
|
||||
|
||||
CFATTACH_DECL_NEW(tr_pcmcia, sizeof(struct tr_pcmcia_softc),
|
||||
tr_pcmcia_match, tr_pcmcia_attach, tr_pcmcia_detach, tr_activate);
|
||||
|
||||
static int
|
||||
tr_pcmcia_match(device_t parent, cfdata_t match,
|
||||
void *aux)
|
||||
{
|
||||
struct pcmcia_attach_args *pa = aux;
|
||||
|
||||
if (pa->manufacturer == PCMCIA_VENDOR_IBM)
|
||||
switch (pa->product) {
|
||||
case PCMCIA_PRODUCT_IBM_TROPIC:
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
tr_pcmcia_attach(device_t parent, device_t self, void *aux)
|
||||
{
|
||||
struct tr_pcmcia_softc *psc = device_private(self);
|
||||
struct tr_softc *sc = &psc->sc_tr;
|
||||
struct pcmcia_attach_args *pa = aux;
|
||||
struct pcmcia_config_entry *cfe;
|
||||
bus_size_t offset;
|
||||
|
||||
psc->sc_pf = pa->pf;
|
||||
sc->sc_dev = self;
|
||||
|
||||
cfe = SIMPLEQ_FIRST(&pa->pf->cfe_head);
|
||||
|
||||
pcmcia_function_init(pa->pf, cfe);
|
||||
if (pcmcia_function_enable(pa->pf) != 0) {
|
||||
aprint_error_dev(self, "function enable failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (pcmcia_io_alloc(pa->pf, cfe->iospace[0].start,
|
||||
cfe->iospace[0].length, cfe->iospace[0].length, &psc->sc_pioh)
|
||||
!= 0) {
|
||||
aprint_error_dev(self, "can't allocate pio space\n");
|
||||
goto fail1;
|
||||
}
|
||||
if (pcmcia_io_map(psc->sc_pf, PCMCIA_WIDTH_IO8, /* XXX _AUTO? */
|
||||
&psc->sc_pioh, &psc->sc_pio_window) != 0) {
|
||||
aprint_error_dev(self, "can't map pio space\n");
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
if (pcmcia_mem_alloc(psc->sc_pf, TR_SRAM_SIZE, &psc->sc_sramh) != 0) {
|
||||
aprint_error_dev(self, "can't allocate sram space\n");
|
||||
goto fail3;
|
||||
}
|
||||
if (pcmcia_mem_map(psc->sc_pf, PCMCIA_MEM_COMMON, TR_PCMCIA_SRAM_ADDR,
|
||||
TR_SRAM_SIZE, &psc->sc_sramh, &offset, &psc->sc_sram_window) != 0) {
|
||||
aprint_error_dev(self, "can't map sram space\n");
|
||||
goto fail4;
|
||||
}
|
||||
|
||||
if (pcmcia_mem_alloc(psc->sc_pf, TR_MMIO_SIZE, &psc->sc_mmioh) != 0) {
|
||||
aprint_error_dev(self, "can't allocate mmio space\n");
|
||||
goto fail5;
|
||||
return;
|
||||
}
|
||||
if (pcmcia_mem_map(psc->sc_pf, PCMCIA_MEM_COMMON, TR_PCMCIA_MMIO_ADDR,
|
||||
TR_MMIO_SIZE, &psc->sc_mmioh, &offset, &psc->sc_mmio_window) != 0) {
|
||||
aprint_error_dev(self, "can't map mmio space\n");
|
||||
goto fail6;
|
||||
}
|
||||
|
||||
sc->sc_piot = psc->sc_pioh.iot;
|
||||
sc->sc_pioh = psc->sc_pioh.ioh;
|
||||
sc->sc_memt = psc->sc_sramh.memt;
|
||||
sc->sc_sramh = psc->sc_sramh.memh;
|
||||
sc->sc_mmioh = psc->sc_mmioh.memh;
|
||||
sc->sc_init_status = RSP_16;
|
||||
sc->sc_memwinsz = TR_SRAM_SIZE;
|
||||
sc->sc_memsize = TR_SRAM_SIZE;
|
||||
sc->sc_memreserved = 0;
|
||||
sc->sc_aca = TR_ACA_OFFSET;
|
||||
sc->sc_maddr = TR_PCMCIA_SRAM_ADDR;
|
||||
sc->sc_mediastatus = tr_pcmcia_mediastatus;
|
||||
sc->sc_mediachange = tr_pcmcia_mediachange;
|
||||
sc->sc_enable = tr_pcmcia_enable;
|
||||
sc->sc_disable = tr_pcmcia_disable;
|
||||
|
||||
tr_pcmcia_setup(sc);
|
||||
if (tr_reset(sc) == 0)
|
||||
(void)tr_attach(sc);
|
||||
|
||||
pcmcia_function_disable(pa->pf);
|
||||
sc->sc_enabled = 0;
|
||||
return;
|
||||
|
||||
fail6:
|
||||
pcmcia_mem_free(psc->sc_pf, &psc->sc_mmioh);
|
||||
fail5:
|
||||
pcmcia_mem_unmap(psc->sc_pf, psc->sc_sram_window);
|
||||
fail4:
|
||||
pcmcia_mem_free(psc->sc_pf, &psc->sc_sramh);
|
||||
fail3:
|
||||
pcmcia_io_unmap(psc->sc_pf, psc->sc_pio_window);
|
||||
fail2:
|
||||
pcmcia_io_free(psc->sc_pf, &psc->sc_pioh);
|
||||
fail1:
|
||||
pcmcia_function_disable(pa->pf);
|
||||
sc->sc_enabled = 0;
|
||||
}
|
||||
|
||||
static int
|
||||
tr_pcmcia_enable(struct tr_softc *sc)
|
||||
{
|
||||
struct tr_pcmcia_softc *psc = (struct tr_pcmcia_softc *) sc;
|
||||
int ret;
|
||||
|
||||
sc->sc_ih = pcmcia_intr_establish(psc->sc_pf, IPL_NET, tr_intr, psc);
|
||||
if (sc->sc_ih == NULL) {
|
||||
aprint_error_dev(psc->sc_tr.sc_dev,
|
||||
"couldn't establish interrupt\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = pcmcia_function_enable(psc->sc_pf);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
tr_pcmcia_setup(sc);
|
||||
|
||||
if (tr_reset(sc))
|
||||
return 1;
|
||||
if (tr_config(sc))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
tr_pcmcia_disable(struct tr_softc *sc)
|
||||
{
|
||||
struct tr_pcmcia_softc *psc = (struct tr_pcmcia_softc *) sc;
|
||||
|
||||
pcmcia_function_disable(psc->sc_pf);
|
||||
pcmcia_intr_disestablish(psc->sc_pf, sc->sc_ih);
|
||||
}
|
||||
|
||||
static int
|
||||
tr_pcmcia_mediachange(struct tr_softc *sc)
|
||||
{
|
||||
int setspeed = 0;
|
||||
|
||||
if (IFM_TYPE(sc->sc_media.ifm_media) != IFM_TOKEN)
|
||||
return EINVAL;
|
||||
|
||||
switch (IFM_SUBTYPE(sc->sc_media.ifm_media)) {
|
||||
case IFM_TOK_STP16:
|
||||
case IFM_TOK_UTP16:
|
||||
if ((sc->sc_init_status & RSP_16) == 0)
|
||||
setspeed = 1;
|
||||
break;
|
||||
case IFM_TOK_STP4:
|
||||
case IFM_TOK_UTP4:
|
||||
if ((sc->sc_init_status & RSP_16) != 0)
|
||||
setspeed = 1;
|
||||
break;
|
||||
}
|
||||
if (setspeed != 0) {
|
||||
tr_stop(sc);
|
||||
if (sc->sc_enabled)
|
||||
tr_pcmcia_disable(sc);
|
||||
sc->sc_init_status ^= RSP_16; /* XXX 100 Mbit/s */
|
||||
if (sc->sc_enabled)
|
||||
tr_pcmcia_enable(sc);
|
||||
}
|
||||
/*
|
||||
* XXX Handle Early Token Release !!!!
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX Copy of tropic_mediastatus()
|
||||
*/
|
||||
static void
|
||||
tr_pcmcia_mediastatus(struct tr_softc *sc, struct ifmediareq *ifmr)
|
||||
{
|
||||
struct ifmedia *ifm = &sc->sc_media;
|
||||
|
||||
ifmr->ifm_active = ifm->ifm_cur->ifm_media;
|
||||
}
|
||||
|
||||
int
|
||||
tr_pcmcia_detach(device_t self, int flags)
|
||||
{
|
||||
struct tr_pcmcia_softc *psc = device_private(self);
|
||||
int rv;
|
||||
|
||||
rv = tr_detach(self, flags);
|
||||
|
||||
if (rv == 0) {
|
||||
pcmcia_mem_unmap(psc->sc_pf, psc->sc_mmio_window);
|
||||
pcmcia_mem_free(psc->sc_pf, &psc->sc_mmioh);
|
||||
pcmcia_mem_unmap(psc->sc_pf, psc->sc_sram_window);
|
||||
pcmcia_mem_free(psc->sc_pf, &psc->sc_sramh);
|
||||
pcmcia_io_unmap(psc->sc_pf, psc->sc_pio_window);
|
||||
pcmcia_io_free(psc->sc_pf, &psc->sc_pioh);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
static void
|
||||
tr_pcmcia_setup(struct tr_softc *sc)
|
||||
{
|
||||
int s;
|
||||
|
||||
bus_space_write_1(sc->sc_piot, sc->sc_pioh, 0,
|
||||
(TR_PCMCIA_MMIO_ADDR >> 16) & 0x0f);
|
||||
|
||||
bus_space_write_1(sc->sc_piot, sc->sc_pioh, 0,
|
||||
0x10 | ((TR_PCMCIA_MMIO_ADDR >> 12) & 0x0e));
|
||||
|
||||
/* XXX Magick */
|
||||
bus_space_write_1(sc->sc_piot, sc->sc_pioh, 0, 0x20 | 0x06);
|
||||
|
||||
/* 0 << 2 for 8K, 1 << 2 for 16K, 2 << 2 for 32K, 3 << 2 for 64K */
|
||||
/* 0 << 1 for 4Mbit/s, 1 << 1 for 16Mbit/s */
|
||||
/* 0 for primary, 1 for alternate */
|
||||
s = sc->sc_init_status & RSP_16 ? (1 << 1) : (0 << 1);
|
||||
bus_space_write_1(sc->sc_piot, sc->sc_pioh, 0, 0x30 | 0x04 | s);
|
||||
|
||||
/* Release the card. */
|
||||
bus_space_write_1(sc->sc_piot, sc->sc_pioh, 0, 0x40);
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: Makefile,v 1.39 2020/01/19 06:55:21 thorpej Exp $
|
||||
# $NetBSD: Makefile,v 1.40 2020/01/19 20:00:36 thorpej Exp $
|
||||
|
||||
INCSDIR= /usr/include/net
|
||||
|
||||
|
@ -6,7 +6,7 @@ INCS= bpf.h bpfjit.h bpfdesc.h dlt.h ethertypes.h if.h if_arc.h if_arp.h \
|
|||
if_bridgevar.h if_dl.h if_ether.h if_fddi.h if_gif.h \
|
||||
if_gre.h if_ieee1394.h if_ipsec.h if_llc.h if_media.h if_mpls.h \
|
||||
if_pflog.h if_ppp.h if_pppoe.h if_l2tp.h if_sppp.h if_srt.h if_stf.h \
|
||||
if_tap.h if_token.h if_tun.h if_types.h if_vlanvar.h net_stats.h \
|
||||
if_tap.h if_tun.h if_types.h if_vlanvar.h net_stats.h \
|
||||
netisr.h pfil.h pfkeyv2.h pfvar.h ppp-comp.h ppp_defs.h radix.h \
|
||||
raw_cb.h route.h slcompress.h slip.h zlib.h
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $NetBSD: files.net,v 1.22 2020/01/19 06:55:21 thorpej Exp $
|
||||
# $NetBSD: files.net,v 1.23 2020/01/19 20:00:36 thorpej Exp $
|
||||
|
||||
# XXX CLEANUP
|
||||
define net
|
||||
|
@ -12,7 +12,7 @@ file net/if.c net
|
|||
file net/if_arcsubr.c arcnet needs-flag
|
||||
file net/if_bridge.c bridge needs-flag
|
||||
file net/bridgestp.c bridge
|
||||
file net/if_ethersubr.c ether | fddi | netatalk | token |
|
||||
file net/if_ethersubr.c ether | fddi | netatalk |
|
||||
wlan needs-flag
|
||||
file net/if_faith.c faith & (inet | inet6) needs-flag
|
||||
file net/if_fddisubr.c fddi needs-flag
|
||||
|
@ -30,7 +30,6 @@ file net/if_srt.c srt
|
|||
file net/if_stf.c stf & inet & inet6 needs-flag
|
||||
file net/if_sl.c sl needs-flag
|
||||
file net/if_spppsubr.c sppp
|
||||
file net/if_tokensubr.c token needs-flag
|
||||
file net/if_tap.c tap
|
||||
file net/if_tun.c tun
|
||||
file net/if_vlan.c vlan needs-flag
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if.c,v 1.466 2019/12/17 04:54:36 christos Exp $ */
|
||||
/* $NetBSD: if.c,v 1.467 2020/01/19 20:00:36 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
|
||||
|
@ -90,7 +90,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.466 2019/12/17 04:54:36 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.467 2020/01/19 20:00:36 thorpej Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_inet.h"
|
||||
|
@ -150,7 +150,6 @@ __KERNEL_RCSID(0, "$NetBSD: if.c,v 1.466 2019/12/17 04:54:36 christos Exp $");
|
|||
|
||||
#include "ether.h"
|
||||
#include "fddi.h"
|
||||
#include "token.h"
|
||||
|
||||
#include "bridge.h"
|
||||
#if NBRIDGE > 0
|
||||
|
@ -319,7 +318,7 @@ ifinit1(void)
|
|||
if_pfil = pfil_head_create(PFIL_TYPE_IFNET, NULL);
|
||||
KASSERT(if_pfil != NULL);
|
||||
|
||||
#if NETHER > 0 || NFDDI > 0 || defined(NETATALK) || NTOKEN > 0 || defined(WLAN)
|
||||
#if NETHER > 0 || NFDDI > 0 || defined(NETATALK) || defined(WLAN)
|
||||
etherinit();
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -1,127 +0,0 @@
|
|||
/* $NetBSD: if_token.h,v 1.17 2015/12/16 05:44:59 ozaki-r Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: NetBSD: if_fddi.h,v 1.2 1995/08/19 04:35:28 cgd Exp
|
||||
*/
|
||||
|
||||
#ifndef _NET_IF_TOKEN_H_
|
||||
#define _NET_IF_TOKEN_H_
|
||||
|
||||
#define ISO88025_ADDR_LEN 6
|
||||
|
||||
/* Token Ring physical header */
|
||||
struct token_header {
|
||||
uint8_t token_ac; /* access control field */
|
||||
uint8_t token_fc; /* frame control field */
|
||||
uint8_t token_dhost[ISO88025_ADDR_LEN]; /* dest. address */
|
||||
uint8_t token_shost[ISO88025_ADDR_LEN]; /* source address */
|
||||
} __packed;
|
||||
|
||||
#define TOKEN_MAX_BRIDGE 8
|
||||
|
||||
/* Token Ring routing information field */
|
||||
struct token_rif {
|
||||
uint16_t tr_rcf; /* route control field */
|
||||
uint16_t tr_rdf[TOKEN_MAX_BRIDGE]; /* route-designator fields */
|
||||
} __packed;
|
||||
|
||||
/* standard values for address control and frame control field */
|
||||
#define TOKEN_AC 0x10
|
||||
#define TOKEN_FC 0x40
|
||||
|
||||
#define TOKEN_RI_PRESENT 0x80 /* routing info present bit */
|
||||
#define TOKEN_RCF_LEN_MASK 0x1f00
|
||||
#define TOKEN_RCF_BROADCAST_MASK 0xe000
|
||||
#define TOKEN_RCF_BROADCAST_ALL 0x8000 /* all routes broadcast */
|
||||
#define TOKEN_RCF_BROADCAST_SINGLE 0xc000 /* single route broadcast */
|
||||
|
||||
/*
|
||||
* A Token-ring frame consists of
|
||||
* header + rif + llcinfo + fcs
|
||||
* 14 + 2 * (0 ... 9) + x + 4 octets
|
||||
* where llcinfo contains the llcsnap header (8 octets) and the IP frame
|
||||
*/
|
||||
/* LLC INFO (802.5PD-2) */
|
||||
#define TOKEN_RCF_FRAME0 0x0000 /* 516 */
|
||||
#define TOKEN_RCF_FRAME1 0x0010 /* 1500 */
|
||||
#define TOKEN_RCF_FRAME2 0x0020 /* 2052 */
|
||||
#define TOKEN_RCF_FRAME3 0x0030 /* 4472 */
|
||||
#define TOKEN_RCF_FRAME4 0x0040 /* 8144 */
|
||||
#define TOKEN_RCF_FRAME5 0x0050 /* 11407 */
|
||||
#define TOKEN_RCF_FRAME6 0x0060 /* 17800 */
|
||||
#define TOKEN_RCF_FRAME7 0x0070 /* 65535 */
|
||||
#define TOKEN_RCF_FRAME_MASK 0x0070
|
||||
|
||||
#define TOKEN_RCF_DIRECTION 0x0080
|
||||
|
||||
/*
|
||||
* According to RFC 1042
|
||||
*/
|
||||
#define IPMTU_4MBIT_MAX 4464
|
||||
#define IPMTU_16MBIT_MAX 8188
|
||||
|
||||
/*
|
||||
* RFC 1042:
|
||||
* It is recommended that all implementations support IP packets
|
||||
* of at least 2002 octets.
|
||||
*/
|
||||
#define ISO88025_MTU 2002
|
||||
|
||||
/*
|
||||
* This assumes that route information fields are appended to token_header.
|
||||
*/
|
||||
#define TOKEN_RIF(x) ((struct token_rif *) ((x) + 1))
|
||||
|
||||
#define TOKEN_RIF_LLE(lle) ((struct token_rif *) (lle)->la_opaque)
|
||||
#define TOKEN_RIF_LLE_ASSERT(lle) KASSERT((lle)->la_opaque != NULL)
|
||||
|
||||
/*
|
||||
* This is a kludge to get at the token ring mac header and the source route
|
||||
* information after m_adj() has been used on the mbuf.
|
||||
* Note that m is always an mbuf with a packet header.
|
||||
*/
|
||||
#define M_TRHSTART(m) \
|
||||
(ALIGN(((m)->m_flags & M_EXT ? (m)->m_ext.ext_buf : &(m)->m_pktdat[0]) \
|
||||
+ sizeof (struct token_header)) - sizeof(struct token_header))
|
||||
|
||||
#if defined(_KERNEL)
|
||||
/*
|
||||
* XXX we need if_ethersubr.c with all these defines
|
||||
*/
|
||||
#define tokenbroadcastaddr etherbroadcastaddr
|
||||
#define token_ipmulticast_min ether_ipmulticast_min
|
||||
#define token_ipmulticast_max ether_ipmulticast_max
|
||||
#define token_sprintf ether_sprintf
|
||||
|
||||
void token_ifattach(struct ifnet *, void *);
|
||||
void token_ifdetach(struct ifnet *);
|
||||
#endif
|
||||
|
||||
#endif /* !_NET_IF_TOKEN_H_ */
|
|
@ -1,526 +0,0 @@
|
|||
/* $NetBSD: if_tokensubr.c,v 1.84 2019/02/05 06:17:03 msaitoh Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: NetBSD: if_fddisubr.c,v 1.2 1995/08/19 04:35:29 cgd Exp
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997-1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Onno van der Linden.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995
|
||||
* Matt Thomas. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The names of its contributors may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: NetBSD: if_fddisubr.c,v 1.2 1995/08/19 04:35:29 cgd Exp
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_tokensubr.c,v 1.84 2019/02/05 06:17:03 msaitoh Exp $");
|
||||
|
||||
#ifdef _KERNEL_OPT
|
||||
#include "opt_inet.h"
|
||||
#include "opt_atalk.h"
|
||||
#include "opt_gateway.h"
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/mbuf.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/syslog.h>
|
||||
|
||||
#include <sys/cpu.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_llatbl.h>
|
||||
#include <net/if_llc.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/netisr.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#include <net/bpf.h>
|
||||
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_token.h>
|
||||
|
||||
#ifdef INET
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/in_var.h>
|
||||
#include <netinet/if_inarp.h>
|
||||
#endif
|
||||
|
||||
#include "carp.h"
|
||||
#if NCARP > 0
|
||||
#include <netinet/ip_carp.h>
|
||||
#endif
|
||||
|
||||
#define senderr(e) { error = (e); goto bad;}
|
||||
|
||||
#define RCF_ALLROUTES (2 << 8) | TOKEN_RCF_FRAME2 | TOKEN_RCF_BROADCAST_ALL
|
||||
#define RCF_SINGLEROUTE (2 << 8) | TOKEN_RCF_FRAME2 | TOKEN_RCF_BROADCAST_SINGLE
|
||||
|
||||
static int token_output(struct ifnet *, struct mbuf *,
|
||||
const struct sockaddr *, const struct rtentry *);
|
||||
static void token_input(struct ifnet *, struct mbuf *);
|
||||
|
||||
/*
|
||||
* Token Ring output routine.
|
||||
* Encapsulate a packet of type family for the local net.
|
||||
* Assumes that ifp is actually pointer to arphdr structure.
|
||||
* XXX route info has to go into the same mbuf as the header
|
||||
*/
|
||||
static int
|
||||
token_output(struct ifnet *ifp0, struct mbuf *m0, const struct sockaddr *dst,
|
||||
const struct rtentry *rt)
|
||||
{
|
||||
uint16_t etype;
|
||||
int error = 0;
|
||||
u_char edst[ISO88025_ADDR_LEN];
|
||||
struct mbuf *m = m0;
|
||||
struct mbuf *mcopy = NULL;
|
||||
struct token_header *trh;
|
||||
#ifdef INET
|
||||
struct arphdr *ah = (struct arphdr *)ifp0;
|
||||
#endif /* INET */
|
||||
struct token_rif *rif = NULL;
|
||||
struct token_rif bcastrif;
|
||||
struct ifnet *ifp = ifp0;
|
||||
size_t riflen = 0;
|
||||
|
||||
#if NCARP > 0
|
||||
if (ifp->if_type == IFT_CARP) {
|
||||
struct ifaddr *ifa;
|
||||
|
||||
/* loop back if this is going to the carp interface */
|
||||
if (dst != NULL && ifp0->if_link_state == LINK_STATE_UP) {
|
||||
int s = pserialize_read_enter();
|
||||
ifa = ifa_ifwithaddr(dst);
|
||||
if (ifa != NULL &&
|
||||
ifa->ifa_ifp == ifp0) {
|
||||
pserialize_read_exit(s);
|
||||
return (looutput(ifp0, m, dst, rt));
|
||||
}
|
||||
pserialize_read_exit(s);
|
||||
}
|
||||
|
||||
ifp = ifp->if_carpdev;
|
||||
ah = (struct arphdr *)ifp;
|
||||
|
||||
if ((ifp0->if_flags & (IFF_UP|IFF_RUNNING)) !=
|
||||
(IFF_UP|IFF_RUNNING))
|
||||
senderr(ENETDOWN);
|
||||
}
|
||||
#endif /* NCARP > 0 */
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
|
||||
senderr(ENETDOWN);
|
||||
|
||||
/*
|
||||
* If the queueing discipline needs packet classification,
|
||||
* do it before prepending link headers.
|
||||
*/
|
||||
IFQ_CLASSIFY(&ifp->if_snd, m, dst->sa_family);
|
||||
|
||||
switch (dst->sa_family) {
|
||||
|
||||
#ifdef INET
|
||||
case AF_INET:
|
||||
if (m->m_flags & M_BCAST) {
|
||||
if (ifp->if_flags & IFF_LINK0) {
|
||||
if (ifp->if_flags & IFF_LINK1)
|
||||
bcastrif.tr_rcf = htons(RCF_ALLROUTES);
|
||||
else
|
||||
bcastrif.tr_rcf = htons(RCF_SINGLEROUTE);
|
||||
rif = &bcastrif;
|
||||
riflen = sizeof(rif->tr_rcf);
|
||||
}
|
||||
memcpy(edst, tokenbroadcastaddr, sizeof(edst));
|
||||
}
|
||||
/*
|
||||
* XXX m->m_flags & M_MCAST IEEE802_MAP_IP_MULTICAST ??
|
||||
*/
|
||||
else {
|
||||
struct llentry *la;
|
||||
|
||||
error = arpresolve(ifp, rt, m, dst, edst, sizeof(edst));
|
||||
if (error != 0)
|
||||
return error == EWOULDBLOCK ? 0 : error;
|
||||
|
||||
la = rt->rt_llinfo;
|
||||
KASSERT(la != NULL);
|
||||
TOKEN_RIF_LLE_ASSERT(la);
|
||||
rif = TOKEN_RIF_LLE(la);
|
||||
riflen = (ntohs(rif->tr_rcf) & TOKEN_RCF_LEN_MASK) >> 8;
|
||||
}
|
||||
/* If broadcasting on a simplex interface, loopback a copy. */
|
||||
if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))
|
||||
mcopy = m_copypacket(m, M_DONTWAIT);
|
||||
etype = htons(ETHERTYPE_IP);
|
||||
break;
|
||||
case AF_ARP:
|
||||
/*
|
||||
* XXX source routing, assume m->m_data contains the useful stuff
|
||||
*/
|
||||
ah = mtod(m, struct arphdr *);
|
||||
ah->ar_hrd = htons(ARPHRD_IEEE802);
|
||||
|
||||
switch (ntohs(ah->ar_op)) {
|
||||
case ARPOP_REVREQUEST:
|
||||
case ARPOP_REVREPLY:
|
||||
etype = htons(ETHERTYPE_REVARP);
|
||||
break;
|
||||
|
||||
case ARPOP_REQUEST:
|
||||
case ARPOP_REPLY:
|
||||
default:
|
||||
etype = htons(ETHERTYPE_ARP);
|
||||
}
|
||||
|
||||
if (m->m_flags & M_BCAST) {
|
||||
if (ifp->if_flags & IFF_LINK0) {
|
||||
if (ifp->if_flags & IFF_LINK1)
|
||||
bcastrif.tr_rcf = htons(RCF_ALLROUTES);
|
||||
else
|
||||
bcastrif.tr_rcf = htons(RCF_SINGLEROUTE);
|
||||
rif = &bcastrif;
|
||||
riflen = sizeof(rif->tr_rcf);
|
||||
}
|
||||
memcpy(edst, tokenbroadcastaddr, sizeof(edst));
|
||||
}
|
||||
else {
|
||||
void *tha = ar_tha(ah);
|
||||
if (tha == NULL) {
|
||||
m_freem(m);
|
||||
return 0;
|
||||
}
|
||||
memcpy(edst, tha, sizeof(edst));
|
||||
trh = (struct token_header *)M_TRHSTART(m);
|
||||
trh->token_ac = TOKEN_AC;
|
||||
trh->token_fc = TOKEN_FC;
|
||||
if (trh->token_shost[0] & TOKEN_RI_PRESENT) {
|
||||
struct token_rif *trrif;
|
||||
|
||||
trrif = TOKEN_RIF(trh);
|
||||
riflen = (ntohs(trrif->tr_rcf) & TOKEN_RCF_LEN_MASK) >> 8;
|
||||
}
|
||||
memcpy((void *)trh->token_dhost, (void *)edst,
|
||||
sizeof (edst));
|
||||
memcpy((void *)trh->token_shost, CLLADDR(ifp->if_sadl),
|
||||
sizeof(trh->token_shost));
|
||||
if (riflen != 0)
|
||||
trh->token_shost[0] |= TOKEN_RI_PRESENT;
|
||||
/*
|
||||
* compare (m->m_data - m->m_pktdat) with (sizeof(struct token_header) + riflen + ...
|
||||
*/
|
||||
m->m_len += (sizeof(*trh) + riflen + LLC_SNAPFRAMELEN);
|
||||
m->m_data -= (sizeof(*trh) + riflen + LLC_SNAPFRAMELEN);
|
||||
m->m_pkthdr.len += (sizeof(*trh) + riflen + LLC_SNAPFRAMELEN);
|
||||
goto send;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case AF_UNSPEC:
|
||||
{
|
||||
const struct ether_header *eh;
|
||||
eh = (const struct ether_header *)dst->sa_data;
|
||||
memcpy(edst, eh->ether_dhost, sizeof(edst));
|
||||
if (*edst & 1)
|
||||
m->m_flags |= (M_BCAST|M_MCAST);
|
||||
etype = eh->ether_type;
|
||||
if (m->m_flags & M_BCAST) {
|
||||
if (ifp->if_flags & IFF_LINK0) {
|
||||
if (ifp->if_flags & IFF_LINK1)
|
||||
bcastrif.tr_rcf = htons(RCF_ALLROUTES);
|
||||
else
|
||||
bcastrif.tr_rcf = htons(RCF_SINGLEROUTE);
|
||||
rif = &bcastrif;
|
||||
riflen = sizeof(bcastrif.tr_rcf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
printf("%s: can't handle af%d\n", ifp->if_xname,
|
||||
dst->sa_family);
|
||||
senderr(EAFNOSUPPORT);
|
||||
}
|
||||
|
||||
|
||||
if (mcopy)
|
||||
(void) looutput(ifp, mcopy, dst, rt);
|
||||
if (etype != 0) {
|
||||
struct llc *l;
|
||||
M_PREPEND(m, LLC_SNAPFRAMELEN, M_DONTWAIT);
|
||||
if (m == 0)
|
||||
senderr(ENOBUFS);
|
||||
l = mtod(m, struct llc *);
|
||||
l->llc_control = LLC_UI;
|
||||
l->llc_dsap = l->llc_ssap = LLC_SNAP_LSAP;
|
||||
l->llc_snap.org_code[0] = l->llc_snap.org_code[1] =
|
||||
l->llc_snap.org_code[2] = 0;
|
||||
memcpy((void *) &l->llc_snap.ether_type, (void *) &etype,
|
||||
sizeof(uint16_t));
|
||||
}
|
||||
|
||||
/*
|
||||
* Add local net header. If no space in first mbuf,
|
||||
* allocate another.
|
||||
*/
|
||||
|
||||
M_PREPEND(m, (riflen + sizeof (*trh)), M_DONTWAIT);
|
||||
if (m == 0)
|
||||
senderr(ENOBUFS);
|
||||
trh = mtod(m, struct token_header *);
|
||||
trh->token_ac = TOKEN_AC;
|
||||
trh->token_fc = TOKEN_FC;
|
||||
memcpy((void *)trh->token_dhost, (void *)edst, sizeof (edst));
|
||||
memcpy((void *)trh->token_shost, CLLADDR(ifp->if_sadl),
|
||||
sizeof(trh->token_shost));
|
||||
|
||||
if (riflen != 0) {
|
||||
struct token_rif *trrif;
|
||||
|
||||
trh->token_shost[0] |= TOKEN_RI_PRESENT;
|
||||
trrif = TOKEN_RIF(trh);
|
||||
memcpy(trrif, rif, riflen);
|
||||
}
|
||||
#ifdef INET
|
||||
send:
|
||||
#endif
|
||||
|
||||
#if NCARP > 0
|
||||
if (ifp0 != ifp && ifp0->if_type == IFT_CARP) {
|
||||
memcpy((void *)trh->token_shost, CLLADDR(ifp0->if_sadl),
|
||||
sizeof(trh->token_shost));
|
||||
}
|
||||
#endif /* NCARP > 0 */
|
||||
|
||||
return ifq_enqueue(ifp, m);
|
||||
bad:
|
||||
if (m)
|
||||
m_freem(m);
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Process a received token ring packet;
|
||||
* the packet is in the mbuf chain m with
|
||||
* the token ring header.
|
||||
*/
|
||||
static void
|
||||
token_input(struct ifnet *ifp, struct mbuf *m)
|
||||
{
|
||||
pktqueue_t *pktq = NULL;
|
||||
struct ifqueue *inq = NULL;
|
||||
struct llc *l;
|
||||
struct token_header *trh;
|
||||
int lan_hdr_len;
|
||||
int isr = 0;
|
||||
|
||||
if ((ifp->if_flags & IFF_UP) == 0) {
|
||||
m_freem(m);
|
||||
return;
|
||||
}
|
||||
|
||||
trh = mtod(m, struct token_header *);
|
||||
|
||||
ifp->if_ibytes += m->m_pkthdr.len;
|
||||
if (memcmp(tokenbroadcastaddr, trh->token_dhost,
|
||||
sizeof(tokenbroadcastaddr)) == 0)
|
||||
m->m_flags |= M_BCAST;
|
||||
else if (trh->token_dhost[0] & 1)
|
||||
m->m_flags |= M_MCAST;
|
||||
if (m->m_flags & (M_BCAST|M_MCAST))
|
||||
ifp->if_imcasts++;
|
||||
|
||||
/* Skip past the Token Ring header and RIF. */
|
||||
lan_hdr_len = sizeof(struct token_header);
|
||||
if (trh->token_shost[0] & TOKEN_RI_PRESENT) {
|
||||
struct token_rif *trrif;
|
||||
|
||||
trrif = TOKEN_RIF(trh);
|
||||
lan_hdr_len += (ntohs(trrif->tr_rcf) & TOKEN_RCF_LEN_MASK) >> 8;
|
||||
}
|
||||
|
||||
l = (struct llc *)(mtod(m, uint8_t *) + lan_hdr_len);
|
||||
|
||||
switch (l->llc_dsap) {
|
||||
#if defined(INET)
|
||||
case LLC_SNAP_LSAP:
|
||||
{
|
||||
uint16_t etype;
|
||||
if (l->llc_control != LLC_UI || l->llc_ssap != LLC_SNAP_LSAP)
|
||||
goto dropanyway;
|
||||
if (l->llc_snap.org_code[0] != 0 ||
|
||||
l->llc_snap.org_code[1] != 0 ||
|
||||
l->llc_snap.org_code[2] != 0)
|
||||
goto dropanyway;
|
||||
etype = ntohs(l->llc_snap.ether_type);
|
||||
m_adj(m, lan_hdr_len + LLC_SNAPFRAMELEN);
|
||||
#if NCARP > 0
|
||||
if (ifp->if_carp && ifp->if_type != IFT_CARP &&
|
||||
(carp_input(m, (uint8_t *)&trh->token_shost,
|
||||
(uint8_t *)&trh->token_dhost, l->llc_snap.ether_type) == 0))
|
||||
return;
|
||||
#endif /* NCARP > 0 */
|
||||
|
||||
switch (etype) {
|
||||
#ifdef INET
|
||||
case ETHERTYPE_IP:
|
||||
pktq = ip_pktq;
|
||||
break;
|
||||
|
||||
case ETHERTYPE_ARP:
|
||||
isr = NETISR_ARP;
|
||||
inq = &arpintrq;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
/*
|
||||
printf("token_input: unknown protocol 0x%x\n", etype);
|
||||
*/
|
||||
ifp->if_noproto++;
|
||||
goto dropanyway;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif /* INET */
|
||||
|
||||
default:
|
||||
/* printf("token_input: unknown dsap 0x%x\n", l->llc_dsap); */
|
||||
ifp->if_noproto++;
|
||||
#if defined(INET)
|
||||
dropanyway:
|
||||
#endif
|
||||
m_freem(m);
|
||||
return;
|
||||
}
|
||||
|
||||
if (__predict_true(pktq)) {
|
||||
if (__predict_false(!pktq_enqueue(pktq, m, 0))) {
|
||||
m_freem(m);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
IFQ_LOCK(inq);
|
||||
if (IF_QFULL(inq)) {
|
||||
IF_DROP(inq);
|
||||
IFQ_UNLOCK(inq);
|
||||
m_freem(m);
|
||||
} else {
|
||||
IF_ENQUEUE(inq, m);
|
||||
IFQ_UNLOCK(inq);
|
||||
schednetisr(isr);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform common duties while attaching to interface list
|
||||
*/
|
||||
void
|
||||
token_ifattach(struct ifnet *ifp, void *lla)
|
||||
{
|
||||
|
||||
ifp->if_type = IFT_ISO88025;
|
||||
ifp->if_hdrlen = 14;
|
||||
ifp->if_dlt = DLT_IEEE802;
|
||||
ifp->if_mtu = ISO88025_MTU;
|
||||
ifp->if_output = token_output;
|
||||
ifp->_if_input = token_input;
|
||||
ifp->if_broadcastaddr = tokenbroadcastaddr;
|
||||
|
||||
if_set_sadl(ifp, lla, ISO88025_ADDR_LEN, true);
|
||||
|
||||
bpf_attach(ifp, DLT_IEEE802, sizeof(struct token_header));
|
||||
}
|
||||
|
||||
void
|
||||
token_ifdetach(struct ifnet *ifp)
|
||||
{
|
||||
|
||||
bpf_detach(ifp);
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if_arp.c,v 1.289 2019/10/11 13:32:46 roy Exp $ */
|
||||
/* $NetBSD: if_arp.c,v 1.290 2020/01/19 20:00:37 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
|
||||
|
@ -68,7 +68,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.289 2019/10/11 13:32:46 roy Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.290 2020/01/19 20:00:37 thorpej Exp $");
|
||||
|
||||
#ifdef _KERNEL_OPT
|
||||
#include "opt_ddb.h"
|
||||
|
@ -105,7 +105,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.289 2019/10/11 13:32:46 roy Exp $");
|
|||
#include <net/ethertypes.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_token.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/if_llatbl.h>
|
||||
|
@ -126,7 +125,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.289 2019/10/11 13:32:46 roy Exp $");
|
|||
#if NFDDI > 0
|
||||
#include <net/if_fddi.h>
|
||||
#endif
|
||||
#include "token.h"
|
||||
#include "carp.h"
|
||||
#if NCARP > 0
|
||||
#include <netinet/ip_carp.h>
|
||||
|
@ -180,9 +178,6 @@ static void arp_dad_stop(struct ifaddr *);
|
|||
static void arp_dad_duplicated(struct ifaddr *, const struct sockaddr_dl *);
|
||||
|
||||
static void arp_init_llentry(struct ifnet *, struct llentry *);
|
||||
#if NTOKEN > 0
|
||||
static void arp_free_llentry_tokenring(struct llentry *);
|
||||
#endif
|
||||
|
||||
struct ifqueue arpintrq = {
|
||||
.ifq_head = NULL,
|
||||
|
@ -408,25 +403,12 @@ arp_init_llentry(struct ifnet *ifp, struct llentry *lle)
|
|||
{
|
||||
|
||||
switch (ifp->if_type) {
|
||||
#if NTOKEN > 0
|
||||
case IFT_ISO88025:
|
||||
lle->la_opaque = kmem_intr_alloc(sizeof(struct token_rif),
|
||||
KM_NOSLEEP);
|
||||
lle->lle_ll_free = arp_free_llentry_tokenring;
|
||||
default:
|
||||
/* Nothing. */
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if NTOKEN > 0
|
||||
static void
|
||||
arp_free_llentry_tokenring(struct llentry *lle)
|
||||
{
|
||||
|
||||
kmem_intr_free(lle->la_opaque, sizeof(struct token_rif));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Parallel to llc_rtrequest.
|
||||
*/
|
||||
|
@ -1237,34 +1219,6 @@ in_arpinput(struct mbuf *m)
|
|||
|
||||
KASSERT(ifp->if_sadl->sdl_alen == ifp->if_addrlen);
|
||||
|
||||
#if NTOKEN > 0
|
||||
/*
|
||||
* XXX uses m_data and assumes the complete answer including
|
||||
* XXX token-ring headers is in the same buf
|
||||
*/
|
||||
if (ifp->if_type == IFT_ISO88025) {
|
||||
struct token_header *trh;
|
||||
|
||||
trh = (struct token_header *)M_TRHSTART(m);
|
||||
if (trh->token_shost[0] & TOKEN_RI_PRESENT) {
|
||||
struct token_rif *rif;
|
||||
size_t riflen;
|
||||
|
||||
rif = TOKEN_RIF(trh);
|
||||
riflen = (ntohs(rif->tr_rcf) &
|
||||
TOKEN_RCF_LEN_MASK) >> 8;
|
||||
|
||||
if (riflen > 2 &&
|
||||
riflen < sizeof(struct token_rif) &&
|
||||
(riflen & 1) == 0) {
|
||||
rif->tr_rcf ^= htons(TOKEN_RCF_DIRECTION);
|
||||
rif->tr_rcf &= htons(~TOKEN_RCF_BROADCAST_MASK);
|
||||
memcpy(TOKEN_RIF_LLE(la), rif, riflen);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
KASSERT(sizeof(la->ll_addr) >= ifp->if_addrlen);
|
||||
memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen);
|
||||
la->la_flags |= LLE_VALID;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ip_carp.c,v 1.105 2020/01/16 12:56:40 kardel Exp $ */
|
||||
/* $NetBSD: ip_carp.c,v 1.106 2020/01/19 20:00:37 thorpej Exp $ */
|
||||
/* $OpenBSD: ip_carp.c,v 1.113 2005/11/04 08:11:54 mcbride Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -33,7 +33,7 @@
|
|||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.105 2020/01/16 12:56:40 kardel Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.106 2020/01/19 20:00:37 thorpej Exp $");
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
|
@ -77,9 +77,6 @@ __KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.105 2020/01/16 12:56:40 kardel Exp $")
|
|||
#if NFDDI > 0
|
||||
#include <net/if_fddi.h>
|
||||
#endif
|
||||
#if NTOKEN > 0
|
||||
#include <net/if_token.h>
|
||||
#endif
|
||||
|
||||
#ifdef INET
|
||||
#include <netinet/in.h>
|
||||
|
|
Loading…
Reference in New Issue