Print this page
2038 Add in I350 and ET2 support into igb
Reviewed by: Dan McDonald <danmcd@nexenta.com>
@@ -18,21 +18,21 @@
*
* CDDL HEADER END
*/
/*
- * Copyright(c) 2007-2010 Intel Corporation. All rights reserved.
+ * Copyright (c) 2007-2012 Intel Corporation. All rights reserved.
*/
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#include "igb_sw.h"
static char ident[] = "Intel 1Gb Ethernet";
-static char igb_version[] = "igb 1.1.17";
+static char igb_version[] = "igb 1.1.18";
/*
* Local function protoypes
*/
static int igb_register_mac(igb_t *);
@@ -283,10 +283,34 @@
IGB_FLAG_NEED_CTX_IDX),
0xffe00000 /* mask for RXDCTL register */
};
+static adapter_info_t igb_i350_cap = {
+ /* limits */
+ 8, /* maximum number of rx queues */
+ 1, /* minimum number of rx queues */
+ 4, /* default number of rx queues */
+ 8, /* maximum number of tx queues */
+ 1, /* minimum number of tx queues */
+ 4, /* default number of tx queues */
+ 65535, /* maximum interrupt throttle rate */
+ 0, /* minimum interrupt throttle rate */
+ 200, /* default interrupt throttle rate */
+
+ /* function pointers */
+ igb_enable_adapter_interrupts_82580,
+ igb_setup_msix_82580,
+
+ /* capabilities */
+ (IGB_FLAG_HAS_DCA | /* capability flags */
+ IGB_FLAG_VMDQ_POOL |
+ IGB_FLAG_NEED_CTX_IDX),
+
+ 0xffe00000 /* mask for RXDCTL register */
+};
+
/*
* Module Initialization Functions
*/
int
@@ -515,10 +539,17 @@
igb->attach_progress |= ATTACH_PROGRESS_ENABLE_INTR;
igb_log(igb, "%s", igb_version);
atomic_or_32(&igb->igb_state, IGB_INITIALIZED);
+ /*
+ * Newer models have Energy Efficient Ethernet, let's disable this by
+ * default.
+ */
+ if (igb->hw.mac.type == e1000_i350)
+ (void) e1000_set_eee_i350(&igb->hw);
+
return (DDI_SUCCESS);
attach_fail:
igb_unconfigure(devinfo, igb);
return (DDI_FAILURE);
@@ -834,10 +865,13 @@
igb->capab = &igb_82576_cap;
break;
case e1000_82580:
igb->capab = &igb_82580_cap;
break;
+ case e1000_i350:
+ igb->capab = &igb_i350_cap;
+ break;
default:
return (IGB_FAILURE);
}
return (IGB_SUCCESS);
@@ -1697,10 +1731,13 @@
goto start_failure;
if (igb_check_acc_handle(igb->osdep.reg_handle) != DDI_FM_OK)
goto start_failure;
+ if (igb->hw.mac.type == e1000_i350)
+ (void) e1000_set_eee_i350(&igb->hw);
+
for (i = igb->num_tx_rings - 1; i >= 0; i--)
mutex_exit(&igb->tx_rings[i].tx_lock);
for (i = igb->num_rx_rings - 1; i >= 0; i--)
mutex_exit(&igb->rx_rings[i].rx_lock);