Home | History | Annotate | Download | only in mii
History log of /src/sys/dev/mii/icsphy.c
RevisionDateAuthorComments
 1.56  15-Mar-2020  thorpej Define and implement a locking protocol for the ifmedia / mii layers:
- MP-safe drivers provide a mutex to ifmedia that is used to serialize
access to media-related structures / hardware regsiters. Converted
drivers use the new ifmedia_init_with_lock() function for this. The
new name is provided to ease the transition.
- Un-converted drivers continue to call ifmedia_init(), which will supply
a compatibility lock to be used instead. Several media-related entry
points must be aware of this compatibility lock, and are able to acquire
it recursively a limited number of times, if needed. This is a SPIN
mutex with priority IPL_NET.
- This same lock is used to serialize access to PHY registers and other
MII-related data structures.

The PHY drivers are modified to acquire and release the lock, as needed,
and assert the lock is held as a diagnostic aid.

The "usbnet" framework has had an overhaul of its internal locking
protocols to fit in with the media / mii changes, and the drivers adapted.

USB wifi drivers have been changed to provide their own adaptive mutex
to the ifmedia later via a new ieee80211_media_init_with_lock() function.
This is required because the USB drivers need an adaptive mutex.

Besised "usbnet", a few other drivers are converted: vmx, wm, ixgbe / ixv.

mcx also now calls ifmedia_init_with_lock() because it needs to also use
an adaptive mutex. The mcx driver still needs to be fully converted to
NET_MPSAFE.
 1.55  27-Nov-2019  msaitoh - Simplify sc->mii_anegticks setting. Same as FreeBSD.

Don't set the default value not in the attach function. Instead, set the
default value (MII_ANEGTICKS) first in the beginning of the
mii_phy_add_media(). The function already has the code to change the value to
MII_ANEGTICKS_GIGE if it's gigabit capable.

- Remove extra pmf_device_register() call. It's done in mii_phy_add_media().
 1.54  25-Mar-2019  msaitoh KNF. No functional change.
 1.53  24-Feb-2019  christos use a macro to tidy up the phydesc array initialization, from FreeBSD
 1.52  13-Feb-2019  msaitoh Add ICS1893C support from FreeBSD.
 1.51  22-Jan-2019  msaitoh Change MII PHY read/write API from:

int (*mii_readreg_t)(device_t, int, int);
void (*mii_writereg_t)(device_t, int, int, int);
to:

int (*mii_readreg_t)(device_t, int, int, uint16_t *);
int (*mii_writereg_t)(device_t, int, int, uint16_t);

Now we can test if a read/write operation failed or not by the return value.

In 802.3 spec says that the PHY shall not respond to read/write transaction
to the unimplemented register(22.2.4.3). Detecting timeout can be used to
check whether a register is implemented or not (if the register conforms to
the spec). ukphy(4) can be used this for MII_MMDACR and MII_MMDAADR.

Note that I noticed that the following code do infinite loop in the
read/wirte function. If it accesses unimplemented PHY register, it will hang.
It should be fixed:

arm/at91/at91emac.c
arm/ep93xx/epe.c
arm/omap/omapl1x_emac.c
mips/ralink/ralink_eth.c
arch/powerpc/booke/dev/pq3etsec.c(read)
dev/cadence/if_cemac.c <- hkenken
dev/ic/lan9118.c


Tested with the following device:

axe+ukphy
axe+rgephy
axen+rgephy (tested by Andrius V)
wm+atphy
wm+ukphy
wm+igphy
wm+ihphy
wm+makphy
sk+makphy
sk+brgphy
sk+gentbi
msk+makphy
sip+icsphy
sip+ukphy
re+rgephy
bge+brgphy
bnx+brgphy
gsip+gphyter
rtk+rlphy
fxp+inphy (tested by Andrius V)
tlp+acphy
ex+exphy
epic+qsphy
vge+ciphy (tested by Andrius V)
vr+ukphy (tested by Andrius V)
vte+ukphy (tested by Andrius V)

Not tested (MAC):
arm:at91emac
arm:cemac
arm:epe
arm:geminigmac
arm:enet
arm:cpsw
arm:emac(omac)
arm:emac(sunxi)
arm:npe
evbppc:temac
macppc:bm
macppc:gm
mips:aumac
mips:ae
mips:cnmac
mips:reth
mips:sbmac
playstation2:smap
powerpc:tsec
powerpc:emac(ibm4xx)
sgimips:mec
sparc:be
sf
ne(ax88190, dl10019)
awge
ep
gem
hme
smsh
mtd
sm
age
alc
ale
bce
cas
et
jme
lii
nfe
pcn
ste
stge
tl
xi
aue
mue
smsc
udav
url

Not tested (PHY):
amhphy
bmtphy
dmphy
etphy
glxtphy
ikphy
iophy
lxtphy
nsphyter
pnaphy
rdcphy
sqphy
tlphy
tqphy
urlphy
 1.50  07-Jul-2016  msaitoh branches: 1.50.16; 1.50.18;
KNF. Remove extra spaces. No functional change.
 1.49  16-Jun-2014  msaitoh branches: 1.49.4;
IFM_FDX and IFM_HDX use different bit, so set IFM_HDX bit if it's not full
duplex. For many drivers, it recognize half duplex if IFM_FDX isn't set,
but not for others. Same as {Free|Open}BSD.
 1.48  19-Oct-2009  bouyer branches: 1.48.18; 1.48.22; 1.48.36;
Remove closes 3 & 4 from my licence. Lots of thanks to Soren Jacobsen
for the booring work !
 1.47  17-Nov-2008  dyoung Reduce code duplication: most PHY drivers call mii_phy_add_media()
when they attach to the device tree, so call pmf_device_register(9)
once there instead of once in more than twenty drivers.
 1.46  04-May-2008  xtraeme branches: 1.46.6; 1.46.8;
device_t/softc split for all mii(4) devices, and other related
cosmetic changes.
 1.45  28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.44  08-Apr-2008  cegger branches: 1.44.2; 1.44.4;
use aprint_*_dev and device_xname
 1.43  29-Dec-2007  dyoung branches: 1.43.6;
Remove the device_is_active() check from each individual PHY's
service routine. Add a wrapper for PHY_SERVICE(), called phy_service(),
and check device_is_active() there. Make the mii_*() routines call
the PHY service routines thorugh phy_service() instead of PHY_SERVICE().

In mii_phy_resume(), restore a PHY's state after resetting it by
sending a MII_MEDIACHG command. This change makes bnx(4) resume
more reliably and more quickly; it should help other NICs to resume,
too, if they attach PHYs through MII.
 1.42  09-Dec-2007  jmcneill branches: 1.42.2;
Merge jmcneill-pm branch.
 1.41  16-Nov-2006  christos branches: 1.41.22; 1.41.24; 1.41.30; 1.41.34; 1.41.36;
- don't hardcode 5, 10 define and use MII_ANEGTICKS{,_GIGE}
- instead of != limit, use <= limit (conservative)
 1.40  16-Nov-2006  christos __unused removal on arguments; approved by core.
 1.39  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.38  29-Mar-2006  thorpej branches: 1.38.8; 1.38.10;
Use device_private().
 1.37  20-Feb-2006  thorpej branches: 1.37.2; 1.37.4; 1.37.6;
Use device_is_active() rather than testing dv_flags for DVF_ACTIVE
directly.
 1.36  11-Dec-2005  christos branches: 1.36.2; 1.36.4; 1.36.6;
merge ktrace-lwp.
 1.35  27-Feb-2005  perry branches: 1.35.4;
nuke trailing whitespace
 1.34  23-Aug-2004  thorpej branches: 1.34.4; 1.34.6;
Make use of static.
 1.33  01-Jul-2003  msaitoh branches: 1.33.2;
- last commit (rev. 1.32) fixes icsphy_reset()'s problem. ICSphys don't
restart auto negotiation, so it kick.
- add comment in icsphy_reset()
 1.32  01-Jul-2003  msaitoh Add ICS1889 and 1892
 1.31  29-Apr-2003  thorpej Use aprint*().
 1.30  02-Oct-2002  thorpej Add trailing ; to CFATTACH_DECL.
 1.29  30-Sep-2002  thorpej Use CFATTACH_DECL().
 1.28  27-Sep-2002  thorpej Declare all cfattach structures const.
 1.27  03-Jul-2002  simonb Don't include <malloc.h> - no memory management style functions are use
in any of the MII drivers.
 1.26  25-Mar-2002  thorpej branches: 1.26.2;
Get flags passed down to PHY drivers correctly. This was done on
an adhoc basis in a couple of PHY drivers, this fixes it more generally.

Per a discussion w/ Cliff Neighbors <cliff@allegronetworks.com>.
 1.25  10-Feb-2002  wiz Match ICS 1893.
 1.24  13-Nov-2001  lukem add RCSID
 1.23  25-Aug-2001  thorpej ANSI'ify.
 1.22  02-Jun-2001  thorpej branches: 1.22.2;
Make PHY matching all table-driven.
 1.21  31-May-2001  thorpej Make the number of ticks between auto-negotiation tries PHY-specific,
and default every PHY to 5 seconds (what we used before). If we find
Gig-E media on a PHY, bump it to 10 seconds, since it can take 5
seconds just to negotiate a Gig-E link.
 1.20  28-Mar-2001  drochner update for miidevs changes
 1.19  04-Jul-2000  thorpej branches: 1.19.2;
Restructure the PHY entry points to use a structure of entry points
instead of discrete function pointers, and extend this to include
a "reset" entry point. Make sure any PHY-specific reset routine is
always used, and provide one for the LXT-970 which disables MII
interrupts (as is done for a few other PHYs we have drivers for).
 1.18  06-Mar-2000  thorpej branches: 1.18.4;
Factor out the tick handling code into a common function, and send
rt_ifmsg's when the link speed or link status changes.
 1.17  02-Feb-2000  thorpej Let mii_phy_setmedia() handle the IFM_AUTO case, too.
 1.16  02-Feb-2000  thorpej Make PHY drivers provide a pointer to their status routine, and add
a generic mii_phy_status() that calls back into the PHY. It doesn't
do anything interesting yet, but it will soon.
 1.15  02-Feb-2000  thorpej Don't dry to diving MIIF_NOISOLATE in the PHY drivers. Instead, pass
flags down from the parent to child vi mii_attach().
 1.14  02-Feb-2000  thorpej Bring some order to the chaos which was the MII code function naming
"conventions".
 1.13  27-Jan-2000  thorpej Add detachment support to the MII layer.
 1.12  12-Nov-1999  thorpej Add mii_down(), which is used by MAC drivers to inform PHYs that the
interface is now down. PHYs use this to cancel pending asynchronous
operations.
 1.11  03-Nov-1999  thorpej Clean up the code that adds media a little, and make media selection
table-driven in preparation for some other changes to be made.
 1.10  14-May-1999  drochner branches: 1.10.2; 1.10.4; 1.10.8;
use the new "xx" prefixed OUIs because the mapping to the ID register
bits differs from the MII_OUI() way
 1.9  23-Apr-1999  thorpej Implement asynchronous autonegotiation when driven by the MII tick
(one-second clock). Prevents .5s delays every 5 seconds when the interface
is up but there is no link. Fixes PR 7361.
 1.8  05-Nov-1998  thorpej branches: 1.8.6;
Common code for media-from-bmcr.
 1.7  05-Nov-1998  thorpej In the status routine, always use the media selected in the BMCR if
autonegotiation is not enabled. This is more reliable on many PHYs,
and requires fewer register reads.
 1.6  05-Nov-1998  thorpej Place the essentially common "ticks" and "active" members into the
mii_softc (generic phy goo), and just switch all of the PHY drivers
(except tlphy, which really does have special stuff) to use an mii_softc
instead of a private one.
 1.5  04-Nov-1998  thorpej Return a higher-priority match than 1. These are specific drivers. This
allows for a "generic unknown PHY" driver to be implemented.
 1.4  04-Nov-1998  thorpej Factor out the common reset code. Use the NOISOLATE flags as appropriate
to prevent a PHY from being isolated in the event the MAC can't deal with
this. (3Com 3c905B-TX, and Intel i82557).
 1.3  04-Nov-1998  thorpej Factor out some common code from all the PHY drivers (autonegotiation, for
now.)
 1.2  04-Nov-1998  thorpej Define and use generic PHY read/write reg macros.
 1.1  02-Nov-1998  thorpej Driver for the Integrated Circuit Systems ICS1980 10/100 PHY.
 1.8.6.1  23-Apr-1999  perry branches: 1.8.6.1.2;
pullup 1.8->1.9 (thorpej): Fix PR7361
 1.8.6.1.2.1  21-Jun-1999  thorpej Sync w/ -current.
 1.10.8.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.10.4.1  15-Nov-1999  fvdl Sync with -current
 1.10.2.2  21-Apr-2001  bouyer Sync with HEAD
 1.10.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.18.4.1  04-Jul-2000  thorpej Update from trunk:
Restructure the PHY entry points to use a structure of entry points
instead of discrete function pointers, and extend this to include
a "reset" entry point. Make sure any PHY-specific reset routine is
always used, and provide one for the LXT-970 which disables MII
interrupts (as is done for a few other PHYs we have drivers for).
 1.19.2.8  18-Oct-2002  nathanw Catch up to -current.
 1.19.2.7  01-Aug-2002  nathanw Catch up to -current.
 1.19.2.6  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.19.2.5  28-Feb-2002  nathanw Catch up to -current.
 1.19.2.4  14-Nov-2001  nathanw Catch up to -current.
 1.19.2.3  21-Sep-2001  nathanw Catch up to -current.
 1.19.2.2  21-Jun-2001  nathanw Catch up to -current.
 1.19.2.1  09-Apr-2001  nathanw Catch up with -current.
 1.22.2.6  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.22.2.5  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.22.2.4  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.22.2.3  16-Mar-2002  jdolecek Catch up with -current.
 1.22.2.2  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.22.2.1  13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.26.2.1  15-Jul-2002  gehenna catch up with -current.
 1.33.2.4  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.33.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.33.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.33.2.1  25-Aug-2004  skrll Sync with HEAD.
 1.34.6.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.34.4.1  29-Apr-2005  kent sync with -current
 1.35.4.3  21-Jan-2008  yamt sync with head
 1.35.4.2  30-Dec-2006  yamt sync with head.
 1.35.4.1  21-Jun-2006  yamt sync with head.
 1.36.6.1  22-Apr-2006  simonb Sync with head.
 1.36.4.1  09-Sep-2006  rpaulo sync with head
 1.36.2.1  01-Mar-2006  yamt sync with head.
 1.37.6.1  31-Mar-2006  tron Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
 1.37.4.1  19-Apr-2006  elad sync with head.
 1.37.2.1  01-Apr-2006  yamt sync with head.
 1.38.10.2  10-Dec-2006  yamt sync with head.
 1.38.10.1  22-Oct-2006  yamt sync with head
 1.38.8.1  18-Nov-2006  ad Sync with head.
 1.41.36.1  11-Dec-2007  yamt sync with head.
 1.41.34.1  26-Dec-2007  ad Sync with head.
 1.41.30.1  18-Feb-2008  mjf Sync with HEAD.
 1.41.24.1  09-Jan-2008  matt sync with HEAD
 1.41.22.2  08-Dec-2007  jmcneill Rename pnp(9) -> pmf(9), as requested by many.
 1.41.22.1  27-Nov-2007  joerg Register MII PHY drives with the PM framework. Nothing to do on suspend,
just reset the PHY on resume.
 1.42.2.1  02-Jan-2008  bouyer Sync with HEAD
 1.43.6.2  17-Jan-2009  mjf Sync with HEAD.
 1.43.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.44.4.3  11-Mar-2010  yamt sync with head
 1.44.4.2  04-May-2009  yamt sync with head.
 1.44.4.1  16-May-2008  yamt sync with head.
 1.44.2.1  18-May-2008  yamt sync with head.
 1.46.8.1  19-Jan-2009  skrll Sync with HEAD.
 1.46.6.1  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.48.36.1  10-Aug-2014  tls Rebase.
 1.48.22.2  03-Dec-2017  jdolecek update from HEAD
 1.48.22.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.48.18.1  09-Nov-2014  martin Pull up following revision(s) (requested by msaitoh in ticket #1189):
sys/dev/pci/if_wm.c: revision 1.270
sys/dev/mii/inphy.c: revision 1.53
sys/dev/mii/glxtphy.c: revision 1.24
sys/dev/mii/tlphy.c: revision 1.62
sys/dev/mii/iophy.c: revision 1.37
sys/dev/mii/brgphy.c: revision 1.70
sys/dev/mii/ihphy.c: revision 1.8
sys/dev/mii/bmtphy.c: revision 1.31
sys/dev/mii/urlphy.c: revision 1.30
sys/dev/mii/makphy.c: revision 1.40
sys/dev/mii/qsphy.c: revision 1.48
sys/dev/mii/igphy.c: revision 1.23
sys/dev/mii/nsphy.c: revision 1.58
sys/dev/mii/mvphy.c: revision 1.10
sys/dev/pci/if_txp.c: revision 1.41
sys/dev/mii/nsphy.c: revision 1.59
sys/dev/mii/rlphy.c: revision 1.28
sys/dev/mii/icsphy.c: revision 1.49
sys/dev/mii/rlphy.c: revision 1.29
sys/dev/mii/lxtphy.c: revision 1.49
sys/dev/mii/ciphyreg.h: revision 1.5
sys/dev/mii/nsphyter.c: revision 1.38
sys/dev/mii/sqphy.c: revision 1.50
sys/dev/mii/gentbi.c: revision 1.26
sys/dev/mii/gentbi.c: revision 1.27
sys/dev/mii/tqphy.c: revision 1.39
sys/dev/mii/ikphy.c: revision 1.10
sys/dev/mii/dmphy.c: revision 1.35
sys/dev/mii/amhphy.c: revision 1.20
sys/dev/mii/acphy.c: revision 1.24
sys/dev/mii/ciphy.c: revision 1.25
sys/dev/mii/brgphyreg.h: revision 1.8
sys/dev/mii/ukphy_subr.c: revision 1.12
sys/dev/ic/rtl80x9.c: revision 1.16
sys/arch/mips/adm5120/dev/if_admsw.c: revision 1.12
sys/dev/pci/if_kse.c: revision 1.28
sys/dev/mii/ukphy_subr.c: revision 1.13
sys/dev/mii/mii.h: revision 1.18
sys/dev/mii/gphyter.c: revision 1.29
No functional change:
- Fix typo.
- Remove trailing white spaces.
- Capitalize comments.
- Tabify.
- KNF.
IFM_FDX and IFM_HDX use different bit, so set IFM_HDX bit if it's not full
duplex. For many drivers, it recognize half duplex if IFM_FDX isn't set,
but not for others. Same as {Free|Open}BSD.
 1.49.4.1  09-Jul-2016  skrll Sync with HEAD
 1.50.18.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.50.18.1  10-Jun-2019  christos Sync with HEAD
 1.50.16.1  26-Jan-2019  pgoyette Sync with HEAD

RSS XML Feed