Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 193714
b: refs/heads/master
c: 6c26361
h: refs/heads/master
v: v3
  • Loading branch information
florian@mickler.org authored and John W. Linville committed Mar 10, 2010
1 parent 95a2c04 commit 7a8a178
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 69c86373c6ea1149aa559e6088362d58d8ec8835
refs/heads/master: 6c26361e4be3cf0dad7083e38ca52001a987e3e6
25 changes: 25 additions & 0 deletions trunk/Documentation/ABI/stable/sysfs-class-rfkill
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,28 @@ Description: Whether the soft blocked state is initialised from non-volatile
Values: A numeric value.
0: false
1: true


What: /sys/class/rfkill/rfkill[0-9]+/blocked_hw
Date: 23-Feb-2010
KernelVersion v2.6.34
Contact: linux-wireless@vger.kernel.org
Description: Current hardblock state. This file is read only.
Values: A numeric value.
0: inactive
The transmitter is (potentially) active.
1: active
The transmitter is forced off by something outside of
the driver's control.


What: /sys/class/rfkill/rfkill[0-9]+/blocked_sw
Date: 23-Feb-2010
KernelVersion v2.6.34
Contact: linux-wireless@vger.kernel.org
Description: Current softblock state. This file is read and write.
Values: A numeric value.
0: inactive
The transmitter is (potentially) active.
1: active
The transmitter is turned off by software.
58 changes: 58 additions & 0 deletions trunk/net/rfkill/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,61 @@ static ssize_t rfkill_persistent_show(struct device *dev,
return sprintf(buf, "%d\n", rfkill->persistent);
}

static ssize_t rfkill_blocked_hw_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct rfkill *rfkill = to_rfkill(dev);
unsigned long flags;
u32 state;

spin_lock_irqsave(&rfkill->lock, flags);
state = rfkill->state;
spin_unlock_irqrestore(&rfkill->lock, flags);

return sprintf(buf, "%d\n", (state & RFKILL_BLOCK_HW) ? 1 : 0 );
}

static ssize_t rfkill_blocked_sw_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct rfkill *rfkill = to_rfkill(dev);
unsigned long flags;
u32 state;

spin_lock_irqsave(&rfkill->lock, flags);
state = rfkill->state;
spin_unlock_irqrestore(&rfkill->lock, flags);

return sprintf(buf, "%d\n", (state & RFKILL_BLOCK_SW) ? 1 : 0 );
}

static ssize_t rfkill_blocked_sw_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
struct rfkill *rfkill = to_rfkill(dev);
unsigned long state;
int err;

if (!capable(CAP_NET_ADMIN))
return -EPERM;

err = strict_strtoul(buf, 0, &state);
if (err)
return err;

if (state > 1 )
return -EINVAL;

mutex_lock(&rfkill_global_mutex);
rfkill_set_block(rfkill, state);
mutex_unlock(&rfkill_global_mutex);

return err ?: count;
}

static u8 user_state_from_blocked(unsigned long state)
{
if (state & RFKILL_BLOCK_HW)
Expand Down Expand Up @@ -700,6 +755,9 @@ static struct device_attribute rfkill_dev_attrs[] = {
__ATTR(persistent, S_IRUGO, rfkill_persistent_show, NULL),
__ATTR(state, S_IRUGO|S_IWUSR, rfkill_state_show, rfkill_state_store),
__ATTR(claim, S_IRUGO|S_IWUSR, rfkill_claim_show, rfkill_claim_store),
__ATTR(sw, S_IRUGO|S_IWUSR, rfkill_blocked_sw_show,
rfkill_blocked_sw_store),
__ATTR(hw, S_IRUGO, rfkill_blocked_hw_show, NULL),
__ATTR_NULL
};

Expand Down

0 comments on commit 7a8a178

Please sign in to comment.