-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
wimax/i2400m: allow control of the base-station idle mode timeout
For power saving reasons, WiMAX links can be put in idle mode while connected after a certain time of the link not being used for tx or rx. In this mode, the device pages the base-station regularly and when data is ready to be transmitted, the link is revived. This patch allows the user to control the time the device has to be idle before it decides to go to idle mode from a sysfs interace. It also updates the initialization code to acknowledge the module variable 'idle_mode_disabled' when the firmware is a newer version (upcoming 1.4 vs 2.6.29's v1.3). The method for setting the idle mode timeout in the older firmwares is much more limited and can be only done at initialization time. Thus, the sysfs file will return -ENOSYS on older ones. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Inaky Perez-Gonzalez
authored and
David S. Miller
committed
Mar 2, 2009
1 parent
6a0f7ab
commit 8987691
Showing
7 changed files
with
221 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,7 @@ i2400m-y := \ | |
driver.o \ | ||
fw.o \ | ||
op-rfkill.o \ | ||
sysfs.o \ | ||
netdev.o \ | ||
tx.o \ | ||
rx.o | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Intel Wireless WiMAX Connection 2400m | ||
* Sysfs interfaces to show driver and device information | ||
* | ||
* | ||
* Copyright (C) 2007 Intel Corporation <linux-wimax@intel.com> | ||
* Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License version | ||
* 2 as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||
* 02110-1301, USA. | ||
*/ | ||
|
||
#include <linux/netdevice.h> | ||
#include <linux/etherdevice.h> | ||
#include <linux/spinlock.h> | ||
#include <linux/device.h> | ||
#include "i2400m.h" | ||
|
||
|
||
#define D_SUBMODULE sysfs | ||
#include "debug-levels.h" | ||
|
||
|
||
/* | ||
* Set the idle timeout (msecs) | ||
* | ||
* FIXME: eventually this should be a common WiMAX stack method, but | ||
* would like to wait to see how other devices manage it. | ||
*/ | ||
static | ||
ssize_t i2400m_idle_timeout_store(struct device *dev, | ||
struct device_attribute *attr, | ||
const char *buf, size_t size) | ||
{ | ||
ssize_t result; | ||
struct i2400m *i2400m = net_dev_to_i2400m(to_net_dev(dev)); | ||
unsigned val; | ||
|
||
result = -EINVAL; | ||
if (sscanf(buf, "%u\n", &val) != 1) | ||
goto error_no_unsigned; | ||
if (val != 0 && (val < 100 || val > 300000 || val % 100 != 0)) { | ||
dev_err(dev, "idle_timeout: %u: invalid msecs specification; " | ||
"valid values are 0, 100-300000 in 100 increments\n", | ||
val); | ||
goto error_bad_value; | ||
} | ||
result = i2400m_set_idle_timeout(i2400m, val); | ||
if (result >= 0) | ||
result = size; | ||
error_no_unsigned: | ||
error_bad_value: | ||
return result; | ||
} | ||
|
||
static | ||
DEVICE_ATTR(i2400m_idle_timeout, S_IWUSR, | ||
NULL, i2400m_idle_timeout_store); | ||
|
||
static | ||
struct attribute *i2400m_dev_attrs[] = { | ||
&dev_attr_i2400m_idle_timeout.attr, | ||
NULL, | ||
}; | ||
|
||
struct attribute_group i2400m_dev_attr_group = { | ||
.name = NULL, /* we want them in the same directory */ | ||
.attrs = i2400m_dev_attrs, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters