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);