|
@@ -124,6 +124,70 @@ out_unlock:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static ssize_t lbs_host_sleep_write(struct file *file,
|
|
|
+ const char __user *user_buf, size_t count,
|
|
|
+ loff_t *ppos)
|
|
|
+{
|
|
|
+ struct lbs_private *priv = file->private_data;
|
|
|
+ ssize_t buf_size, ret;
|
|
|
+ int host_sleep;
|
|
|
+ unsigned long addr = get_zeroed_page(GFP_KERNEL);
|
|
|
+ char *buf = (char *)addr;
|
|
|
+ if (!buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ buf_size = min(count, len - 1);
|
|
|
+ if (copy_from_user(buf, user_buf, buf_size)) {
|
|
|
+ ret = -EFAULT;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+ ret = sscanf(buf, "%d", &host_sleep);
|
|
|
+ if (ret != 1) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (host_sleep == 0)
|
|
|
+ ret = lbs_set_host_sleep(priv, 0);
|
|
|
+ else if (host_sleep == 1) {
|
|
|
+ if (priv->wol_criteria == EHS_REMOVE_WAKEUP) {
|
|
|
+ lbs_pr_info("wake parameters not configured");
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+ ret = lbs_set_host_sleep(priv, 1);
|
|
|
+ } else {
|
|
|
+ lbs_pr_err("invalid option\n");
|
|
|
+ ret = -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!ret)
|
|
|
+ ret = count;
|
|
|
+
|
|
|
+out_unlock:
|
|
|
+ free_page(addr);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t lbs_host_sleep_read(struct file *file, char __user *userbuf,
|
|
|
+ size_t count, loff_t *ppos)
|
|
|
+{
|
|
|
+ struct lbs_private *priv = file->private_data;
|
|
|
+ ssize_t ret;
|
|
|
+ size_t pos = 0;
|
|
|
+ unsigned long addr = get_zeroed_page(GFP_KERNEL);
|
|
|
+ char *buf = (char *)addr;
|
|
|
+ if (!buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ pos += snprintf(buf, len, "%d\n", priv->is_host_sleep_activated);
|
|
|
+
|
|
|
+ ret = simple_read_from_buffer(userbuf, count, ppos, buf, pos);
|
|
|
+
|
|
|
+ free_page(addr);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* When calling CMD_802_11_SUBSCRIBE_EVENT with CMD_ACT_GET, me might
|
|
|
* get a bunch of vendor-specific TLVs (a.k.a. IEs) back from the
|
|
@@ -675,6 +739,8 @@ static const struct lbs_debugfs_files debugfs_files[] = {
|
|
|
{ "info", 0444, FOPS(lbs_dev_info, write_file_dummy), },
|
|
|
{ "sleepparams", 0644, FOPS(lbs_sleepparams_read,
|
|
|
lbs_sleepparams_write), },
|
|
|
+ { "hostsleep", 0644, FOPS(lbs_host_sleep_read,
|
|
|
+ lbs_host_sleep_write), },
|
|
|
};
|
|
|
|
|
|
static const struct lbs_debugfs_files debugfs_events_files[] = {
|