Print this page
3534 Disable EEE support in igb for I350
*** 23,32 ****
--- 23,33 ----
* 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,1392 ****
--- 1384,1419 ----
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,1514 ****
--- 1532,1548 ----
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) {