Sometimes it is necessary to know how the state is, and it is easier to query rfkill than keep track of it somewhere else, so add a function for that. This could later be expanded to return hard/soft block, but so far that isn't necessary. Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> --- include/linux/rfkill.h | 12 ++++++++++++ net/rfkill/core.c | 13 +++++++++++++ 2 files changed, 25 insertions(+) --- wireless-testing.orig/include/linux/rfkill.h 2009-05-21 21:55:37.000000000 +0200 +++ wireless-testing/include/linux/rfkill.h 2009-05-21 21:56:00.000000000 +0200 @@ -225,6 +225,13 @@ void rfkill_set_states(struct rfkill *rf * registered drivers? */ void rfkill_set_global_sw_state(const enum rfkill_type type, bool blocked); + +/** + * rfkill_blocked - query rfkill block + * + * @rfkill: rfkill struct to query + */ +bool rfkill_blocked(struct rfkill *rfkill); #else /* !RFKILL */ static inline struct rfkill * __must_check rfkill_alloc(const char *name, @@ -277,6 +284,11 @@ static inline void rfkill_set_global_sw_ bool blocked) { } + +static inline bool rfkill_blocked(struct rfkill *rfkill) +{ + return false; +} #endif /* RFKILL || RFKILL_MODULE */ --- wireless-testing.orig/net/rfkill/core.c 2009-05-21 21:55:41.000000000 +0200 +++ wireless-testing/net/rfkill/core.c 2009-05-21 21:56:00.000000000 +0200 @@ -862,6 +862,19 @@ void rfkill_destroy(struct rfkill *rfkil } EXPORT_SYMBOL(rfkill_destroy); +bool rfkill_blocked(struct rfkill *rfkill) +{ + unsigned long flags; + u32 state; + + spin_lock_irqsave(&rfkill->lock, flags); + state = rfkill->state; + spin_unlock_irqrestore(&rfkill->lock, flags); + + return !!(state & RFKILL_BLOCK_ANY); +} +EXPORT_SYMBOL(rfkill_blocked); + static int __init rfkill_init(void) { -- -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html