Commit Graph

445 Commits

Author SHA1 Message Date
yongari
1f49e276c3 Disable EEE(Energy Efficient Ethernet) for RTL8211F PHY.
It seems the EEE made RX MAC enter LPI(Low Power Idle) mode such
that dwc(4) was not able to receive packets.  Ideally dwc(4) should
be able to use EEE to save power during periods of low link
utilization(i.e. gating off clock).  Due to lack of dwc(4)
datasheet it's not easy to take required steps for EEE on LPI
enter/exit events.  Disabling EEE in PHY seems to be easy
workaround until dwc(4) supports EEE.

Updating EEE advertisement register on RTL8211F seems to have no
effect until reprogramming MII_ANAR, MII_100T2CR and MII_BMCR
with auto-negotiation. It's not clear whether it's related with
mii_phy_reset()'s BMCR_ISO handling for RTL8211F though.
It seems rgephy_reset() needs careful investigation for newer
RealTek PHYs.

Ganbold submitted working version based on NetBSD change and
tested lots of changes I made. Thanks a lot!

Submitted by:	ganbold (initial version)
In collaboration with:	ganbold
2015-12-03 05:27:39 +00:00
sbruno
349ab0fdc2 Add more BCM gigabit PHYs
Gleaned from a public header file. 5402 and 5404 look like they may be
used on embedded devices. 5478 and 5488 are switch PHYs. 5754 change is just
to note a product alias.

Differential Revision:	https://reviews.freebsd.org/D3338
Submitted by:	kevin.bowling@kev009.com
2015-09-04 17:48:19 +00:00
sbruno
ae94dee814 Add support for BCM5466 PHY
Differential Revision:	D3232
Submitted by:	kevin.bowling@kev009.com
2015-07-29 20:50:48 +00:00
marius
459d026485 Fix yet another comment typo in NetBSD rev. 1.16, missed when merging
it in r284447.

Submitted by:	yongari
Sponsored by:	genua mbh
2015-06-18 14:13:16 +00:00
marius
242a394657 Merge from NetBSD:
o rev. 1.10: Nuke trailing whitespace.
o rev. 1.15: Fix typo in comment.
o rev. 1.16: Add the following registers from IEEE 802.3-2009 Clause 22:
 - PSE control register (0x0b)
 - PSE status register (0x0c)
 - MMD access control register (0x0d)
 - MMD access address data register (0x0e)
o rev. 1.17 (comments only): The bit location of link ability is different
  between 1000Base-X and others (see Annex 28B.2 and 28D).
o rev. 1.18: Nuke dupe word.

Obtained from:	NetBSD
MFC after:	1 week
Sponsored by:	genua mbh
2015-06-16 13:27:06 +00:00
yongari
523536b18d Add another variant of BCM5708S controller to IBM HS21 workaround
list.

PR:		118238
MFC after:	2 weeks
2015-04-23 01:39:28 +00:00
glebius
b11c12b7a8 Instead of storing mii_media_table array index in ifm_data, determine
it in mii_phy_setmedia() functionally.

Sponsored by:	Nginx, Inc.
2015-04-21 09:39:48 +00:00
glebius
ca30243434 The comment on BMCR data in if_media entry is wrong. The ifm_data stores
the index array, not a value for BMCR register. In case of IFM_10_T there
could be either MII_MEDIA_10_T or MII_MEDIA_10_T_FDX, which are 1 and 2,
accordingly. Neither matches a valid BMCR value. My guessing is that this
write is harmless, since later mii_phy_setmedia() would write a proper
value there.

The code is here since the initial checkin. Note that case IFM_100_TX has
the same comment, but a proper value of BMCR_ISO is written. So, collapse
two cases into one, always writing there BMCR_ISO.

Sponsored by:	Nginx, Inc.
2015-04-21 08:54:14 +00:00
glebius
0e18235f79 Since xmphy doesn't call mii_phy_setmedia(), there is no reason to set ifm_data.
Sponsored by:	Nginx, Inc.
2015-04-21 06:59:40 +00:00
glebius
0bc72b5773 Since brgphy doesn't call mii_phy_setmedia(), there is no reason to
set any value to ifm_data.  If brgphy ever to call mii_phy_setmedia(),
then the value of BRGPHY_S1000 | BRGPHY_BMCR_FDX will trigger KASSERT.

While here, remove the obfuscating macro and wrap long lines.

Sponsored by:	Nginx, Inc.
2015-04-21 06:46:11 +00:00
yongari
b892ba51c7 Restore auto MDIX for RTL8211B and newer revision PHYs which was
broken in r279903.

Reported by:	john <> feith . com
2015-03-13 01:16:14 +00:00
yongari
73e95dae52 Add RTL8211F gigabit PHY support.
PR:	197265
MFC after:	2 weeks
2015-03-12 07:05:28 +00:00
kevlo
7dd0db5f00 Typo: ivalid -> invalid. 2015-01-21 09:01:48 +00:00
glebius
0af471d1f4 Clean some dead code. 2015-01-14 12:46:38 +00:00
glebius
ce8e636b33 Remove unused variables.
CID:	1262431
CID:	1262430
2015-01-13 06:56:04 +00:00
glebius
ea3ccc36bd - Remove unused variable.
- Wrap long line.
2015-01-13 06:22:55 +00:00
glebius
6bb1fe38e2 Remove unused fields. 2015-01-13 06:22:24 +00:00
glebius
360e8758b2 In miibus(4) drivers provide functions that allow to get NIC
driver name and NIC driver softc via the device(9) tree,
instead of going dirty through the ifnet(9) layer.

Differential Revision:	D1506
Reviewed by:		imp, jhb
2015-01-12 22:27:38 +00:00
glebius
1e3fe0af59 Use nitems(). 2015-01-09 12:26:08 +00:00
br
eccee0790e o Put () for p to avoid unexpected macro expansion
o style(9) fix

Submitted by:	Yonghyeon PYUN <pyunyh@gmail.com>
2014-12-10 11:35:10 +00:00
br
6d77d39adc Add driver for Micrel KSZ9021 Gigabit Ethernet Transceiver (PHY).
Sponsored by:	DARPA, AFRL
2014-10-21 09:14:16 +00:00
davide
e88bd26b3f Follow up to r225617. In order to maximize the re-usability of kernel code
in userland rename in-kernel getenv()/setenv() to kern_setenv()/kern_getenv().
This fixes a namespace collision with libc symbols.

Submitted by:   kmacy
Tested by:      make universe
2014-10-16 18:04:43 +00:00
glebius
b79f445942 Move rl(4) to dev/rl. 2014-09-19 10:32:20 +00:00
yongari
fda0960049 Do not blindly announce 1000baseT half-duplex capability in
autonegotiation.  Some controllers like cgem(4) do not support
half-duplex at gigabit speeds.
2014-09-04 01:04:37 +00:00
glebius
833eb3c331 It is actually possible to have if_t a typedef to non-void type,
and keep both converted to drvapi and non-converted drivers
compilable.

o Make if_t typedef to struct ifnet *.
o Remove shim functions.

Sponsored by:	Netflix
Sponsored by:	Nginx, Inc.
2014-08-31 12:48:13 +00:00
marcel
916c7006f5 Introduce a procedural interface to the ifnet structure. The new
interface allows the ifnet structure to be defined as an opaque
type in NIC drivers.  This then allows the ifnet structure to be
changed without a need to change or recompile NIC drivers.

Put differently, NIC drivers can be written and compiled once and
be used with different network stack implementations, provided of
course that those network stack implementations have an API and
ABI compatible interface.

This commit introduces the 'if_t' type to replace 'struct ifnet *'
as the type of a network interface. The 'if_t' type is defined as
'void *' to enable the compiler to perform type conversion to
'struct ifnet *' and vice versa where needed and without warnings.
The functions that implement the API are the only functions that
need to have an explicit cast.

The MII code has been converted to use the driver API to avoid
unnecessary code churn. Code churn comes from having to work with
both converted and unconverted drivers in correlation with having
callback functions that take an interface. By converting the MII
code first, the callback functions can be defined so that the
compiler will perform the typecasts automatically.

As soon as all drivers have been converted, the if_t type can be
redefined as needed and the API functions can be fix to not need
an explicit cast.

The immediate benefactors of this change are:
1.  Juniper Networks - The network stack implementation in Junos
    is entirely different from FreeBSD's one and this change
    allows Juniper to build "stock" NIC drivers that can be used
    in combination with both the FreeBSD and Junos stacks.
2.  FreeBSD - This change opens the door towards changing ifnet
    and implementing new features and optimizations in the network
    stack without it requiring a change in the many NIC drivers
    FreeBSD has.

Submitted by:	Anuranjan Shukla <anshukla@juniper.net>
Reviewed by:	glebius@
Obtained from:	Juniper Networks, Inc.
2014-06-02 17:54:39 +00:00
nwhitehorn
f76a2b11a6 Add definition for the Atheros 8021 gigabit PHY.
MFC after:	1 week
2013-11-06 16:28:26 +00:00
yongari
a105a877e2 Add support for new Gigabit PHY of RealTek.
I don't have a copy of data sheet so I'm not sure exact PHY model
name. Vendor's web page indicates RTL8251 is latest PHY so I used
the name. This PHY is used with RTL8168G, RTL8168GU and RTL8411B.
2013-10-29 05:14:38 +00:00
glebius
6c652d2b37 The MII layer shouldn't care about administrative status of an
interface. Make MII drivers forget about 'struct ifnet'.

Later plan is to provide an administrative downcall from ifnet
layer into drivers, to inform them about administrative status
change. If someone thinks that processing MII events for an
administratively down interface is a big problem, then drivers
would turn MII processing off.

The following MII drivers do evil things, like strcmp() on
driver name, so they still need knowledge of ifnet and thus
include if_var.h. They all need to be fixed:

sys/dev/mii/brgphy.c
sys/dev/mii/e1000phy.c
sys/dev/mii/ip1000phy.c
sys/dev/mii/jmphy.c
sys/dev/mii/nsphy.c
sys/dev/mii/rgephy.c
sys/dev/mii/truephy.c

Sponsored by:	Netflix
Sponsored by:	Nginx, Inc.
2013-10-26 18:40:17 +00:00
glebius
ff6e113f1b The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare
to this event, adding if_var.h to files that do need it. Also, include
all includes that now are included due to implicit pollution via if_var.h

Sponsored by:	Netflix
Sponsored by:	Nginx, Inc.
2013-10-26 17:58:36 +00:00
yongari
944e1304fb Recognize BCM5725C PHY. 2013-07-20 07:24:01 +00:00
yongari
e64efa5690 For RTL8211B or later PHYs, enable crossover detection and
auto-correction. This change makes re(4) establish a link with
a system using non-crossover UTP cable.

Tested by:	Michael BlackHeart < amdmiek <> gmail dot com >
2013-03-20 05:31:34 +00:00
yongari
f2a98a14f8 Recognize 5720S PHY and treat it as 5708S PHY.
Unfortunately 5720S uses 5709S PHY id so add a hack to detect 5720S
PHY by checking parent device name.  5720S PHY does not support 2500SX.

Tested by:	Geans Pin < geanspin <> broadcom dot com >
2012-12-20 05:02:12 +00:00
yongari
0bf55e8b80 For fiber PHYs, BRGPHY_MII_1000CTL register is not defined at all
so do not touch it.
2012-12-20 04:47:31 +00:00
dim
373133f0ad Remove duplicate const specifiers in many drivers (I hope I got all of
them, please let me know if not).  Most of these are of the form:

static const struct bzzt_type {
	[...list of members...]
} const bzzt_devs[] = {
	[...list of initializers...]
};

The second const is unnecessary, as arrays cannot be modified anyway,
and if the elements are const, the whole thing is const automatically
(e.g. it is placed in .rodata).

I have verified this does not change the binary output of a full kernel
build (except for build timestamps embedded in the object files).

Reviewed by:	yongari, marius
MFC after:	1 week
2012-11-05 19:16:27 +00:00
jmallett
5278b5f8d2 Recognize the Marvell 88E1145 Quad Gigabit PHY. 2012-10-29 00:17:12 +00:00
yongari
9fe7d51dd3 For 5717C/5719C/5720C and 57765 PHYs, do not perform any special
handling(jumbo, wire speed etc) in brgphy_reset().  Touching
BRGPHY_MII_AUXCTL register seems to confuse APE firmware such that
it couldn't establish a link.
2012-10-11 06:07:48 +00:00
kevlo
0782e3abd8 Remove unused variable ma. 2012-09-23 08:44:12 +00:00
gonzo
c4f4444c7b Merging of projects/armv6, part 5
- Driver for SMSC LAN95XX and LAN8710A ethernet controllers
- Driver for LAN8710A PHY

Submitted by:	Ben Gray, Damjan Marion, Tim Kientzle
2012-08-15 04:03:55 +00:00
hrs
c000efe273 Add support for 88E1116R.
Sponsored by:	Plat'Home, Co.,Ltd.
2012-07-28 21:59:12 +00:00
raj
2dad468ba7 More Cicada/Vitesse PHY ids.
Obtained from:	Semihalf
2012-05-25 15:05:17 +00:00
yongari
983da6ebaa Prefer RL_GMEDIASTAT register to RGEPHY_MII_SSR register to
extract a link status of PHY when parent driver is re(4).
RGEPHY_MII_SSR register does not seem to report correct PHY status
on some integrated PHYs used with re(4).
Unfortunately, RealTek PHYs have no additional information to
differentiate integrated PHYs from external ones so relying on PHY
model number is not enough to know that.  However, it seems
RGEPHY_MII_SSR register exists for external RealTek PHYs so
checking parent driver would be good indication to know which PHY
was used. In other words, for non-re(4) controllers, the PHY is
external one and its revision number is greater than or equal to 2.
This change fixes intermittent link UP/DOWN messages reported on
RTL8169 controller.

Also, mii_attach(9) is tried after setting interface name since
rgephy(4) have to know parent driver name.

PR:	kern/165509
2012-02-28 05:23:29 +00:00
yongari
a02033c725 Add Seeq Technology 80220 PHY support to smcphy(4). This PHY is
found on Adaptec AIC-6915 Starfire ethernet controller.
While here, use status register to know resolved speed/duplex.
With this change, sf(4) correctly reports speed/duplex of
established link.

Reviewed by:	marius
2012-02-23 01:20:21 +00:00
marius
041b33e286 Probe the National DP83849, which is a dual-port version of the PHYTER.
Obtained from:	NetBSD
2012-02-19 12:25:58 +00:00
marius
69ca78c3a9 - Probe BCM57780.
- In case the parent is bge(4), don't set the Jumbo frame settings unless
  the MAC actually is Jumbo capable as otherwise the PHY might not have the
  corresponding registers implemented. This is also in line with what the
  Linux tg3 driver does.

PR:		165032
Submitted by:	Alexander Milanov
Obtained from:	OpenBSD
MFC after:	3 days
2012-02-19 12:09:17 +00:00
marius
e9f3f59155 - In mii_attach(9) just set the driver for a newly added miibus(4) instance
before calling bus_enumerate_hinted_children(9) (which is the minimum for
  this to work) instead of fully probing it so later on we can just call
  bus_generic_attach(9) on the parent of the miibus(4) instance. The latter
  is necessary in order to work around what seems to be a bzzarre race in
  newbus affecting a few machines since r227687, causing no driver being
  probed for the newly added miibus(4) instance. Presumably this is the
  same race that was the motivation for the work around done in r215348.
  Reported and tested by: yongari
- Revert the removal of a static in r221913 in order to help compilers to
  produce more optimal code.
2011-12-05 21:38:45 +00:00
marius
7deb56f7c2 Wrap BCM5785 in #ifdef notyet for now. According to yongari@ there are
issues probably needing workarounds in bge(4) when brgphy(4) handles this
PHY. Letting ukphy(4) handle it instead results in a working configuration,
although likely with performance penalties.
2011-11-23 22:05:44 +00:00
marius
0f30a4cf89 Use DEVMETHOD_END. 2011-11-23 20:27:26 +00:00
marius
b1b604daf1 Probe the BCM5785.
Obtained from:	NetBSD
2011-11-23 20:09:34 +00:00
marius
2a720a2d11 Sync with NetBSD rev. 1.104
Obtained from:	NetBSD
2011-11-23 20:08:56 +00:00