Print this page
3534 Disable EEE support in igb for I350

@@ -23,10 +23,11 @@
  * Copyright(c) 2007-2010 Intel Corporation. All rights reserved.
  */
 
 /*
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013, Nexenta Systems, Inc. All rights reserved.
  */
 
 #include "igb_sw.h"
 
 int

@@ -1383,10 +1384,36 @@
         int err = 0;
         long result;
         struct e1000_hw *hw = &igb->hw;
         int i;
 
+        if (strcmp(pr_name, "_eee_support") == 0) {
+                if (pr_val == NULL)
+                        return (EINVAL);
+                (void) ddi_strtol(pr_val, (char **)NULL, 0, &result);
+                switch (result) {
+                case 0:
+                case 1:
+                        if (hw->mac.type != e1000_i350) {
+                                /*
+                                 * For now, only supported on I350.
+                                 * Add new mac.type values (or use < instead)
+                                 * as new cards offer up EEE.
+                                 */
+                                return (ENXIO);
+                        }
+                        /* Must set this prior to the set call. */
+                        hw->dev_spec._82575.eee_disable = !result;
+                        if (e1000_set_eee_i350(hw) != E1000_SUCCESS)
+                                err = EIO;
+                        break;
+                default:
+                        err = EINVAL;
+                        /* FALLTHRU */
+                }
+                return (err);
+        }
         if (strcmp(pr_name, "_tx_copy_thresh") == 0) {
                 if (pr_val == NULL) {
                         err = EINVAL;
                         return (err);
                 }

@@ -1505,10 +1532,17 @@
 
         if (strcmp(pr_name, "_adv_pause_cap") == 0) {
                 value = igb->param_adv_pause_cap;
         } else if (strcmp(pr_name, "_adv_asym_pause_cap") == 0) {
                 value = igb->param_adv_asym_pause_cap;
+        } else if (strcmp(pr_name, "_eee_support") == 0) {
+                /*
+                 * For now, only supported on I350.  Add new mac.type values
+                 * (or use < instead) as new cards offer up EEE.
+                 */
+                value = (igb->hw.mac.type != e1000_i350) ? 0 :
+                    !(igb->hw.dev_spec._82575.eee_disable);
         } else if (strcmp(pr_name, "_tx_copy_thresh") == 0) {
                 value = igb->tx_copy_thresh;
         } else if (strcmp(pr_name, "_tx_recycle_thresh") == 0) {
                 value = igb->tx_recycle_thresh;
         } else if (strcmp(pr_name, "_tx_overload_thresh") == 0) {