130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2006 - 2007 Ivo van Doorn 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2007 Dmitry Torokhov 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Permission to use, copy, modify, and/or distribute this software for any 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * purpose with or without fee is hereby granted, provided that the above 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * copyright notice and this permission notice appear in all copies. 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI__RFKILL_H 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI__RFKILL_H 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* define userspace visible states */ 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_STATE_SOFT_BLOCKED 0 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_STATE_UNBLOCKED 1 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_STATE_HARD_BLOCKED 2 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * enum rfkill_type - type of rfkill switch. 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type) 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_GPS: switch is on a GPS device. 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_FM: switch is on a FM radio device. 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_TYPE_NFC: switch is on an NFC device. 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @NUM_RFKILL_TYPES: number of defined rfkill types 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 4330692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum rfkill_type { 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_ALL = 0, 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_WLAN, 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_BLUETOOTH, 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_UWB, 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_WIMAX, 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_WWAN, 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_GPS, 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_FM, 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_TYPE_NFC, 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng NUM_RFKILL_TYPES, 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * enum rfkill_operation - operation types 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_OP_ADD: a device was added 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_OP_DEL: a device was removed 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) 62ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris * into a state, also updating the default state used for devices that 63ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris * are hot-plugged later. 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 6530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum rfkill_operation { 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_OP_ADD = 0, 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_OP_DEL, 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_OP_CHANGE, 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng RFKILL_OP_CHANGE_ALL, 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/** 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct rfkill_event - events for userspace on /dev/rfkill 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @idx: index of dev rfkill 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @type: type of the rfkill struct 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @op: operation code 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @hard: hard state (0/1) 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @soft: soft state (0/1) 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Structure used for userspace communication on /dev/rfkill, 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * used for events from the kernel and control to the kernel. 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 8330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct rfkill_event { 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 idx; 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 type; 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 op; 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 soft, hard; 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * We are planning to be backward and forward compatible with changes 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * to the event struct, by adding new, optional, members at the end. 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When reading an event (whether the kernel from userspace or vice 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * versa) we need to accept anything that's at least as large as the 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * version 1 event size, but might be able to accept other sizes in 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the future. 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * One exception is the kernel -- we already have two event sizes in 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * that we've made the 'hard' member optional since our only option 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is to ignore it anyway. 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_EVENT_SIZE_V1 8 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ioctl for turning off rfkill-input (if present) */ 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_IOC_MAGIC 'R' 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_IOC_NOINPUT 1 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* and that's all userspace gets */ 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI__RFKILL_H */ 112