| History log of /src/sys/dev/mii/exphy.c |
| Revision | | Date | Author | Comments |
| 1.58 |
| 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.57 |
| 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.56 |
| 25-Mar-2019 |
msaitoh | KNF. No functional change.
|
| 1.55 |
| 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.54 |
| 07-Jul-2016 |
msaitoh | branches: 1.54.16; 1.54.18; KNF. Remove extra spaces. No functional change.
|
| 1.53 |
| 09-Jun-2013 |
msaitoh | branches: 1.53.10; Don't "return" but "break" in MII_TICK when the interface isn't doing autonegotiaton or the link is up to update the status.
|
| 1.52 |
| 19-Oct-2009 |
bouyer | branches: 1.52.12; 1.52.22; Remove closes 3 & 4 from my licence. Lots of thanks to Soren Jacobsen for the booring work !
|
| 1.51 |
| 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.50 |
| 04-May-2008 |
xtraeme | branches: 1.50.6; 1.50.8; device_t/softc split for all mii(4) devices, and other related cosmetic changes.
|
| 1.49 |
| 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
| 1.48 |
| 14-Apr-2008 |
spz | branches: 1.48.2; 1.48.4; pretty up if_ex: pmf'ify, device split, and improve printing a bit too.
Reviewed and function-tested on if_ex_cardbus by cube (thanks). Function-tested on if_ex_pci by myself.
|
| 1.47 |
| 08-Apr-2008 |
cegger | use aprint_*_dev and device_xname
|
| 1.46 |
| 29-Dec-2007 |
dyoung | branches: 1.46.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.45 |
| 09-Dec-2007 |
jmcneill | branches: 1.45.2; Merge jmcneill-pm branch.
|
| 1.44 |
| 16-Nov-2006 |
christos | branches: 1.44.22; 1.44.24; 1.44.30; 1.44.34; 1.44.36; - don't hardcode 5, 10 define and use MII_ANEGTICKS{,_GIGE} - instead of != limit, use <= limit (conservative)
|
| 1.43 |
| 16-Nov-2006 |
christos | __unused removal on arguments; approved by core.
|
| 1.42 |
| 12-Oct-2006 |
christos | - sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
| 1.41 |
| 29-Mar-2006 |
thorpej | branches: 1.41.8; 1.41.10; Use device_private().
|
| 1.40 |
| 28-Feb-2006 |
kleink | branches: 1.40.2; 1.40.4; 1.40.6; Reduce previous (!is(...) != 0) to (!is(...)).
|
| 1.39 |
| 27-Feb-2006 |
thorpej | Use device_is_a().
|
| 1.38 |
| 20-Feb-2006 |
thorpej | Use device_is_active() rather than testing dv_flags for DVF_ACTIVE directly.
|
| 1.37 |
| 11-Dec-2005 |
christos | branches: 1.37.2; 1.37.4; 1.37.6; merge ktrace-lwp.
|
| 1.36 |
| 23-Aug-2004 |
thorpej | branches: 1.36.12; Make use of static.
|
| 1.35 |
| 29-Apr-2003 |
thorpej | branches: 1.35.2; Use aprint*().
|
| 1.34 |
| 02-Oct-2002 |
thorpej | Add trailing ; to CFATTACH_DECL.
|
| 1.33 |
| 30-Sep-2002 |
thorpej | Use CFATTACH_DECL().
|
| 1.32 |
| 27-Sep-2002 |
thorpej | Declare all cfattach structures const.
|
| 1.31 |
| 27-Sep-2002 |
thorpej | Rather than referencing the cfdriver directly in the cfdata entries, instead use a string naming the driver. The cfdriver is then looked up in a list which is built at run-time.
|
| 1.30 |
| 03-Jul-2002 |
simonb | Don't include <malloc.h> - no memory management style functions are use in any of the MII drivers.
|
| 1.29 |
| 25-Mar-2002 |
thorpej | branches: 1.29.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.28 |
| 13-Nov-2001 |
lukem | add RCSID
|
| 1.27 |
| 25-Aug-2001 |
thorpej | ANSI'ify.
|
| 1.26 |
| 31-May-2001 |
thorpej | branches: 1.26.2; 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.25 |
| 04-Jul-2000 |
thorpej | branches: 1.25.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.24 |
| 06-Mar-2000 |
thorpej | branches: 1.24.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.23 |
| 02-Feb-2000 |
thorpej | Let mii_phy_setmedia() handle the IFM_AUTO case, too.
|
| 1.22 |
| 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.21 |
| 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.20 |
| 02-Feb-2000 |
thorpej | Bring some order to the chaos which was the MII code function naming "conventions".
|
| 1.19 |
| 27-Jan-2000 |
thorpej | Add detachment support to the MII layer.
|
| 1.18 |
| 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.17 |
| 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.16 |
| 23-Apr-1999 |
thorpej | branches: 1.16.2; 1.16.4; 1.16.8; 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.15 |
| 05-Nov-1998 |
thorpej | branches: 1.15.6; 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.14 |
| 04-Nov-1998 |
thorpej | Routines common between the Uknown PHY driver (forthcoming) and other PHY drivers. This file has ukphy_status(), which is what PHY drivers should use if media detection is done by decoding NWay.
|
| 1.13 |
| 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.12 |
| 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.11 |
| 04-Nov-1998 |
thorpej | Factor out some common code from all the PHY drivers (autonegotiation, for now.)
|
| 1.10 |
| 04-Nov-1998 |
thorpej | Define and use generic PHY read/write reg macros.
|
| 1.9 |
| 03-Nov-1998 |
thorpej | 3Com PHY can't be isolated, so don't allow IFM_NONE.
|
| 1.8 |
| 02-Nov-1998 |
thorpej | When doing a media change service request, use the media word from the current ifmedia_entry, not from the user-supplied media word. The user supplied media word may not necessarily match e.g. instance (if the parent MAC driver is intentionally ignoring instance if its expecting multiple PHYs with non-overlapping media, e.g. TI ThunderLAN) the media word we are actually switching to.
Since PHY drivers use `instance' to determine if they should isolate themselves, the ThunderLAN PHY was sometimes being incorrectly isolated when in fact the user attempted to select that PHY (for e.g. BNC operation).
|
| 1.7 |
| 23-Oct-1998 |
thorpej | Don't print the revision of the 3c905B-TX's internal PHY; it's meaningless.
|
| 1.6 |
| 23-Oct-1998 |
thorpej | Make sure the parent is an `ex'. The 3c905B-TX's internal PHY isn't the only one w/ non-existent ID registers. SIGH.
|
| 1.5 |
| 28-Aug-1998 |
fvdl | Add ETHER|NONE to default capabilities, or we'll panic when attaching the forthcoming ex driver.
|
| 1.4 |
| 12-Aug-1998 |
thorpej | Make a variable name reflect a register name.
|
| 1.3 |
| 12-Aug-1998 |
thorpej | If autonegotiation is enabled in the BMSR, and the BMCR doens't claim that it has completed, report "none" as the active media type.
|
| 1.2 |
| 12-Aug-1998 |
thorpej | Ugh, don't print out "autonegotiation failed to complete" if it did. We get these once a second if we're in auto mode, the interface is up, and there's no carrier.
|
| 1.1 |
| 12-Aug-1998 |
thorpej | Driver for the 3Com internal PHY, found on 3c905B-TX cards (and maybe some 3c905-TX?). Partially from Frank van der Linden.
|
| 1.15.6.1 |
| 23-Apr-1999 |
perry | branches: 1.15.6.1.2; pullup 1.15->1.16 (thorpej): Fix PR7361
|
| 1.15.6.1.2.1 |
| 21-Jun-1999 |
thorpej | Sync w/ -current.
|
| 1.16.8.1 |
| 27-Dec-1999 |
wrstuden | Pull up to last week's -current.
|
| 1.16.4.1 |
| 15-Nov-1999 |
fvdl | Sync with -current
|
| 1.16.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.24.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.25.2.6 |
| 18-Oct-2002 |
nathanw | Catch up to -current.
|
| 1.25.2.5 |
| 01-Aug-2002 |
nathanw | Catch up to -current.
|
| 1.25.2.4 |
| 01-Apr-2002 |
nathanw | Catch up to -current. (CVS: It's not just a program. It's an adventure!)
|
| 1.25.2.3 |
| 14-Nov-2001 |
nathanw | Catch up to -current.
|
| 1.25.2.2 |
| 21-Sep-2001 |
nathanw | Catch up to -current.
|
| 1.25.2.1 |
| 21-Jun-2001 |
nathanw | Catch up to -current.
|
| 1.26.2.5 |
| 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.26.2.4 |
| 06-Sep-2002 |
jdolecek | sync kqueue branch with HEAD
|
| 1.26.2.3 |
| 23-Jun-2002 |
jdolecek | catch up with -current on kqueue branch
|
| 1.26.2.2 |
| 10-Jan-2002 |
thorpej | Sync kqueue branch with -current.
|
| 1.26.2.1 |
| 13-Sep-2001 |
thorpej | Update the kqueue branch to HEAD.
|
| 1.29.2.1 |
| 15-Jul-2002 |
gehenna | catch up with -current.
|
| 1.35.2.3 |
| 21-Sep-2004 |
skrll | Fix the sync with head I botched.
|
| 1.35.2.2 |
| 18-Sep-2004 |
skrll | Sync with HEAD.
|
| 1.35.2.1 |
| 25-Aug-2004 |
skrll | Sync with HEAD.
|
| 1.36.12.3 |
| 21-Jan-2008 |
yamt | sync with head
|
| 1.36.12.2 |
| 30-Dec-2006 |
yamt | sync with head.
|
| 1.36.12.1 |
| 21-Jun-2006 |
yamt | sync with head.
|
| 1.37.6.1 |
| 22-Apr-2006 |
simonb | Sync with head.
|
| 1.37.4.1 |
| 09-Sep-2006 |
rpaulo | sync with head
|
| 1.37.2.1 |
| 01-Mar-2006 |
yamt | sync with head.
|
| 1.40.6.1 |
| 31-Mar-2006 |
tron | Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
|
| 1.40.4.1 |
| 19-Apr-2006 |
elad | sync with head.
|
| 1.40.2.1 |
| 01-Apr-2006 |
yamt | sync with head.
|
| 1.41.10.2 |
| 10-Dec-2006 |
yamt | sync with head.
|
| 1.41.10.1 |
| 22-Oct-2006 |
yamt | sync with head
|
| 1.41.8.1 |
| 18-Nov-2006 |
ad | Sync with head.
|
| 1.44.36.1 |
| 11-Dec-2007 |
yamt | sync with head.
|
| 1.44.34.1 |
| 26-Dec-2007 |
ad | Sync with head.
|
| 1.44.30.1 |
| 18-Feb-2008 |
mjf | Sync with HEAD.
|
| 1.44.24.1 |
| 09-Jan-2008 |
matt | sync with HEAD
|
| 1.44.22.2 |
| 08-Dec-2007 |
jmcneill | Rename pnp(9) -> pmf(9), as requested by many.
|
| 1.44.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.45.2.1 |
| 02-Jan-2008 |
bouyer | Sync with HEAD
|
| 1.46.6.2 |
| 17-Jan-2009 |
mjf | Sync with HEAD.
|
| 1.46.6.1 |
| 02-Jun-2008 |
mjf | Sync with HEAD.
|
| 1.48.4.3 |
| 11-Mar-2010 |
yamt | sync with head
|
| 1.48.4.2 |
| 04-May-2009 |
yamt | sync with head.
|
| 1.48.4.1 |
| 16-May-2008 |
yamt | sync with head.
|
| 1.48.2.1 |
| 18-May-2008 |
yamt | sync with head.
|
| 1.50.8.1 |
| 19-Jan-2009 |
skrll | Sync with HEAD.
|
| 1.50.6.1 |
| 13-Dec-2008 |
haad | Update haad-dm branch to haad-dm-base2.
|
| 1.52.22.2 |
| 03-Dec-2017 |
jdolecek | update from HEAD
|
| 1.52.22.1 |
| 23-Jun-2013 |
tls | resync from head
|
| 1.52.12.1 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
| 1.53.10.1 |
| 09-Jul-2016 |
skrll | Sync with HEAD
|
| 1.54.18.2 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
| 1.54.18.1 |
| 10-Jun-2019 |
christos | Sync with HEAD
|
| 1.54.16.1 |
| 26-Jan-2019 |
pgoyette | Sync with HEAD
|