#
331722 |
|
29-Mar-2018 |
eadler |
Revert r330897:
This was intended to be a non-functional change. It wasn't. The commit message was thus wrong. In addition it broke arm, and merged crypto related code.
Revert with prejudice.
This revert skips files touched in r316370 since that commit was since MFCed. This revert also skips files that require $FreeBSD$ property changes.
Thank you to those who helped me get out of this mess including but not limited to gonzo, kevans, rgrimes.
Requested by: gjb (re)
|
#
330897 |
|
14-Mar-2018 |
eadler |
Partial merge of the SPDX changes
These changes are incomplete but are making it difficult to determine what other changes can/should be merged.
No objections from: pfg
|
#
315221 |
|
14-Mar-2017 |
pfg |
MFC r313982, r314068: sys: Replace zero with NULL for pointers.
Found with: devel/coccinelle
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
298955 |
|
03-May-2016 |
pfg |
sys/dev: minor spelling fixes.
Most affect comments, very few have user-visible effects.
|
#
298433 |
|
21-Apr-2016 |
pfg |
sys: use our roundup2/rounddown2() macros when param.h is available.
rounddown2 tends to produce longer lines than the original code and when the code has a high indentation level it was not really advantageous to do the replacement.
This tries to strike a balance between readability using the macros and flexibility of having the expressions, so not everything is converted.
|
#
272096 |
|
25-Sep-2014 |
glebius |
- Provide bce_get_counter() to return counters that are not collected, but taken from hardware. - Mechanically convert to if_inc_counter() the rest of counters. - While here fix 3 instances of the same bug, when error counter was ++ in one place and then assigned in other place, losing the increment. Achieve that storing soft errors counters in softc.
|
#
271005 |
|
03-Sep-2014 |
glebius |
Use CSUM_BITS instead of incorrect copy.
Sponsored by: Nginx, Inc.
|
#
267992 |
|
28-Jun-2014 |
hselasky |
Pull in r267961 and r267973 again. Fix for issues reported will follow.
|
#
267985 |
|
27-Jun-2014 |
gjb |
Revert r267961, r267973:
These changes prevent sysctl(8) from returning proper output, such as:
1) no output from sysctl(8) 2) erroneously returning ENOMEM with tools like truss(1) or uname(1) truss: can not get etype: Cannot allocate memory
|
#
267961 |
|
27-Jun-2014 |
hselasky |
Extend the meaning of the CTLFLAG_TUN flag to automatically check if there is an environment variable which shall initialize the SYSCTL during early boot. This works for all SYSCTL types both statically and dynamically created ones, except for the SYSCTL NODE type and SYSCTLs which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to be used in the case a tunable sysctl has a custom initialisation function allowing the sysctl to still be marked as a tunable. The kernel SYSCTL API is mostly the same, with a few exceptions for some special operations like iterating childrens of a static/extern SYSCTL node. This operation should probably be made into a factored out common macro, hence some device drivers use this. The reason for changing the SYSCTL API was the need for a SYSCTL parent OID pointer and not only the SYSCTL parent OID list pointer in order to quickly generate the sysctl path. The motivation behind this patch is to avoid parameter loading cludges inside the OFED driver subsystem. Instead of adding special code to the OFED driver subsystem to post-load tunables into dynamically created sysctls, we generalize this in the kernel.
Other changes: - Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask" to "hw.pcic.intr_mask". - Removed redundant TUNABLE statements throughout the kernel. - Some minor code rewrites in connection to removing not needed TUNABLE statements. - Added a missing SYSCTL_DECL(). - Wrapped two very long lines. - Avoid malloc()/free() inside sysctl string handling, in case it is called to initialize a sysctl from a tunable, hence malloc()/free() is not ready when sysctls from the sysctl dataset are registered. - Bumped FreeBSD version to indicate SYSCTL API change.
MFC after: 2 weeks Sponsored by: Mellanox Technologies
|
#
267377 |
|
11-Jun-2014 |
jhb |
- Unmap static DMA buffers allocated via bus_dmemem_alloc() before freeing them instead of after. - Check the bus address of a static DMA buffer to decide if the associated map should be unloaded. - Don't try to destroy bus dma maps for static DMA buffers.
Reviewed by: davidcs
|
#
265703 |
|
08-May-2014 |
davidcs |
Modify Copyright information and other strings to reflect Qlogic Corporation's purchase of Broadcom's NetXtreme business. Added clean option to Makefile
Submitted by:David C Somayajulu (davidcs@freebsd.org) QLogic Corporation MFC after:5 days
|
#
257307 |
|
29-Oct-2013 |
yongari |
Fix regression introduced in r235816. r235816 triggered kernel panic or hang after warm boot. Don't blindly restore BCE_EMAC_MODE media configuration in bce_reset(). If driver is about to shutdown it will invoke bce_reset() which in turn results in restoring BCE_EMAC_MODE media configuration. This operation seems to confuse controller firmware.
Reported by: Paul Herman (herman <> cleverbridge dot com) Tested by: sbruno, Paul Herman (herman <> cleverbridge dot com)
|
#
257173 |
|
26-Oct-2013 |
glebius |
Move includes from if_bcereg.h to .c files.
|
#
254516 |
|
19-Aug-2013 |
andre |
Remove unused and incomplete support for delayed fragment checksums from bce(4), bxe(4), mge(4) and ti(4) drivers.
|
#
252402 |
|
30-Jun-2013 |
yongari |
Fix triggering false watchdog timeout when controller is in PAUSE state. Previously it used to check if controller has sent a PAUSE frame to the remote peer.
Reported by: David Imhoff via Brad Smith <brad@OpenBSD.org> Submitted by: davidch (initial version) Reviewed by: davidch, David Imhoff <dimhoff_devel@xs4all.nl>
|
#
251159 |
|
30-May-2013 |
marius |
- Checking for spurious interrupts is only necessary when using INTx. Actually, this may be further optimized for controller variants supporting one-shot MSIs but I'm lacking the necessary hardware for testing. - Add some missing synchronization of the statistics and status DMA maps.
MFC after: 1 week
|
#
251146 |
|
30-May-2013 |
marius |
- Do supply arguments as pointers to bce_get_{pg,rx}_buf() that are not altered or actually needed there any longer. - Honor errors passed to the DMA mapping callbacks. - In bce_get_rx_buf(), do not reserve stack space for more DMA segments than actually necessary. - In bce_get_pg_buf(), take advantage of bus_dmamap_load_mbuf_sg(9). - In bce_rx_intr(), remove a pointless check for an empty mbuf pointer which can only happen in case of a severe programming error. Moreover, recovering from that situation would require way more actions with header splitting enabled (which it is by default). - Fix VLAN tagging in the RX path; do not attach the VLAN tag twice if the firmware has been told to keep it. [1]
Obtained from: OpenBSD [1] MFC after: 1 week
|
#
251142 |
|
30-May-2013 |
marius |
- As a follow-up to r247565, make firmware images that do not require patching at runtime actually const. - Remove pointless softc members by employing the corresponding constants directly. - Remove pointless returns. - Remove unnecessary inclusion of opt_device_polling.h. - Replace an outdated and now bogus comment in bce_tick() with the appropriate one.
MFC after: 1 week
|
#
247590 |
|
01-Mar-2013 |
marius |
Initialize count in order to appease clang.
Submitted by: delphij
|
#
247565 |
|
01-Mar-2013 |
marius |
- Make tables, device ID strings etc const. - Use NULL instead of 0 for pointers. - Remove redundant bzero(9)'ing of the softc. - Remove redundant/unused softc members. - Don't allocate MSI/MSI-X as RF_SHAREABLE. - Re-use bus accessor macros instead of duplicating them. - In bce_miibus_{read,write}_reg(), remove superfluous limiting of the PHY address (missed in r213893).
MFC after: 1 week
|
#
243857 |
|
04-Dec-2012 |
glebius |
Mechanically substitute flags from historic mbuf allocator with malloc(9) flags in sys/dev.
|
#
243624 |
|
27-Nov-2012 |
andre |
Remove unused and unnecessary CSUM_IP_FRAGS checksumming capability. Checksumming the IP header of fragments is no different from doing normal IP headers.
Discussed with: yongari MFC after: 1 week
|
#
239110 |
|
06-Aug-2012 |
davide |
Remove a spurious bace which cause build fail in case BCE_DEBUG option is turned on.
Reviewed by: delphij Approved by: gnn (mentor) Sponsored by: Google Summer of Code 2012 MFC after: 1 week
|
#
235816 |
|
22-May-2012 |
yongari |
Make IPMI work in the bce driver even when the interface is configured down. Formerly, IPMI communication was lost whenever the interface was not up. The reason was that the BCE_EMAC_MODE register was not configured with the correct media settings. There are two parts to the fix.
First, resetting the chip in bce_reset() causes the BCE_EMAC_MODE register to be initialized to a default value that does not necessarily correspond to the actual media settings. The fix implemented here is a bit of a hack. Ideally, at the end of bce_reset() we would poll the PHY to determine the negotiated media, and then we would set the BCE_EMAC_MODE register accordingly. That is difficult, since the PHY is abstracted behind the MII layer and is not supposed to be queried directly from the MAC driver. Instead, we read the BCE_EMAC_MODE register at the beginning of bce_reset() and then restore its media bits to their original values before returning. If IPMI is up and running, then the link is already established and the BCE_EMAC_MODE register is already set appropriately when bce_reset() is called. If IPMI is not running, no harm is done by preserving the BCE_EMAC_MODE settings. The driver will set the register properly once the interface is configured up and link is established.
Second, bce_miibus_statchg() is sometimes called when the link is down. In that case, the reported media settings are invalid. Formerly, the driver used them anyway to setup the BCE_EMAC_MODE register. We now avoid changing any MAC registers unless link is active and the reported media settings are valid.
Submitted by: jdp Tested by: jdp MFC after: 5 days
|
#
235151 |
|
09-May-2012 |
yongari |
Implement basic remote PHY support. Remote PHY allows the controller to perform MDIO type accesses to a remote transceiver using message pages defined through MRBE(multirate backplane ethernet). It's used in blade systems(e.g Dell Blade m610) which are connected to pass-through blades rather than traditional switches. This change directly manipulates firmware's mailboxes to control remote PHY such that it does not use mii(4). Alternatively, as David said, it could be implemented in brgphy(4) by creating a fake PHY and let brgphy(4) do necessary mii accesses and bce(4) can implement mailbox accesses based on the type of brgphy(4)'s mii accesses. Personally, I think it would make brgphy(4) hard to maintain since it would have to access many bce(4) registers in brgphy(4). Given that there are users who are suffering from lack of remote PHY support, it would be better to get working system rather than waiting for complete/perfect implementation.
Tested by: Jan Winter ( jan.winter <> kantarmedia dot de ) Reviewed by: davidch (initial version) MFC after: 2 weeks
|
#
235145 |
|
08-May-2012 |
davidch |
- Rename sysctl "loose_rx_mtu" to "strict_rx_mtu" to match code usage.
Submitted by: davidch MFC after: 1 day
|
#
235119 |
|
07-May-2012 |
yongari |
Restore jumbo frame configuration which was broken in r218423.
Submitted by: Andrey Zonov <andrey <> zonov dot org > (initial version) Tested by: Andrey Zonov <andrey <> zonov dot org > MFC after: 1 week
|
#
234121 |
|
11-Apr-2012 |
yongari |
Back out r228476. r228476 fixed superfluous link UP/DOWN messages but broke IPMI access during boot. It's not clear why r228476 breaks IPMI and should be revisited.
Reported by: Paul Guyot <paulguyot <> ieee dot org > MFC after: 1 week
|
#
228476 |
|
13-Dec-2011 |
yongari |
Rework link state tracking and remove superfluous link UP/DOWN messages. o Add check for actually resolved speed in miibus_statchg callback instead of blindly reprogramming BCE_EMAC_MODE register. The callback may be called multiple times(e.g. link UP, link transition, auto-negotiate complete etc) while auto-negotiation is in progress. All unresolved link state changes are ignored now and setting BCE_EMAC_MODE after link establishment is done once. o bce(4) is careful enough not to drive MII_TICK if driver got a valid link. To detect lost link, bce(4) relied on link state change interrupt and if driver see the interrupt, it forced to drive MII_TICK by calling bce_tick() in interrupt handler. Because bce(4) generates multiple link state change interrupts while auto-negotiation is in progress, bce_tick() would be called multiple times and this resulted in generating multiple link UP/DOWN messages. With this change, bce_tick() is not called in interrupt handler anymore such that miibus_statchg callback handles link state changes with consistent manner.
Reviewed by: davidch
|
#
227843 |
|
22-Nov-2011 |
marius |
- There's no need to overwrite the default device method with the default one. Interestingly, these are actually the default for quite some time (bus_generic_driver_added(9) since r52045 and bus_generic_print_child(9) since r52045) but even recently added device drivers do this unnecessarily. Discussed with: jhb, marcel - While at it, use DEVMETHOD_END. Discussed with: jhb - Also while at it, use __FBSDID.
|
#
227309 |
|
07-Nov-2011 |
ed |
Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs.
The SYSCTL_NODE macro defines a list that stores all child-elements of that node. If there's no SYSCTL_DECL macro anywhere else, there's no reason why it shouldn't be static.
|
#
226123 |
|
07-Oct-2011 |
yongari |
BCE_MISC_ID register of BCM5716 returns the same id of BCM5709 so remove explicit checks for BCM5716. The BCM5709 and BCM5716 chips are virtually indistinguishable by software except for the PCI device ID. The two chips differ in that BCM5709 supports TCP/IP and iSCSI offload in Windows while the BCM5716 doesn't. While I'm here remove now unused definition of BCE_CHIP_NUM_5716 and BCE_CHIP_ID_5716_C0.
Reported by: sbruno Reviewed by: davidch Tested by: davidch
|
#
221407 |
|
03-May-2011 |
marius |
- Remove attempts to implement setting of BMCR_LOOP/MIIF_NOLOOP (reporting IFM_LOOP based on BMCR_LOOP is left in place though as it might provide useful for debugging). For most mii(4) drivers it was unclear whether the PHYs driven by them actually support loopback or not. Moreover, typically loopback mode also needs to be activated on the MAC, which none of the Ethernet drivers using mii(4) implements. Given that loopback media has no real use (and obviously hardly had a chance to actually work) besides for driver development (which just loopback mode should be sufficient for though, i.e one doesn't necessary need support for loopback media) support for it is just dropped as both NetBSD and OpenBSD already did quite some time ago. - Let mii_phy_add_media() also announce the support of IFM_NONE. - 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 lxtphy(4) which disables MII interrupts (as is done for a few other PHYs we have drivers for). This includes changing NIC drivers which previously just called the generic mii_phy_reset() to now actually call the PHY-specific reset routine, which might be crucial in some cases. While at it, the redundant checks in these NIC drivers for mii->mii_instance not being zero before calling the reset routines were removed because as soon as one PHY driver attaches mii->mii_instance is incremented and we hardly can end up in their media change callbacks etc if no PHY driver has attached as mii_attach() would have failed in that case and not attach a miibus(4) instance. Consequently, NIC drivers now no longer should call mii_phy_reset() directly, so it was removed from EXPORT_SYMS. - Add a mii_phy_dev_attach() as a companion helper to mii_phy_dev_probe(). The purpose of that function is to perform the common steps to attach a PHY driver instance and to hook it up to the miibus(4) instance and to optionally also handle the probing, addition and initialization of the supported media. So all a PHY driver without any special requirements has to do in its bus attach method is to call mii_phy_dev_attach() along with PHY-specific MIIF_* flags, a pointer to its PHY functions and the add_media set to one. All PHY drivers were updated to take advantage of mii_phy_dev_attach() as appropriate. Along with these changes the capability mask was added to the mii_softc structure so PHY drivers taking advantage of mii_phy_dev_attach() but still handling media on their own do not need to fiddle with the MII attach arguments anyway. - Keep track of the PHY offset in the mii_softc structure. This is done for compatibility with NetBSD/OpenBSD. - Keep track of the PHY's OUI, model and revision in the mii_softc structure. Several PHY drivers require this information also after attaching and previously had to wrap their own softc around mii_softc. NetBSD/OpenBSD also keep track of the model and revision on their mii_softc structure. All PHY drivers were updated to take advantage as appropriate. - Convert the mebers of the MII data structure to unsigned where appropriate. This is partly inspired by NetBSD/OpenBSD. - According to IEEE 802.3-2002 the bits actually have to be reversed when mapping an OUI to the MII ID registers. All PHY drivers and miidevs where changed as necessary. Actually this now again allows to largely share miidevs with NetBSD, which fixed this problem already 9 years ago. Consequently miidevs was synced as far as possible. - Add MIIF_NOMANPAUSE and mii_phy_flowstatus() calls to drivers that weren't explicitly converted to support flow control before. It's unclear whether flow control actually works with these but typically it should and their net behavior should be more correct with these changes in place than without if the MAC driver sets MIIF_DOPAUSE.
Obtained from: NetBSD (partially) Reviewed by: yongari (earlier version), silence on arch@ and net@
|
#
219902 |
|
23-Mar-2011 |
jhb |
Do a sweep of the tree replacing calls to pci_find_extcap() with calls to pci_find_cap() instead.
|
#
218527 |
|
10-Feb-2011 |
davidch |
- Added error checking to nvram read functions. - Minor style updates.
Submitted by: gcooper@freebsd.org MFC after: 2 weeks
|
#
218423 |
|
07-Feb-2011 |
davidch |
- Added systcls for header splitting, RX/TX buffer count, interrupt coalescing, strict RX MTU, verbose output, and shared memory debug. - Added additional debug counters (VLAN tags and split header frames). - Updated debug counters to 64 bit definitions. - Updated l2fhdr bit definitions. - Combined RX buffer sizing into a single function. - Added buffer size and interrupt coalescing settings to adapter info printout.
Submitted by: davidch MFC after: 2 weeks
|
#
217323 |
|
12-Jan-2011 |
mdf |
sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly.
Commit the rest of the devices.
|
#
215297 |
|
14-Nov-2010 |
marius |
o Flesh out the generic IEEE 802.3 annex 31B full duplex flow control support in mii(4): - Merge generic flow control advertisement (which can be enabled by passing by MIIF_DOPAUSE to mii_attach(9)) and parsing support from NetBSD into mii_physubr.c and ukphy_subr.c. Unlike as in NetBSD, IFM_FLOW isn't implemented as a global option via the "don't care mask" but instead as a media specific option this. This has the following advantages: o allows flow control advertisement with autonegotiation to be turned on and off via ifconfig(8) with the default typically being off (though MIIF_FORCEPAUSE has been added causing flow control to be always advertised, allowing to easily MFC this changes for drivers that previously used home-grown support for flow control that behaved that way without breaking POLA) o allows to deal with PHY drivers where flow control advertisement with manual selection doesn't work or at least isn't implemented, like it's the case with brgphy(4), e1000phy(4) and ip1000phy(4), by setting MIIF_NOMANPAUSE o the available combinations of media options are readily available from the `ifconfig -m` output - Add IFM_FLOW to IFM_SHARED_OPTION_DESCRIPTIONS and IFM_ETH_RXPAUSE and IFM_ETH_TXPAUSE to IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS so these are understood by ifconfig(8). o Make the master/slave support in mii(4) actually usable: - Change IFM_ETH_MASTER from being implemented as a global option via the "don't care mask" to a media specific one as it actually is only applicable to IFM_1000_T to date. - Let mii_phy_setmedia() set GTCR_MAN_MS in IFM_1000_T slave mode to actually configure manually selected slave mode (like we also do in the PHY specific implementations). - Add IFM_ETH_MASTER to IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS so it is understood by ifconfig(8). o Switch bge(4), bce(4), msk(4), nfe(4) and stge(4) along with brgphy(4), e1000phy(4) and ip1000phy(4) to use the generic flow control support instead of home-grown solutions via IFM_FLAGs. This includes changing these PHY drivers and smcphy(4) to no longer unconditionally advertise support for flow control but only if the selected media has IFM_FLOW set (or MIIF_FORCEPAUSE is set) and implemented for these media variants, i.e. typically only for copper. o Switch brgphy(4), ciphy(4), e1000phy(4) and ip1000phy(4) to report and set IFM_1000_T master mode via IFM_ETH_MASTER instead of via IFF_LINK0 and some IFM_FLAGn. o Switch brgphy(4) to add at least the the supported copper media based on the contents of the BMSR via mii_phy_add_media() instead of hardcoding them. The latter approach seems to have developed historically, besides causing unnecessary code duplication it was also undesirable because brgphy_mii_phy_auto() already based the capability advertisement on the contents of the BMSR though. o Let brgphy(4) set IFM_1000_T master mode on all supported PHY and not just BCM5701. Apparently this was a misinterpretation of a workaround in the Linux tg3 driver; BCM5701 seem to require RGPHY_1000CTL_MSE and BRGPHY_1000CTL_MSC to be set when configuring autonegotiation but this doesn't mean we can't set these as well on other PHYs for manual media selection. o Let ukphy_status() report IFM_1000_T master mode via IFM_ETH_MASTER so IFM_1000_T master mode support now is generally available with all PHY drivers. o Don't let e1000phy(4) set master/slave bits for IFM_1000_SX as it's not applicable there.
Reviewed by: yongari (plus additional testing) Obtained from: NetBSD (partially), OpenBSD (partially) MFC after: 2 weeks
|
#
213894 |
|
15-Oct-2010 |
marius |
Converted the remainder of the NIC drivers to use the mii_attach() introduced in r213878 instead of mii_phy_probe(). Unlike r213893 these are only straight forward conversions though.
Reviewed by: yongari
|
#
213844 |
|
14-Oct-2010 |
yongari |
Make sure to not use stale ip/tcp header pointers. The ip/tcp header parser uses m_pullup(9) to get access to mbuf chain. m_pullup(9) can allocate new mbuf chain and free old one if the space left in the mbuf chain is not enough to hold requested contiguous bytes. Previously drivers can use stale ip/tcp header pointer if m_pullup(9) returned new mbuf chain.
Reported by: Andrew Boyer (aboyer <> averesystems dot com) MFC after: 10 days
|
#
213489 |
|
06-Oct-2010 |
ambrisko |
Add the capability to read the complete contents of the NVRAM via sysctl dev.bce.<unit>.nvram_dump Add the capability to write the complete contents of the NVRAM via sysctl dev.bce.<unit>.nvram_write These are only available if the kernel option BCE_DEBUG is enabled. The nvram_write sysctl also requires the kernel option BCE_NVRAM_WRITE_SUPPORT to be enabled. These are to be used at your own caution. Since the MAC addresses are stored in the NVRAM, if you dump one NIC and restore it on another NIC the destination NIC's MAC addresses will not be preserved. A tool can be made using these sysctl's to manage the on-chip firmware.
Reviewed by: davidch, yongari
|
#
210522 |
|
26-Jul-2010 |
jkim |
Fix an apparent typo.
Found by: clang Reviewed by: davidch, yongari
|
#
210271 |
|
19-Jul-2010 |
yongari |
Specify BCE_RX_BUF_ALIGN alignment for RX buffers. All bce(4) controllers require RX buffers aligned on BCE_RX_BUF_ALIGN bytes.
Reviewed by: davidch
|
#
210270 |
|
19-Jul-2010 |
yongari |
Specify BUS_DMA_ZERO flag to bus_dmamem_alloc(9) and remove bzero() calls. Also add BUS_DMA_COHERENT flag to bus_dmamem_alloc(9) to take advantage of efficient synchronization for architectures that support that feature.
Reviewed by: davidch
|
#
210269 |
|
19-Jul-2010 |
yongari |
Use bus_get_dma_tag() to get parent tag. Also use BUS_SPACE_MAXSIZE_32BIT to specify sum of all segment lengths. Previously it used MAXBSIZE which was wrong.
Reviewed by: davidch
|
#
210267 |
|
19-Jul-2010 |
yongari |
Add KASSERT to check number of returned DMA segments.
Reviewed by: davidch
|
#
210263 |
|
19-Jul-2010 |
yongari |
Do not report current link state if interface is not UP.
Reviewed by: davidch
|
#
210261 |
|
19-Jul-2010 |
yongari |
Correctly check the result of media selection. Previously it always returned success.
Reviewed by: davidch
|
#
210260 |
|
19-Jul-2010 |
yongari |
Don't change current media in bce_stop(). There is no need to do this here.
Reviewed by: davidch
|
#
210259 |
|
19-Jul-2010 |
yongari |
Have bce_init_ctx() return error code and make caller check the return code. If context was not setup correctly give up initialization. While I'm here move variable declarations to the beginning of the function.
Reviewed by: davidch
|
#
210257 |
|
19-Jul-2010 |
yongari |
When we didn't find a matching flash device, do not touch flash config data. While I'm here, use return code of bce_init_nvram() to set error instead of directly setting ENODEV.
Reviewed by: davidch
|
#
207761 |
|
07-May-2010 |
fabient |
Add a fastpath to allocate from packet zone when using m_getjcl. This will add support for packet zone for at least igb and ixgbe and will avoid to check for that in bce and mxge.
MFC after: 1 week
|
#
207411 |
|
30-Apr-2010 |
davidch |
- Enable flow control. - Print device details only when verbose boot is enabled. - Add debug output for shared memory access. - Add debug statistics (checksum offload & VLAN frame counters). - Modify TX path to update consumer index for each frame completed rather than updating the consumer index only once for a group of frames to improve small packet performance. - Print driver/firmware pulse messages only when verbose boot is enabled. - Add debug sysctl to clear statistics. - Fix more style(9) violations.
MFC after: 2 weeks
|
#
206268 |
|
06-Apr-2010 |
davidch |
- Fixed 5708S 2.5G support broken in last commit. - Added some new debug helper routines to systcl. - Fixed many of the style(9) violations that have crept into the code due to my use of a "smart" editor.
MFC after: 2 weeks
|
#
205300 |
|
18-Mar-2010 |
davidch |
- Added support for 5709S/5716S PHYs. - Update copyright to 2010. - Add new debug code for RV2P block. - Improve output formatting for various debug functions.
MFC after: 2 weeks
|
#
204374 |
|
26-Feb-2010 |
yongari |
Add TSO support on VLANs. bce(4) controllers require VLAN hardware tagging to make TSO work on VLANs so explicitly disable TSO on VLAN if VLAN hardware tagging is disabled.
Reviewed by: davidch
|
#
204373 |
|
26-Feb-2010 |
yongari |
Move TSO setup to new function bce_tso_setup(). Also remove VLAN parsing code in TSO path as the controller requires VLAN hardware tagging to make TSO work over VLANs. While parsing the mbuf in TSO patch, always perform check for writable mbuf as bce(4) have to reset IP length and IP checksum field of IP header and make sure to ensure contiguous buffer before accessing IP/TCP headers. While I'm here replace magic number 40 to more readable sizeof(struct ip) + sizeof(struct tcphdr).
Reviewed by: davidch
|
#
204372 |
|
26-Feb-2010 |
yongari |
Prefer m_collapse(9) over m_defrag(9).
Reviewed by: davidch
|
#
204371 |
|
26-Feb-2010 |
yongari |
Make toggling TSO, VLAN hardware checksum offloading work. Also fix TX/RX checksum handler to set/clear relavant assist bits which was used to cause unexpected results. With this change, bce(4) can be bridged with other interfaces that lack TSO, VLAN checksum offloading.
Reviewed by: davidch
|
#
204370 |
|
26-Feb-2010 |
yongari |
Make sure to stop controller first before changing MTU. And if interface is not running don't initialize controller. While here remove unnecessary update of error variable.
Reviewed by: davidch
|
#
204368 |
|
26-Feb-2010 |
yongari |
Allow disabling VLAN hardware tag stripping with software work around. Management firmware(ASF/IPMI/UMP) requires the VLAN hardware tag stripping so don't actually disable VLAN hardware tag stripping. If VLAN hardware tag stripping was disabled, bce(4) manually reconstruct VLAN frame by appending stripped VLAN tag. Also remove unnecessary IFCAP_VLAN_MTU message.
Reviewed by: davidch
|
#
202717 |
|
20-Jan-2010 |
davidch |
- Added a workaround for NC-SI management firmware that would allow frames to be accepted while the driver is resetting the hardware. This failure is generally observed when broadcast frames are received during driver load and will generate "Unable to write CTX memory" errors. - Small changes to driver flags display.
|
#
198320 |
|
21-Oct-2009 |
stas |
- Introduce new option BCE_JUMBO_HDRSPLIT that allows user to enable header splitting in bce(4) instead of (ab)using ZERO_COPY_SOCKETS that was not propagated into if_bce.c anyway. It is disabled by default.
Approved by: davidch MFC after: 3 days
|
#
196970 |
|
08-Sep-2009 |
phk |
Revert previous commit and add myself to the list of people who should know better than to commit with a cat in the area.
|
#
196969 |
|
08-Sep-2009 |
phk |
Add necessary include.
|
#
195049 |
|
26-Jun-2009 |
rwatson |
Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ IF_ADDR_UNLOCK() across network device drivers when accessing the per-interface multicast address list, if_multiaddrs. This will allow us to change the locking strategy without affecting our driver programming interface or binary interface.
For two wireless drivers, remove unnecessary locking, since they don't actually access the multicast address list.
Approved by: re (kib) MFC after: 6 weeks
|
#
194781 |
|
23-Jun-2009 |
davidch |
- Added code to read bootcode firwmare version. - Created dedicated shared memory access routines.
MFC after: One week
|
#
192281 |
|
18-May-2009 |
delphij |
DMA synchronization fixes:
- In bce_rx_intr(), use BUS_DMASYNC_POSTREAD instead of BUS_DMASYNC_POSTWRITE, as we want to "read" from the rx page chain pages. - Document why we need to do PREWRITE after we have updated the rx page chain pages. - In bce_intr(), use BUS_DMASYNC_POSTREAD and BUS_DMASYNC_PREREAD when before and after CPU "reading" the status block. - Adjust some nearby style mismatches/etc.
Pointed out by: yongari Approved by: davidch (no objection) but bugs are mine :)
|
#
191923 |
|
08-May-2009 |
davidch |
- Fixed incorrect packet length problem caused be earlier change to support ZERO_COPY_SOCKETS. - Created #define for context initialization retry count.
MFC after: 1 week
|
#
189325 |
|
03-Mar-2009 |
davidch |
- Updated firmware to latest 4.6.X release. - Added missing firmware for 5709 A1 controllers. - Changed some debug statistic variable names to be more consistent.
Submitted by: davidch MFC after: Two weeks
|
#
189117 |
|
27-Feb-2009 |
davidch |
- Update copyright to 2009. - Only enable split header operation when ZERO_COPY_SOCKETS is enabled in the kernel.
Submitted by: davidch MFC after: 1 week
|
#
187317 |
|
15-Jan-2009 |
delphij |
Changes to match "Marketing Description" from Broadcom for HP servers.
Submitted by: davidch MFC after: 2 months
|
#
187204 |
|
13-Jan-2009 |
delphij |
Remove intermediate variable busaddr and have bus_* operate directly on softc members upon initialization.
Reviewed by: davidch MFC after: 1 month
|
#
187133 |
|
13-Jan-2009 |
delphij |
Add several HP OEM parts' PCI IDs.
MFC after: 2 months
|
#
186169 |
|
16-Dec-2008 |
delphij |
Don't count InFramesL2FilterDiscards into Ierr. This value does not represent a real packet error but simply indicate that an unexpected unicast or multicast error was received by the NIC, which was not counted in the past as well.
Reported by: many (on -stable@) Reviewed by: davidch MFC after: 3 days
|
#
186168 |
|
16-Dec-2008 |
delphij |
Test whether sc->tx_mbuf_map[i], not whether sc->tx_mbuf_map is NULL before doing bus_dmamap_sync() since it operates on the former, not the latter.
Reviewed by: davidch
|
#
185593 |
|
03-Dec-2008 |
delphij |
Don't attempt to clear status updates if we did not do a link state change. As a side effect, this makes the excessive interrupts to disappear which has been observed as a regression in recent stable/7.
Reported by: many (on -stable@) Reviewed by: davidch
|
#
185082 |
|
19-Nov-2008 |
delphij |
Correct a logic error when testing BCE_PHY_SERDES_FLAG.
PR: kern/128801 Pointed out by: Adam Morrison Ok'ed by: davidch MFC after: 3 days
|
#
182293 |
|
27-Aug-2008 |
davidch |
- Updated support for 5716. - Added some additional code for debug builds. - Fixed a problem printing physical memory on 64bit system during debugging. - Modified some of the context memory and mailbox register names to more clearly distinguish their use. - Added memory barriers for Intel CPUs when accessing host memory data structures which are written by hardware.
MFC after: Two weeks.
|
#
179771 |
|
12-Jun-2008 |
davidch |
- Added support for BCM5709 and BCM5716 controllers.
MFC after: 2 weeks
|
#
179695 |
|
10-Jun-2008 |
davidch |
- Fixed kern/123696 by increasing firmware timeout value from 100 to 1000. - Fixed a problem on i386 architecture when using split header/jumbo frame firmware caused by hardware alignment requirements. - Added #define BCE_USE_SPLIT_HEADER to allow the feature to be enabled/ disabled. Enabled by default.
PR: kern/123696 MFC after: 2 weeks
|
#
179436 |
|
30-May-2008 |
jhb |
Trim an extra semi-colon.
|
#
178853 |
|
08-May-2008 |
scottl |
The BCE chips appear to have an undocumented requirement that RX frames be aligned on an 8 byte boundary. Prior to rev 1.36 this wasn't a problem because mbuf clusters tend be naturally aligned. The switch to using split buffers with the first buffer being the embedded data area of the mbuf has broken this assumption, at least on i386, causing a complete failure of RX functionality. Fix this for now by using a full cluster for the first RX buffer. A more sophisticated approach could be done with the old buffer scheme to realign the m_data pointer with m_adj(), but I'm also not clear on performance benefits of this old scheme or the performance implications of adding an m_adj() call to every allocation.
|
#
178588 |
|
26-Apr-2008 |
marius |
Remove some remnant alpha hacks.
Approved by: PCI-maintainers (imp, jhb)
|
#
178132 |
|
11-Apr-2008 |
davidch |
- Fixed a problem with the send chain consumer index which would cause TX traffic to sit in the send chain until a received packet kick started the interrupt handler. This would cause extremely slow performance when used with NFS over UDP. - Removed untested polling code. - Updated copyright year in the file header. - Removed inadvertent ^M's created by DOS text editor.
MFC after: 2 weeks
|
#
176448 |
|
21-Feb-2008 |
davidch |
MFC after: 4 weeks
- Added loose RX MTU functionality to allow frames larger than 1500 bytes to be accepted even though the interface MTU is set to 1500. - Implemented new TCP header splitting/jumbo frame support which uses two chains for receive traffic rather than the original single recevie chain. - Added additional debug support code.
|
#
173839 |
|
22-Nov-2007 |
yongari |
Fix function prototype for device_shutdown method.
|
#
171667 |
|
30-Jul-2007 |
davidch |
- Fixed a problem that would cause kernel panics and "bce0: discard frame .." errors (especially when jumbo frames are enabled or in low memory systems) because the RX chain was corrupted when an mbuf was mapped to an unexpected number of buffers. - Fixed a problem that would cause kernel panics when an excessively fragmented TX mbuf couldn't be defragmented and was released by bce_tx_encap().
Approved by: re(hrs) MFC after: 7 days
|
#
170810 |
|
16-Jun-2007 |
davidch |
- Migrated IPMI fix from RELENG_6. - Added additional debug code.
|
#
170392 |
|
07-Jun-2007 |
davidch |
New Features: - Added 2.5G support for BCM5708S.
MFC after: 4 weeks
|
#
169632 |
|
16-May-2007 |
davidch |
- Added TSO support - Updated firmware to latest release (v3.4.8) to fix TSO + jumbo frame lockup - Added MSI (hw.bce.msi_enable) and TSO (hw.bce.tso_enable) sysctls - Fixed kernel panic when MSI is used and module is unloaded - Added several new debug routines - Removed slack space for RX/TX chains since it only covers sloppy coding - Fixed a potential problem when programming jumbo MTU size in hardware - Various other comment changes
MFC after: 4 weeks
|
#
169271 |
|
04-May-2007 |
davidch |
MFC after: 2 weeks
Updated copyright date to 2007.
Tested with BCM5706 A3.
Added ID for BCM5708 B2.
Removed unused driver version string.
Modified BCE_PRINTF macro to automatically fill-in the sc pointer.
Fixed a kernel panic when the driver was loaded as a module from the command-line because the MII bus pointer was null (i.e. the MII bus hadn't been enumerated yet).
Added fix proposed by Vladimir Ivanov <wawa@yandex-team.ru> to prevent driver state corruption when releasing the lock during the ISR in bce_rx_intr() to send packets up the stack.
Added new TX chain and register read sysctl interfaces for debugging.
Cleaned up formatting for various other debug routines.
Added a new statistic maintained by firmware which tracks the number of received packets dropped because no receive buffers are available.
|
#
167190 |
|
04-Mar-2007 |
csjp |
Catch up the rest of the drivers with the ether_vlan_mtap modifications. If these drivers are setting M_VLANTAG because they are stripping the layer 2 802.1Q headers, then they need to be re-inserting them so any bpf(4) peers can properly decode them.
It should be noted that this is compiled tested only.
MFC after: 3 weeks
|
#
166901 |
|
23-Feb-2007 |
piso |
o break newbus api: add a new argument of type driver_filter_t to bus_setup_intr()
o add an int return code to all fast handlers
o retire INTR_FAST/IH_FAST
For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current
Reviewed by: many Approved by: re@
|
#
166261 |
|
26-Jan-2007 |
dwhite |
Add support for SERDES PHY configurations. These are commonly found in blade systems, such as the Dell 1955 and the Intel SBXD132.
Development hardware for this work was provided by Broadcom and iXsystems. A SBXD132 blade for testing was provided by Iron Systems.
|
#
166153 |
|
20-Jan-2007 |
scottl |
The multicast hash table has 8 slots in the BCE hardware, not 4 slots like the BGE hardware. Adapt the driver for this.
Submitted by: Mike Karels MFC After: 3 days
|
#
165994 |
|
13-Jan-2007 |
jhb |
- Add a locked variant of bce_ifmedia_upd() for use within the driver and add missing locking to bce_ifmedia_upd(). - While I'm here, unexpand an instance of LIST_FOREACH().
MFC after: 2 weeks Reviewed by: scottl
|
#
165934 |
|
11-Jan-2007 |
delphij |
Space cleanup.
|
#
165933 |
|
11-Jan-2007 |
delphij |
- Instead of if_watchdog/if_timer interface use our own timer that piggybacks on bce_tick() callout. - Instead of unconditionally resetting the controller, try to skip the reset in case we got a pause frame, like em(4) did. - Lock bce_tick() using callout_init_mtx().
Discussed with/Reviewed by: glebius, scottl, davidch
|
#
164968 |
|
06-Dec-2006 |
jhb |
Fix compile with BCE_DEBUG. The last one tripped up gcc 2.95 on 4.x even with BCE_DEBUG turned off.
|
#
164329 |
|
16-Nov-2006 |
scottl |
Due to an incorrect macro, it appears that this driver has always been accidentally truncating off the VLAN tag field in the TX descriptor. Fix this by splitting up the vlan_tag and flags fields into separate fields, and handling them appropriately.
Sponsored by: Ironport MFC After: 3 days
|
#
164327 |
|
16-Nov-2006 |
jdp |
In bce_start_locked, check the used_tx_bd count rather than the descriptor's mbuf pointer to see if the transmit ring is full. The mbuf pointer is set only in the last descriptor of a multi-descriptor packet. By relying on the mbuf pointers of the earlier descriptors, the driver would sometimes overwrite a descriptor belonging to a packet that wasn't completed yet. Also, tx_chain_prod wasn't updated inside the loop, causing the wrong descriptor to be checked after the first iteration. The upshot of all this was the loss of some transmitted packets at medium to high packet rates.
In bce_tx_encap, remove a couple of old statements that shuffled around the tx_mbuf_map pointers. These now correspond 1-to-1 with the transmit descriptors, and they are not supposed to be changed.
Correct a couple of inaccurate comments.
MFC after: 1 month
|
#
164305 |
|
15-Nov-2006 |
jhb |
Add MSI support to em(4), bce(4), and mpt(4). For now, we only support devices that support a maximum of 1 message, and we use that 1 message instead of the INTx rid 0 IRQ with the same interrupt handler, etc.
|
#
163814 |
|
31-Oct-2006 |
scottl |
Fix a typo in the device ID table that prevented 5708S chips from being detected.
Submitted by: pyun
|
#
163558 |
|
21-Oct-2006 |
scottl |
Be more like the BGE driver. Ensure that at least 16 TX descriptors are kept unused in the ring. This check should probably be moved up to bce_start_locked at some point, as it'll make the loop up there slightly more efficient, and will eliminate a costly set of busdma operations when the ring is full. But this works for now.
This makes all of my UDP torture tests work. I'll cautiously say that it might even work for other users now. Feedback is appreciated.
|
#
163501 |
|
19-Oct-2006 |
scottl |
I can't find any reason why an 8 byte alignment should be enforced on rx and tx buffers. Fix it there, and also don't have it be overridden by the parent tag.
|
#
163499 |
|
19-Oct-2006 |
scottl |
Remove some spurious debugging, and use more complete error handling for tx load and fragmentation problems.
|
#
163393 |
|
15-Oct-2006 |
scottl |
Overhaul the transmit and dma paths: - Use bus_dmamap_load_mbuf_sg() to eliminate the need for the callback and all of the extra bookkeeping associated with it. - Eliminate the bce_dmamap_arg structure and streamline the memory allocation routines to not need it. This does change some of the debugging messages. - Refactor the loop that fills the buffer descriptor so that it can be done with a single set of logic in a single loop instead of two sets of logic. - Eliminate the need to cache and pass descriptor indexes between the start loop and the encap function. - Change the start loop to always check the ifnet sendq for more work.
This significantly helps the driver withstand large UDP workloads, though it's still not perfect. I suspect the remaining work lies with handling the OACTIVE flag, and also in possibly streamlining the interrupt handler some. It is, however, nearly on par with the other popular gigabit drivers in terms of stability now.
|
#
163339 |
|
14-Oct-2006 |
scottl |
Simplify the arguments to bce_tx_encap.
|
#
163338 |
|
14-Oct-2006 |
scottl |
More small whitespace cleanups
|
#
163337 |
|
14-Oct-2006 |
scottl |
Don't copy the bd_chain head pointers into temporary objects, they are available globally.
|
#
163287 |
|
13-Oct-2006 |
scottl |
Fix some whitespace
|
#
162474 |
|
20-Sep-2006 |
ambrisko |
Add a new 'bce_mgmt_init_locked' function to enable the minimal parts of the chip to let ASF/IPMI firmware to respond to IPMI after attaching and when the chip is down. David looked at it but could really say what they right minimal config. stuff would be. It's not documented. I figured this out via trial and error.
Reviewed by: davidch
|
#
162375 |
|
17-Sep-2006 |
andre |
Move ethernet VLAN tags from mtags to its own mbuf packet header field m_pkthdr.ether_vlan. The presence of the M_VLANTAG flag on the mbuf signifies the presence and validity of its content.
Drivers that support hardware VLAN tag stripping fill in the received VLAN tag (containing both vlan and priority information) into the ether_vtag mbuf packet header field:
m->m_pkthdr.ether_vtag = vlan_id; /* ntohs()? */ m->m_flags |= M_VLANTAG;
to mark the packet m with the specified VLAN tag.
On output the driver should check the mbuf for the M_VLANTAG flag to see if a VLAN tag is present and valid:
if (m->m_flags & M_VLANTAG) { ... = m->m_pkthdr.ether_vtag; /* htons()? */ ... pass tag to hardware ... }
VLAN tags are stored in host byte order. Byte swapping may be necessary.
(Note: This driver conversion was mechanic and did not add or remove any byte swapping in the drivers.)
Remove zone_mtag_vlan UMA zone and MTAG_VLAN definition. No more tag memory allocation have to be done.
Reviewed by: thompsa, yar Sponsored by: TCP/IP Optimization Fundraise 2005
|
#
161299 |
|
15-Aug-2006 |
julian |
Remove extra '*/' comment close. In code not normally compiled but a bug never the less.
|
#
160526 |
|
20-Jul-2006 |
jhb |
Expand locking coverage slightly to cover if_drv_flags in a few places where it wasn't locked.
MFC after: 3 days Reviewed by: davidch
|
#
160315 |
|
12-Jul-2006 |
ambrisko |
Fix ifconfig up when the HW was down. If the driver isn't running then we need to call init otherwise just start the rx.
Interestingly dhclient seemed to work but ifconfig <IP> didn't for me.
Reviewed by: jhb
|
#
159411 |
|
08-Jun-2006 |
davidch |
Log: - Removed updates to if_ibytes, if_obytes, if_imcasts, and if_omcasts. These should not be handled by the driver. - Add code to handle excessively fragmented mbufs when mapping TX frames.
Reviewed by: ps Approved by: ps (mentor) MFC after: 1 week
|
#
157724 |
|
13-Apr-2006 |
ru |
Fix DEVICE_POLLING support (compile-only tested).
|
#
157643 |
|
10-Apr-2006 |
ps |
Hook bce up to the build
|
#
157642 |
|
10-Apr-2006 |
ps |
Add a driver for the Broadcom NetXtreme II (BCM5706/BCM5708) PCI/PCIe Gigabit Ethernet adapeter.
Submitted by: David Christensen
|