linux-headers (unknown)

(root)/
include/
linux/
nfc.h
       1  /*
       2   * Copyright (C) 2011 Instituto Nokia de Tecnologia
       3   *
       4   * Authors:
       5   *    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
       6   *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
       7   *
       8   * Permission to use, copy, modify, and/or distribute this software for any
       9   * purpose with or without fee is hereby granted, provided that the above
      10   * copyright notice and this permission notice appear in all copies.
      11   *
      12   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      13   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
      14   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
      15   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
      16   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
      17   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
      18   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
      19   */
      20  
      21  #ifndef __LINUX_NFC_H
      22  #define __LINUX_NFC_H
      23  
      24  #include <linux/types.h>
      25  #include <linux/socket.h>
      26  
      27  #define NFC_GENL_NAME "nfc"
      28  #define NFC_GENL_VERSION 1
      29  
      30  #define NFC_GENL_MCAST_EVENT_NAME "events"
      31  
      32  /**
      33   * enum nfc_commands - supported nfc commands
      34   *
      35   * @NFC_CMD_UNSPEC: unspecified command
      36   *
      37   * @NFC_CMD_GET_DEVICE: request information about a device (requires
      38   *	%NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices
      39   * @NFC_CMD_DEV_UP: turn on the nfc device
      40   *	(requires %NFC_ATTR_DEVICE_INDEX)
      41   * @NFC_CMD_DEV_DOWN: turn off the nfc device
      42   *	(requires %NFC_ATTR_DEVICE_INDEX)
      43   * @NFC_CMD_START_POLL: start polling for targets using the given protocols
      44   *	(requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS)
      45   * @NFC_CMD_STOP_POLL: stop polling for targets (requires
      46   *	%NFC_ATTR_DEVICE_INDEX)
      47   * @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires
      48   *	%NFC_ATTR_DEVICE_INDEX)
      49   * @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found
      50   *	(it sends %NFC_ATTR_DEVICE_INDEX)
      51   * @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred
      52   *	(it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and
      53   *	%NFC_ATTR_PROTOCOLS)
      54   * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed
      55   *	(it sends %NFC_ATTR_DEVICE_INDEX)
      56   * @NFC_EVENT_TM_ACTIVATED: event emitted when the adapter is activated in
      57   *      target mode.
      58   * @NFC_EVENT_DEVICE_DEACTIVATED: event emitted when the adapter is deactivated
      59   *      from target mode.
      60   * @NFC_CMD_LLC_GET_PARAMS: request LTO, RW, and MIUX parameters for a device
      61   * @NFC_CMD_LLC_SET_PARAMS: set one or more of LTO, RW, and MIUX parameters for
      62   *	a device. LTO must be set before the link is up otherwise -EINPROGRESS
      63   *	is returned. RW and MIUX can be set at anytime and will be passed in
      64   *	subsequent CONNECT and CC messages.
      65   *	If one of the passed parameters is wrong none is set and -EINVAL is
      66   *	returned.
      67   * @NFC_CMD_ENABLE_SE: Enable the physical link to a specific secure element.
      68   *	Once enabled a secure element will handle card emulation mode, i.e.
      69   *	starting a poll from a device which has a secure element enabled means
      70   *	we want to do SE based card emulation.
      71   * @NFC_CMD_DISABLE_SE: Disable the physical link to a specific secure element.
      72   * @NFC_CMD_FW_DOWNLOAD: Request to Load/flash firmware, or event to inform
      73   *	that some firmware was loaded
      74   * @NFC_EVENT_SE_ADDED: Event emitted when a new secure element is discovered.
      75   *	This typically will be sent whenever a new NFC controller with either
      76   *	an embedded SE or an UICC one connected to it through SWP.
      77   * @NFC_EVENT_SE_REMOVED: Event emitted when a secure element is removed from
      78   *	the system, as a consequence of e.g. an NFC controller being unplugged.
      79   * @NFC_EVENT_SE_CONNECTIVITY: This event is emitted whenever a secure element
      80   *	is requesting connectivity access. For example a UICC SE may need to
      81   *	talk with a sleeping modem and will notify this need by sending this
      82   *	event. It is then up to userspace to decide if it will wake the modem
      83   *	up or not.
      84   * @NFC_EVENT_SE_TRANSACTION: This event is sent when an application running on
      85   *	a specific SE notifies us about the end of a transaction. The parameter
      86   *	for this event is the application ID (AID).
      87   * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller.
      88   * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element.
      89   * @NFC_CMD_ACTIVATE_TARGET: Request NFC controller to reactivate target.
      90   * @NFC_CMD_VENDOR: Vendor specific command, to be implemented directly
      91   *	from the driver in order to support hardware specific operations.
      92   * @NFC_CMD_DEACTIVATE_TARGET: Request NFC controller to deactivate target.
      93   */
      94  enum nfc_commands {
      95  	NFC_CMD_UNSPEC,
      96  	NFC_CMD_GET_DEVICE,
      97  	NFC_CMD_DEV_UP,
      98  	NFC_CMD_DEV_DOWN,
      99  	NFC_CMD_DEP_LINK_UP,
     100  	NFC_CMD_DEP_LINK_DOWN,
     101  	NFC_CMD_START_POLL,
     102  	NFC_CMD_STOP_POLL,
     103  	NFC_CMD_GET_TARGET,
     104  	NFC_EVENT_TARGETS_FOUND,
     105  	NFC_EVENT_DEVICE_ADDED,
     106  	NFC_EVENT_DEVICE_REMOVED,
     107  	NFC_EVENT_TARGET_LOST,
     108  	NFC_EVENT_TM_ACTIVATED,
     109  	NFC_EVENT_TM_DEACTIVATED,
     110  	NFC_CMD_LLC_GET_PARAMS,
     111  	NFC_CMD_LLC_SET_PARAMS,
     112  	NFC_CMD_ENABLE_SE,
     113  	NFC_CMD_DISABLE_SE,
     114  	NFC_CMD_LLC_SDREQ,
     115  	NFC_EVENT_LLC_SDRES,
     116  	NFC_CMD_FW_DOWNLOAD,
     117  	NFC_EVENT_SE_ADDED,
     118  	NFC_EVENT_SE_REMOVED,
     119  	NFC_EVENT_SE_CONNECTIVITY,
     120  	NFC_EVENT_SE_TRANSACTION,
     121  	NFC_CMD_GET_SE,
     122  	NFC_CMD_SE_IO,
     123  	NFC_CMD_ACTIVATE_TARGET,
     124  	NFC_CMD_VENDOR,
     125  	NFC_CMD_DEACTIVATE_TARGET,
     126  /* private: internal use only */
     127  	__NFC_CMD_AFTER_LAST
     128  };
     129  #define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1)
     130  
     131  /**
     132   * enum nfc_attrs - supported nfc attributes
     133   *
     134   * @NFC_ATTR_UNSPEC: unspecified attribute
     135   *
     136   * @NFC_ATTR_DEVICE_INDEX: index of nfc device
     137   * @NFC_ATTR_DEVICE_NAME: device name, max 8 chars
     138   * @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from
     139   *	NFC_PROTO_*_MASK constants
     140   * @NFC_ATTR_TARGET_INDEX: index of the nfc target
     141   * @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID
     142   * @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the
     143   *	target is not NFC-Forum compliant)
     144   * @NFC_ATTR_TARGET_NFCID1: NFC-A targets identifier, max 10 bytes
     145   * @NFC_ATTR_TARGET_SENSB_RES: NFC-B targets extra information, max 12 bytes
     146   * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes
     147   * @NFC_ATTR_COMM_MODE: Passive or active mode
     148   * @NFC_ATTR_RF_MODE: Initiator or target
     149   * @NFC_ATTR_IM_PROTOCOLS: Initiator mode protocols to poll for
     150   * @NFC_ATTR_TM_PROTOCOLS: Target mode protocols to listen for
     151   * @NFC_ATTR_LLC_PARAM_LTO: Link TimeOut parameter
     152   * @NFC_ATTR_LLC_PARAM_RW: Receive Window size parameter
     153   * @NFC_ATTR_LLC_PARAM_MIUX: MIU eXtension parameter
     154   * @NFC_ATTR_SE: Available Secure Elements
     155   * @NFC_ATTR_FIRMWARE_NAME: Free format firmware version
     156   * @NFC_ATTR_SE_INDEX: Secure element index
     157   * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED)
     158   * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status
     159   * @NFC_ATTR_APDU: Secure element APDU
     160   * @NFC_ATTR_TARGET_ISO15693_DSFID: ISO 15693 Data Storage Format Identifier
     161   * @NFC_ATTR_TARGET_ISO15693_UID: ISO 15693 Unique Identifier
     162   * @NFC_ATTR_SE_PARAMS: Parameters data from an evt_transaction
     163   * @NFC_ATTR_VENDOR_ID: NFC manufacturer unique ID, typically an OUI
     164   * @NFC_ATTR_VENDOR_SUBCMD: Vendor specific sub command
     165   * @NFC_ATTR_VENDOR_DATA: Vendor specific data, to be optionally passed
     166   *	to a vendor specific command implementation
     167   */
     168  enum nfc_attrs {
     169  	NFC_ATTR_UNSPEC,
     170  	NFC_ATTR_DEVICE_INDEX,
     171  	NFC_ATTR_DEVICE_NAME,
     172  	NFC_ATTR_PROTOCOLS,
     173  	NFC_ATTR_TARGET_INDEX,
     174  	NFC_ATTR_TARGET_SENS_RES,
     175  	NFC_ATTR_TARGET_SEL_RES,
     176  	NFC_ATTR_TARGET_NFCID1,
     177  	NFC_ATTR_TARGET_SENSB_RES,
     178  	NFC_ATTR_TARGET_SENSF_RES,
     179  	NFC_ATTR_COMM_MODE,
     180  	NFC_ATTR_RF_MODE,
     181  	NFC_ATTR_DEVICE_POWERED,
     182  	NFC_ATTR_IM_PROTOCOLS,
     183  	NFC_ATTR_TM_PROTOCOLS,
     184  	NFC_ATTR_LLC_PARAM_LTO,
     185  	NFC_ATTR_LLC_PARAM_RW,
     186  	NFC_ATTR_LLC_PARAM_MIUX,
     187  	NFC_ATTR_SE,
     188  	NFC_ATTR_LLC_SDP,
     189  	NFC_ATTR_FIRMWARE_NAME,
     190  	NFC_ATTR_SE_INDEX,
     191  	NFC_ATTR_SE_TYPE,
     192  	NFC_ATTR_SE_AID,
     193  	NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS,
     194  	NFC_ATTR_SE_APDU,
     195  	NFC_ATTR_TARGET_ISO15693_DSFID,
     196  	NFC_ATTR_TARGET_ISO15693_UID,
     197  	NFC_ATTR_SE_PARAMS,
     198  	NFC_ATTR_VENDOR_ID,
     199  	NFC_ATTR_VENDOR_SUBCMD,
     200  	NFC_ATTR_VENDOR_DATA,
     201  /* private: internal use only */
     202  	__NFC_ATTR_AFTER_LAST
     203  };
     204  #define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1)
     205  
     206  enum nfc_sdp_attr {
     207  	NFC_SDP_ATTR_UNSPEC,
     208  	NFC_SDP_ATTR_URI,
     209  	NFC_SDP_ATTR_SAP,
     210  /* private: internal use only */
     211  	__NFC_SDP_ATTR_AFTER_LAST
     212  };
     213  #define NFC_SDP_ATTR_MAX (__NFC_SDP_ATTR_AFTER_LAST - 1)
     214  
     215  #define NFC_DEVICE_NAME_MAXSIZE		8
     216  #define NFC_NFCID1_MAXSIZE		10
     217  #define NFC_NFCID2_MAXSIZE		8
     218  #define NFC_NFCID3_MAXSIZE		10
     219  #define NFC_SENSB_RES_MAXSIZE		12
     220  #define NFC_SENSF_RES_MAXSIZE		18
     221  #define NFC_ATR_REQ_MAXSIZE		64
     222  #define NFC_ATR_RES_MAXSIZE		64
     223  #define NFC_ATR_REQ_GB_MAXSIZE		48
     224  #define NFC_ATR_RES_GB_MAXSIZE		47
     225  #define NFC_GB_MAXSIZE			48
     226  #define NFC_FIRMWARE_NAME_MAXSIZE	32
     227  #define NFC_ISO15693_UID_MAXSIZE	8
     228  
     229  /* NFC protocols */
     230  #define NFC_PROTO_JEWEL		1
     231  #define NFC_PROTO_MIFARE	2
     232  #define NFC_PROTO_FELICA	3
     233  #define NFC_PROTO_ISO14443	4
     234  #define NFC_PROTO_NFC_DEP	5
     235  #define NFC_PROTO_ISO14443_B	6
     236  #define NFC_PROTO_ISO15693	7
     237  
     238  #define NFC_PROTO_MAX		8
     239  
     240  /* NFC communication modes */
     241  #define NFC_COMM_ACTIVE  0
     242  #define NFC_COMM_PASSIVE 1
     243  
     244  /* NFC RF modes */
     245  #define NFC_RF_INITIATOR 0
     246  #define NFC_RF_TARGET    1
     247  #define NFC_RF_NONE      2
     248  
     249  /* NFC protocols masks used in bitsets */
     250  #define NFC_PROTO_JEWEL_MASK      (1 << NFC_PROTO_JEWEL)
     251  #define NFC_PROTO_MIFARE_MASK     (1 << NFC_PROTO_MIFARE)
     252  #define NFC_PROTO_FELICA_MASK	  (1 << NFC_PROTO_FELICA)
     253  #define NFC_PROTO_ISO14443_MASK	  (1 << NFC_PROTO_ISO14443)
     254  #define NFC_PROTO_NFC_DEP_MASK	  (1 << NFC_PROTO_NFC_DEP)
     255  #define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B)
     256  #define NFC_PROTO_ISO15693_MASK	  (1 << NFC_PROTO_ISO15693)
     257  
     258  /* NFC Secure Elements */
     259  #define NFC_SE_UICC     0x1
     260  #define NFC_SE_EMBEDDED 0x2
     261  
     262  #define NFC_SE_DISABLED 0x0
     263  #define NFC_SE_ENABLED  0x1
     264  
     265  struct sockaddr_nfc {
     266  	__kernel_sa_family_t sa_family;
     267  	__u32 dev_idx;
     268  	__u32 target_idx;
     269  	__u32 nfc_protocol;
     270  };
     271  
     272  #define NFC_LLCP_MAX_SERVICE_NAME 63
     273  struct sockaddr_nfc_llcp {
     274  	__kernel_sa_family_t sa_family;
     275  	__u32 dev_idx;
     276  	__u32 target_idx;
     277  	__u32 nfc_protocol;
     278  	__u8 dsap; /* Destination SAP, if known */
     279  	__u8 ssap; /* Source SAP to be bound to */
     280  	char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */;
     281  	__kernel_size_t service_name_len;
     282  };
     283  
     284  /* NFC socket protocols */
     285  #define NFC_SOCKPROTO_RAW	0
     286  #define NFC_SOCKPROTO_LLCP	1
     287  #define NFC_SOCKPROTO_MAX	2
     288  
     289  #define NFC_HEADER_SIZE 1
     290  
     291  /**
     292   * Pseudo-header info for raw socket packets
     293   * First byte is the adapter index
     294   * Second byte contains flags
     295   *  - 0x01 - Direction (0=RX, 1=TX)
     296   *  - 0x02-0x04 - Payload type (000=LLCP, 001=NCI, 010=HCI, 011=Digital,
     297   *                              100=Proprietary)
     298   *  - 0x05-0x80 - Reserved
     299   **/
     300  #define NFC_RAW_HEADER_SIZE	2
     301  #define NFC_DIRECTION_RX		0x00
     302  #define NFC_DIRECTION_TX		0x01
     303  
     304  #define RAW_PAYLOAD_LLCP 0
     305  #define RAW_PAYLOAD_NCI	1
     306  #define RAW_PAYLOAD_HCI	2
     307  #define RAW_PAYLOAD_DIGITAL	3
     308  #define RAW_PAYLOAD_PROPRIETARY	4
     309  
     310  /* socket option names */
     311  #define NFC_LLCP_RW		0
     312  #define NFC_LLCP_MIUX		1
     313  #define NFC_LLCP_REMOTE_MIU	2
     314  #define NFC_LLCP_REMOTE_LTO	3
     315  #define NFC_LLCP_REMOTE_RW	4
     316  
     317  #endif /*__LINUX_NFC_H */