summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorsv141092 <none@none>2008-02-14 05:09:11 -0800
committersv141092 <none@none>2008-02-14 05:09:11 -0800
commit6ad5fc39c6f3b123ae5588d60fc8dfe068e07bfc (patch)
tree03f023af07c072edeea3518c3b78324d6a084033 /usr/src
parent21fb627b6c515feaa2e056538281c0584bbaf430 (diff)
downloadillumos-joyent-6ad5fc39c6f3b123ae5588d60fc8dfe068e07bfc.tar.gz
6633239 e1000g: link flaps observed on Galaxy(X4100) systems running 64-bit kernel
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/e1000g/README5
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_main.c18
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_sw.h2
3 files changed, 22 insertions, 3 deletions
diff --git a/usr/src/uts/common/io/e1000g/README b/usr/src/uts/common/io/e1000g/README
index 0880ae3807..bcd70bb376 100644
--- a/usr/src/uts/common/io/e1000g/README
+++ b/usr/src/uts/common/io/e1000g/README
@@ -561,3 +561,8 @@ Notes on packaging:
This version has the following fix:
6648775 e1000g: pci8086,10be - e1000g[0]: Identify hardware failed
+5.2.6
+======
+ This version has the following fix:
+ 6633239 e1000g: link flaps observed on Galaxy(X4100) systems running 64-bit kernel
+
diff --git a/usr/src/uts/common/io/e1000g/e1000g_main.c b/usr/src/uts/common/io/e1000g/e1000g_main.c
index d90857754f..e4aefe2620 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_main.c
+++ b/usr/src/uts/common/io/e1000g/e1000g_main.c
@@ -46,9 +46,9 @@
#include "e1000g_sw.h"
#include "e1000g_debug.h"
-static char ident[] = "Intel PRO/1000 Ethernet 5.2.5";
+static char ident[] = "Intel PRO/1000 Ethernet 5.2.6";
static char e1000g_string[] = "Intel(R) PRO/1000 Network Connection";
-static char e1000g_version[] = "Driver Ver. 5.2.5";
+static char e1000g_version[] = "Driver Ver. 5.2.6";
/*
* Proto types for DDI entry points
@@ -2513,7 +2513,11 @@ e1000g_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
case e1000_82572:
case e1000_82573:
case e1000_80003es2lan:
- *txflags = HCKSUM_IPHDRCKSUM | HCKSUM_INET_PARTIAL;
+ if (Adapter->tx_hcksum_enabled)
+ *txflags = HCKSUM_IPHDRCKSUM |
+ HCKSUM_INET_PARTIAL;
+ else
+ return (B_FALSE);
break;
/*
@@ -2695,6 +2699,14 @@ e1000g_get_conf(struct e1000g *Adapter)
e1000g_get_prop(Adapter, "tx_recycle_num",
MIN_TX_RECYCLE_NUM, MAX_TX_RECYCLE_NUM,
DEFAULT_TX_RECYCLE_NUM);
+
+ /*
+ * Hardware checksum enable/disable parameter
+ */
+ Adapter->tx_hcksum_enabled =
+ e1000g_get_prop(Adapter, "tx_hcksum_enabled",
+ 0, 1, DEFAULT_TX_HCKSUM_ENABLE);
+
}
/*
diff --git a/usr/src/uts/common/io/e1000g/e1000g_sw.h b/usr/src/uts/common/io/e1000g/e1000g_sw.h
index 95e4009e84..ba7f1f4a6f 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_sw.h
+++ b/usr/src/uts/common/io/e1000g/e1000g_sw.h
@@ -166,6 +166,7 @@ extern "C" {
/* which is normally 0x040 */
#define DEFAULT_TBI_COMPAT_ENABLE 1 /* Enable SBP workaround */
#define DEFAULT_MSI_ENABLE 1 /* MSI Enable */
+#define DEFAULT_TX_HCKSUM_ENABLE 1 /* Hardware checksum enable */
#define TX_DRAIN_TIME (200) /* # milliseconds xmit drain */
@@ -958,6 +959,7 @@ typedef struct e1000g {
#endif
boolean_t msi_enabled;
+ boolean_t tx_hcksum_enabled;
int intr_type;
int intr_cnt;
int intr_cap;