]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
NFC: Define secure element IO API and commands
authorSamuel Ortiz <sameo@linux.intel.com>
Tue, 27 Aug 2013 22:39:48 +0000 (00:39 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 25 Sep 2013 00:30:47 +0000 (02:30 +0200)
In order to send and receive ISO7816 APDUs to and from NFC embedded
secure elements, we define a specific netlink command.
On a typical SE use case, host applications will send very few APDUs
(Less than 10) per transaction. This is why we decided to go for a
simple netlink API. Defining another NFC socket protocol for such low
traffic would have been overengineered.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
include/net/nfc/nfc.h
include/uapi/linux/nfc.h

index 5329804ebb704baef6e111ce730fcfe5d5345505..82fc4e43fc6e9ec156e19e18dddc4d3ec1fbe037 100644 (file)
@@ -53,6 +53,8 @@ struct nfc_dev;
 typedef void (*data_exchange_cb_t)(void *context, struct sk_buff *skb,
                                                                int err);
 
+typedef void (*se_io_cb_t)(void *context, u8 *apdu, size_t apdu_len, int err);
+
 struct nfc_target;
 
 struct nfc_ops {
@@ -79,6 +81,9 @@ struct nfc_ops {
        int (*discover_se)(struct nfc_dev *dev);
        int (*enable_se)(struct nfc_dev *dev, u32 se_idx);
        int (*disable_se)(struct nfc_dev *dev, u32 se_idx);
+       int (*se_io) (struct nfc_dev *dev, u32 se_idx,
+                     u8 *apdu, size_t apdu_length,
+                     se_io_cb_t cb, void *cb_context);
 };
 
 #define NFC_TARGET_IDX_ANY -1
index 29bed72a4ac43e4bd141b87a8b5e9d410ab21cff..6ad6cc03ccd3aeec4074f187836efac62ed31a0f 100644 (file)
@@ -85,6 +85,7 @@
  *     a specific SE notifies us about the end of a transaction. The parameter
  *     for this event is the application ID (AID).
  * @NFC_CMD_GET_SE: Dump all discovered secure elements from an NFC controller.
+ * @NFC_CMD_SE_IO: Send/Receive APDUs to/from the selected secure element.
  */
 enum nfc_commands {
        NFC_CMD_UNSPEC,
@@ -114,6 +115,7 @@ enum nfc_commands {
        NFC_EVENT_SE_CONNECTIVITY,
        NFC_EVENT_SE_TRANSACTION,
        NFC_CMD_GET_SE,
+       NFC_CMD_SE_IO,
 /* private: internal use only */
        __NFC_CMD_AFTER_LAST
 };
@@ -147,6 +149,7 @@ enum nfc_commands {
  * @NFC_ATTR_SE_INDEX: Secure element index
  * @NFC_ATTR_SE_TYPE: Secure element type (UICC or EMBEDDED)
  * @NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS: Firmware download operation status
+ * @NFC_ATTR_APDU: Secure element APDU
  */
 enum nfc_attrs {
        NFC_ATTR_UNSPEC,
@@ -174,6 +177,7 @@ enum nfc_attrs {
        NFC_ATTR_SE_TYPE,
        NFC_ATTR_SE_AID,
        NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS,
+       NFC_ATTR_SE_APDU,
 /* private: internal use only */
        __NFC_ATTR_AFTER_LAST
 };