Add capability to disable CRC stripping. This breaks IPMI/BMC capabilities on certain adatpers.

Linux has been doing the exact same thing since 2008

eb7c3adb1c

PR:	161277
Differential Revision:	https://reviews.freebsd.org/D3282
Submitted by:	Fravadona@gmail.com
Reviewed by:	erj wblock
MFC after:	2 weeks
Relnotes:	yes
Sponsored by:	Limelight Networks
This commit is contained in:
Sean Bruno 2015-08-16 19:06:23 +00:00
parent f9b11500c2
commit 38be29d321
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=286829
2 changed files with 12 additions and 2 deletions

View File

@ -31,7 +31,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd October 11, 2011
.Dd August 16, 2015
.Dt EM 4
.Os
.Sh NAME
@ -205,6 +205,11 @@ Tunables can be set at the
prompt before booting the kernel or stored in
.Xr loader.conf 5 .
.Bl -tag -width indent
.It Va hw.em.disable_crc_stripping
Disable or enable hardware stripping of CRC field.
This is mostly useful on BMC/IPMI shared interfaces where stripping the CRC
causes remote access over IPMI to fail.
Default 0 (enabled).
.It Va hw.em.eee_setting
Disable or enable Energy Efficient Ethernet.
Default 1 (disabled).

View File

@ -366,6 +366,10 @@ MODULE_DEPEND(em, netmap, 1, 1, 1);
static SYSCTL_NODE(_hw, OID_AUTO, em, CTLFLAG_RD, 0, "EM driver parameters");
static int em_disable_crc_stripping = 0;
SYSCTL_INT(_hw_em, OID_AUTO, disable_crc_stripping, CTLFLAG_RDTUN,
&em_disable_crc_stripping, 0, "Disable CRC Stripping");
static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV);
static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR);
SYSCTL_INT(_hw_em, OID_AUTO, tx_int_delay, CTLFLAG_RDTUN, &em_tx_int_delay_dflt,
@ -4514,7 +4518,8 @@ em_initialize_receive_unit(struct adapter *adapter)
(hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
/* Strip the CRC */
rctl |= E1000_RCTL_SECRC;
if (!em_disable_crc_stripping)
rctl |= E1000_RCTL_SECRC;
/* Make sure VLAN Filters are off */
rctl &= ~E1000_RCTL_VFE;