rfkill - RF switch subsystem support
====================================

1 Introduction
2 Implementation details
3 Kernel driver guidelines
3.1 wireless device drivers
3.2 platform/switch drivers
3.3 input device drivers
4 Kernel API
5 Userspace support


1. Introduction:

The rfkill switch subsystem exists to add a generic interface to circuitry that
can enable or disable the signal output of a wireless *transmitter* of any
type.  By far, the most common use is to disable radio-frequency transmitters.

Note that disabling the signal output means that the the transmitter is to be
made to not emit any energy when "blocked".  rfkill is not about blocking data
transmissions, it is about blocking energy emission.

The rfkill subsystem offers support for keys and switches often found on
laptops to enable wireless devices like WiFi and Bluetooth, so that these keys
and switches actually perform an action in all wireless devices of a given type
attached to the system.

The buttons to enable and disable the wireless transmitters are important in
situations where the user is for example using his laptop on a location where
radio-frequency transmitters _must_ be disabled (e.g. airplanes).

Because of this requirement, userspace support for the keys should not be made
mandatory.  Because userspace might want to perform some additional smarter
tasks when the key is pressed, rfkill provides userspace the possibility to
take over the task to handle the key events.

===============================================================================
2: Implementation details

The rfkill subsystem is composed of various components: the rfkill class, the
rfkill-input module (an input layer handler), and some specific input layer
events.

The rfkill class provides kernel drivers with an interface that allows them to
know when they should enable or disable a wireless network device transmitter.
This is enabled by the CONFIG_RFKILL Kconfig option.

The rfkill class support makes sure userspace will be notified of all state
changes on rfkill devices through uevents.  It provides a notification chain
for interested parties in the kernel to also get notified of rfkill state
changes in other drivers.  It creates several sysfs entries which can be used
by userspace.  See section "Userspace support".

The rfkill-input module provides the kernel with the ability to implement a
basic response when the user presses a key or button (or toggles a switch)
related to rfkill functionality.  It is an in-kernel implementation of default
policy of reacting to rfkill-related input events and neither mandatory nor
required for wireless drivers to operate.  It is enabled by the
CONFIG_RFKILL_INPUT Kconfig option.

rfkill-input is a rfkill-related events input layer handler.  This handler will
listen to all rfkill key events and will change the rfkill state of the
wireless devices accordingly.  With this option enabled userspace could either
do nothing or simply perform monitoring tasks.

The rfkill-input module also provides EPO (emergency power-off) functionality
for all wireless transmitters.  This function cannot be overridden, and it is
always active.  rfkill EPO is related to *_RFKILL_ALL input layer events.


Important terms for the rfkill subsystem:

In order to avoid confusion, we avoid the term "switch" in rfkill when it is
referring to an electronic control circuit that enables or disables a
transmitter.  We reserve it for the physical device a human manipulates
(which is an input device, by the way):

rfkill switch:

	A physical device a human manipulates.  Its state can be perceived by
	the kernel either directly (through a GPIO pin, ACPI GPE) or by its
	effect on a rfkill line of a wireless device.

rfkill controller:

	A hardware circuit that controls the state of a rfkill line, which a
	kernel driver can interact with *to modify* that state (i.e. it has
	either write-only or read/write access).

rfkill line:

	An input channel (hardware or software) of a wireless device, which
	causes a wireless transmitter to stop emitting energy (BLOCK) when it
	is active.  Point of view is extremely important here: rfkill lines are
	always seen from the PoV of a wireless device (and its driver).

soft rfkill line/software rfkill line:

	A rfkill line the wireless device driver can directly change the state
	of.  Related to rfkill_state RFKILL_STATE_SOFT_BLOCKED.

hard rfkill line/hardware rfkill line:

	A rfkill line that works fully in hardware or firmware, and that cannot
	be overridden by the kernel driver.  The hardware device or the
	firmware just exports its status to the driver, but it is read-only.
	Related to rfkill_state RFKILL_STATE_HARD_BLOCKED.

The enum rfkill_state describes the rfkill state of a transmitter:

When a rfkill line or rfkill controller is in the RFKILL_STATE_UNBLOCKED state,
the wireless transmitter (radio TX circuit for example) is *enabled*.  When the
it is in the RFKILL_STATE_SOFT_BLOCKED or RFKILL_STATE_HARD_BLOCKED, the
wireless transmitter is to be *blocked* from operating.

RFKILL_STATE_SOFT_BLOCKED indicates that a call to toggle_radio() can change
that state.  RFKILL_STATE_HARD_BLOCKED indicates that a call to toggle_radio()
will not be able to change the state and will return with a suitable error if
attempts are made to set the state to RFKILL_STATE_UNBLOCKED.

RFKILL_STATE_HARD_BLOCKED is used by drivers to signal that the device is
locked in the BLOCKED state by a hardwire rfkill line (typically an input pin
that, when active, forces the transmitter to be disabled) which the driver
CANNOT override.

Full rfkill functionality requires two different subsystems to cooperate: the
input layer and the rfkill class.  The input layer issues *commands* to the
entire system requesting that devices registered to the rfkill class change
state.  The way this interaction happens is not complex, but it is not obvious
either:

Kernel Input layer:

	* Generates KEY_WWAN, KEY_WLAN, KEY_BLUETOOTH, SW_RFKILL_ALL, and
	  other such events when the user presses certain keys, buttons, or
	  toggles certain physical switches.

	THE INPUT LAYER IS NEVER USED TO PROPAGATE STATUS, NOTIFICATIONS OR THE
	KIND OF STUFF AN ON-SCREEN-DISPLAY APPLICATION WOULD REPORT.  It is
	used to issue *commands* for the system to change behaviour, and these
	commands may or may not be carried out by some kernel driver or
	userspace application.  It follows that doing user feedback based only
	on input events is broken, as there is no guarantee that an input event
	will be acted upon.

	Most wireless communication device drivers implementing rfkill
	functionality MUST NOT generate these events, and have no reason to
	register themselves with the input layer.  Doing otherwise is a common
	misconception.  There is an API to propagate rfkill status change
	information, and it is NOT the input layer.

rfkill class:

	* Calls a hook in a driver to effectively change the wireless
	  transmitter state;
	* Keeps track of the wireless transmitter state (with help from
	  the driver);
	* Generates userspace notifications (uevents) and a call to a
	  notification chain (kernel) when there is a wireless transmitter
	  state change;
	* Connects a wireless communications driver with the common rfkill
	  control system, which, for example, allows actions such as
	  "switch all bluetooth devices offline" to be carried out by
	  userspace or by rfkill-input.

	THE RFKILL CLASS NEVER ISSUES INPUT EVENTS.  THE RFKILL CLASS DOES
	NOT LISTEN TO INPUT EVENTS.  NO DRIVER USING THE RFKILL CLASS SHALL
	EVER LISTEN TO, OR ACT ON RFKILL INPUT EVENTS.  Doing otherwise is
	a layering violation.

	Most wireless data communication drivers in the kernel have just to
	implement the rfkill class API to work properly.  Interfacing to the
	input layer is not often required (and is very often a *bug*) on
	wireless drivers.

	Platform drivers often have to attach to the input layer to *issue*
	(but never to listen to) rfkill events for rfkill switches, and also to
	the rfkill class to export a control interface for the platform rfkill
	controllers to the rfkill subsystem.  This does NOT mean the rfkill
	switch is attached to a rfkill class (doing so is almost always wrong).
	It just means the same kernel module is the driver for different
	devices (rfkill switches and rfkill controllers).


Userspace input handlers (uevents) or kernel input handlers (rfkill-input):

	* Implements the policy of what should happen when one of the input
	  layer events related to rfkill operation is received.
	* Uses the sysfs interface (userspace) or private rfkill API calls
	  to tell the devices registered with the rfkill class to change
	  their state (i.e. translates the input layer event into real
	  action).
	* rfkill-input implements EPO by handling EV_SW SW_RFKILL_ALL 0
	  (power off all transmitters) in a special way: it ignores any
	  overrides and local state cache and forces all transmitters to the
	  RFKILL_STATE_SOFT_BLOCKED state (including those which are already
	  supposed to be BLOCKED).  Note that the opposite event (power on all
	  transmitters) is handled normally.

Userspace uevent handler or kernel platform-specific drivers hooked to the
rfkill notifier chain:

	* Taps into the rfkill notifier chain or to KOBJ_CHANGE uevents,
	  in order to know when a device that is registered with the rfkill
	  class changes state;
	* Issues feedback notifications to the user;
	* In the rare platforms where this is required, synthesizes an input
	  event to command all *OTHER* rfkill devices to also change their
	  statues when a specific rfkill device changes state.


===============================================================================
3: Kernel driver guidelines

Remember: point-of-view is everything for a driver that connects to the rfkill
subsystem.  All the details below must be measured/perceived from the point of
view of the specific driver being modified.

The first thing one needs to know is whether his driver should be talking to
the rfkill class or to the input layer.  In rare cases (platform drivers), it
could happen that you need to do both, as platform drivers often handle a
variety of devices in the same driver.

Do not mistake input devices for rfkill controllers.  The only type of "rfkill
switch" device that is to be registered with the rfkill class are those
directly controlling the circuits that cause a wireless transmitter to stop
working (or the software equivalent of them), i.e. what we call a rfkill
controller.  Every other kind of "rfkill switch" is just an input device and
MUST NOT be registered with the rfkill class.

A driver should register a device with the rfkill class when ALL of the
following conditions are met (they define a rfkill controller):

1. The device is/controls a data communications wireless transmitter;

2. The kernel can interact with the hardware/firmware to CHANGE the wireless
   transmitter state (block/unblock TX operation);

3. The transmitter can be made to not emit any energy when "blocked":
   rfkill is not about blocking data transmissions, it is about blocking
   energy emission;

A driver should register a device with the input subsystem to issue
rfkill-related events (KEY_WLAN, KEY_BLUETOOTH, KEY_WWAN, KEY_WIMAX,
SW_RFKILL_ALL, etc) when ALL of the folowing conditions are met:

1. It is directly related to some physical device the user interacts with, to
   command the O.S./firmware/hardware to enable/disable a data communications
   wireless transmitter.

   Examples of the physical device are: buttons, keys and switches the user
   will press/touch/slide/switch to enable or disable the wireless
   communication device.

2. It is NOT slaved to another device, i.e. there is no other device that
   issues rfkill-related input events in preference to this one.

   Please refer to the corner cases and examples section for more details.

When in doubt, do not issue input events.  For drivers that should generate
input events in some platforms, but not in others (e.g. b43), the best solution
is to NEVER generate input events in the first place.  That work should be
deferred to a platform-specific kernel module (which will know when to generate
events through the rfkill notifier chain) or to userspace.  This avoids the
usual maintenance problems with DMI whitelisting.


Corner cases and examples:
====================================

1. If the device is an input device that, because of hardware or firmware,
causes wireless transmitters to be blocked regardless of the kernel's will, it
is still just an input device, and NOT to be registered with the rfkill class.

2. If the wireless transmitter switch control is read-only, it is an input
device and not to be registered with the rfkill class (and maybe not to be made
an input layer event source either, see below).

3. If there is some other device driver *closer* to the actual hardware the
user interacted with (the button/switch/key) to issue an input event, THAT is
the device driver that should be issuing input events.

E.g:
  [RFKILL slider switch] -- [GPIO hardware] -- [WLAN card rf-kill input]
                           (platform driver)    (wireless card driver)

The user is closer to the RFKILL slide switch plaform driver, so the driver
which must issue input events is the platform driver looking at the GPIO
hardware, and NEVER the wireless card driver (which is just a slave).  It is
very likely that there are other leaves than just the WLAN card rf-kill input
(e.g. a bluetooth card, etc)...

On the other hand, some embedded devices do this:

  [RFKILL slider switch] -- [WLAN card rf-kill input]
                             (wireless card driver)

In this situation, the wireless card driver *could* register itself as an input
device and issue rf-kill related input events... but in order to AVOID the need
for DMI whitelisting, the wireless card driver does NOT do it.  Userspace (HAL)
or a platform driver (that exists only on these embedded devices) will do the
dirty job of issuing the input events.


COMMON MISTAKES in kernel drivers, related to rfkill:
====================================

1. NEVER confuse input device keys and buttons with input device switches.

  1a. Switches are always set or reset.  They report the current state
      (on position or off position).

  1b. Keys and buttons are either in the pressed or not-pressed state, and
      that's it.  A "button" that latches down when you press it, and
      unlatches when you press it again is in fact a switch as far as input
      devices go.

Add the SW_* events you need for switches, do NOT try to emulate a button using
KEY_* events just because there is no such SW_* event yet.  Do NOT try to use,
for example, KEY_BLUETOOTH when you should be using SW_BLUETOOTH instead.

2. Input device switches (sources of EV_SW events) DO store their current state
(so you *must* initialize it by issuing a gratuitous input layer event on
driver start-up and also when resuming from sleep), and that state CAN be
queried from userspace through IOCTLs.  There is no sysfs interface for this,
but that doesn't mean you should break things trying to hook it to the rfkill
class to get a sysfs interface :-)

3. Do not issue *_RFKILL_ALL events by default, unless you are sure it is the
correct event for your switch/button.  These events are emergency power-off
events when they are trying to turn the transmitters off.  An example of an
input device which SHOULD generate *_RFKILL_ALL events is the wireless-kill
switch in a laptop which is NOT a hotkey, but a real switch that kills radios
in hardware, even if the O.S. has gone to lunch.  An example of an input device
which SHOULD NOT generate *_RFKILL_ALL events by default, is any sort of hot
key that does nothing by itself, as well as any hot key that is type-specific
(e.g. the one for WLAN).


3.1 Guidelines for wireless device drivers
------------------------------------------

(in this text, rfkill->foo means the foo field of struct rfkill).

1. Each independent transmitter in a wireless device (usually there is only one
transmitter per device) should have a SINGLE rfkill class attached to it.

2. If the device does not have any sort of hardware assistance to allow the
driver to rfkill the device, the driver should emulate it by taking all actions
required to silence the transmitter.

3. If it is impossible to silence the transmitter (i.e. it still emits energy,
even if it is just in brief pulses, when there is no data to transmit and there
is no hardware support to turn it off) do NOT lie to the users.  Do not attach
it to a rfkill class.  The rfkill subsystem does not deal with data
transmission, it deals with energy emission.  If the transmitter is emitting
energy, it is not blocked in rfkill terms.

4. It doesn't matter if the device has multiple rfkill input lines affecting
the same transmitter, their combined state is to be exported as a single state
per transmitter (see rule 1).

This rule exists because users of the rfkill subsystem expect to get (and set,
when possible) the overall transmitter rfkill state, not of a particular rfkill
line.

5. The wireless device driver MUST NOT leave the transmitter enabled during
suspend and hibernation unless:

	5.1. The transmitter has to be enabled for some sort of functionality
	like wake-on-wireless-packet or autonomous packed forwarding in a mesh
	network, and that functionality is enabled for this suspend/hibernation
	cycle.

AND

	5.2. The device was not on a user-requested BLOCKED state before
	the suspend (i.e. the driver must NOT unblock a device, not even
	to support wake-on-wireless-packet or remain in the mesh).

In other words, there is absolutely no allowed scenario where a driver can
automatically take action to unblock a rfkill controller (obviously, this deals
with scenarios where soft-blocking or both soft and hard blocking is happening.
Scenarios where hardware rfkill lines are the only ones blocking the
transmitter are outside of this rule, since the wireless device driver does not
control its input hardware rfkill lines in the first place).

6. During resume, rfkill will try to restore its previous state.

7. After a rfkill class is suspended, it will *not* call rfkill->toggle_radio
until it is resumed.


Example of a WLAN wireless driver connected to the rfkill subsystem:
--------------------------------------------------------------------

A certain WLAN card has one input pin that causes it to block the transmitter
and makes the status of that input pin available (only for reading!) to the
kernel driver.  This is a hard rfkill input line (it cannot be overridden by
the kernel driver).

The card also has one PCI register that, if manipulated by the driver, causes
it to block the transmitter.  This is a soft rfkill input line.

It has also a thermal protection circuitry that shuts down its transmitter if
the card overheats, and makes the status of that protection available (only for
reading!) to the kernel driver.  This is also a hard rfkill input line.

If either one of these rfkill lines are active, the transmitter is blocked by
the hardware and forced offline.

The driver should allocate and attach to its struct device *ONE* instance of
the rfkill class (there is only one transmitter).

It can implement the get_state() hook, and return RFKILL_STATE_HARD_BLOCKED if
either one of its two hard rfkill input lines are active.  If the two hard
rfkill lines are inactive, it must return RFKILL_STATE_SOFT_BLOCKED if its soft
rfkill input line is active.  Only if none of the rfkill input lines are
active, will it return RFKILL_STATE_UNBLOCKED.

Since the device has a hardware rfkill line, it IS subject to state changes
external to rfkill.  Therefore, the driver must make sure that it calls
rfkill_force_state() to keep the status always up-to-date, and it must do a
rfkill_force_state() on resume from sleep.

Every time the driver gets a notification from the card that one of its rfkill
lines changed state (polling might be needed on badly designed cards that don't
generate interrupts for such events), it recomputes the rfkill state as per
above, and calls rfkill_force_state() to update it.

The driver should implement the toggle_radio() hook, that:

1. Returns an error if one of the hardware rfkill lines are active, and the
caller asked for RFKILL_STATE_UNBLOCKED.

2. Activates the soft rfkill line if the caller asked for state
RFKILL_STATE_SOFT_BLOCKED.  It should do this even if one of the hard rfkill
lines are active, effectively double-blocking the transmitter.

3. Deactivates the soft rfkill line if none of the hardware rfkill lines are
active and the caller asked for RFKILL_STATE_UNBLOCKED.

===============================================================================
4: Kernel API

To build a driver with rfkill subsystem support, the driver should depend on
(or select) the Kconfig symbol RFKILL; it should _not_ depend on RKFILL_INPUT.

The hardware the driver talks to may be write-only (where the current state
of the hardware is unknown), or read-write (where the hardware can be queried
about its current state).

The rfkill class will call the get_state hook of a device every time it needs
to know the *real* current state of the hardware.  This can happen often, but
it does not do any polling, so it is not enough on hardware that is subject
to state changes outside of the rfkill subsystem.

Therefore, calling rfkill_force_state() when a state change happens is
mandatory when the device has a hardware rfkill line, or when something else
like the firmware could cause its state to be changed without going through the
rfkill class.

Some hardware provides events when its status changes.  In these cases, it is
best for the driver to not provide a get_state hook, and instead register the
rfkill class *already* with the correct status, and keep it updated using
rfkill_force_state() when it gets an event from the hardware.

rfkill_force_state() must be used on the device resume handlers to update the
rfkill status, should there be any chance of the device status changing during
the sleep.

There is no provision for a statically-allocated rfkill struct.  You must
use rfkill_allocate() to allocate one.

You should:
	- rfkill_allocate()
	- modify rfkill fields (flags, name)
	- modify state to the current hardware state (THIS IS THE ONLY TIME
	  YOU CAN ACCESS state DIRECTLY)
	- rfkill_register()

The only way to set a device to the RFKILL_STATE_HARD_BLOCKED state is through
a suitable return of get_state() or through rfkill_force_state().

When a device is in the RFKILL_STATE_HARD_BLOCKED state, the only way to switch
it to a different state is through a suitable return of get_state() or through
rfkill_force_state().

If toggle_radio() is called to set a device to state RFKILL_STATE_SOFT_BLOCKED
when that device is already at the RFKILL_STATE_HARD_BLOCKED state, it should
not return an error.  Instead, it should try to double-block the transmitter,
so that its state will change from RFKILL_STATE_HARD_BLOCKED to
RFKILL_STATE_SOFT_BLOCKED should the hardware blocking cease.

Please refer to the source for more documentation.

===============================================================================
5: Userspace support

rfkill devices issue uevents (with an action of "change"), with the following
environment variables set:

RFKILL_NAME
RFKILL_STATE
RFKILL_TYPE

The ABI for these variables is defined by the sysfs attributes.  It is best
to take a quick look at the source to make sure of the possible values.

It is expected that HAL will trap those, and bridge them to DBUS, etc.  These
events CAN and SHOULD be used to give feedback to the user about the rfkill
status of the system.

Input devices may issue events that are related to rfkill.  These are the
various KEY_* events and SW_* events supported by rfkill-input.c.

******IMPORTANT******
When rfkill-input is ACTIVE, userspace is NOT TO CHANGE THE STATE OF AN RFKILL
SWITCH IN RESPONSE TO AN INPUT EVENT also handled by rfkill-input, unless it
has set to true the user_claim attribute for that particular switch.  This rule
is *absolute*; do NOT violate it.
******IMPORTANT******

Userspace must not assume it is the only source of control for rfkill switches.
Their state CAN and WILL change due to firmware actions, direct user actions,
and the rfkill-input EPO override for *_RFKILL_ALL.

When rfkill-input is not active, userspace must initiate a rfkill status
change by writing to the "state" attribute in order for anything to happen.

Take particular care to implement EV_SW SW_RFKILL_ALL properly.  When that
switch is set to OFF, *every* rfkill device *MUST* be immediately put into the
RFKILL_STATE_SOFT_BLOCKED state, no questions asked.

The following sysfs entries will be created:

	name: Name assigned by driver to this key (interface or driver name).
	type: Name of the key type ("wlan", "bluetooth", etc).
	state: Current state of the transmitter
		0: RFKILL_STATE_SOFT_BLOCKED
			transmitter is forced off, but one can override it
			by a write to the state attribute;
		1: RFKILL_STATE_UNBLOCKED
			transmiter is NOT forced off, and may operate if
			all other conditions for such operation are met
			(such as interface is up and configured, etc);
		2: RFKILL_STATE_HARD_BLOCKED
			transmitter is forced off by something outside of
			the driver's control.  One cannot set a device to
			this state through writes to the state attribute;
	claim: 1: Userspace handles events, 0: Kernel handles events

Both the "state" and "claim" entries are also writable. For the "state" entry
this means that when 1 or 0 is written, the device rfkill state (if not yet in
the requested state), will be will be toggled accordingly.

For the "claim" entry writing 1 to it means that the kernel no longer handles
key events even though RFKILL_INPUT input was enabled. When "claim" has been
set to 0, userspace should make sure that it listens for the input events or
check the sysfs "state" entry regularly to correctly perform the required tasks
when the rkfill key is pressed.

A note about input devices and EV_SW events:

In order to know the current state of an input device switch (like
SW_RFKILL_ALL), you will need to use an IOCTL.  That information is not
available through sysfs in a generic way at this time, and it is not available
through the rfkill class AT ALL.
