NFC: Introduce target mode tx ops
authorSamuel Ortiz <sameo@linux.intel.com>
Wed, 16 May 2012 13:55:48 +0000 (15:55 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 4 Jun 2012 19:34:30 +0000 (21:34 +0200)
And rename the initiator mode data exchange ops for consistency sake.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/pn533.c
include/net/nfc/nfc.h
net/nfc/core.c
net/nfc/hci/core.c
net/nfc/nci/core.c

index c6b9bc5ac6e6cc0d76375b1f41da009b2855e6a7..fd94c6f5d6a83558e39a1a4cd37ea002af5c6294 100644 (file)
@@ -1691,9 +1691,9 @@ error:
        return 0;
 }
 
-static int pn533_data_exchange(struct nfc_dev *nfc_dev,
-                              struct nfc_target *target, struct sk_buff *skb,
-                              data_exchange_cb_t cb, void *cb_context)
+static int pn533_transceive(struct nfc_dev *nfc_dev,
+                           struct nfc_target *target, struct sk_buff *skb,
+                           data_exchange_cb_t cb, void *cb_context)
 {
        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
        struct pn533_frame *out_frame, *in_frame;
@@ -1853,7 +1853,7 @@ struct nfc_ops pn533_nfc_ops = {
        .stop_poll = pn533_stop_poll,
        .activate_target = pn533_activate_target,
        .deactivate_target = pn533_deactivate_target,
-       .data_exchange = pn533_data_exchange,
+       .im_transceive = pn533_transceive,
 };
 
 static int pn533_probe(struct usb_interface *interface,
index a6a7b49a3e2db68587d5cff8007c23569d326f1e..45c4c970575ceb7a741fbe0e19d510e847b31220 100644 (file)
@@ -63,9 +63,10 @@ struct nfc_ops {
                               u32 protocol);
        void (*deactivate_target)(struct nfc_dev *dev,
                                  struct nfc_target *target);
-       int (*data_exchange)(struct nfc_dev *dev, struct nfc_target *target,
+       int (*im_transceive)(struct nfc_dev *dev, struct nfc_target *target,
                             struct sk_buff *skb, data_exchange_cb_t cb,
                             void *cb_context);
+       int (*tm_send)(struct nfc_dev *dev, struct sk_buff *skb);
        int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target);
 };
 
index 722a0c76c669cd1ebc286b472f2917efe7896e2b..76c1e207d297d0cb9107537986e558d39a3759da 100644 (file)
@@ -413,27 +413,30 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,
                goto error;
        }
 
-       if (dev->active_target == NULL) {
-               rc = -ENOTCONN;
-               kfree_skb(skb);
-               goto error;
-       }
+       if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) {
+               if (dev->active_target->idx != target_idx) {
+                       rc = -EADDRNOTAVAIL;
+                       kfree_skb(skb);
+                       goto error;
+               }
 
-       if (dev->active_target->idx != target_idx) {
-               rc = -EADDRNOTAVAIL;
+               if (dev->ops->check_presence)
+                       del_timer_sync(&dev->check_pres_timer);
+
+               rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb,
+                                            cb_context);
+
+               if (!rc && dev->ops->check_presence)
+                       mod_timer(&dev->check_pres_timer, jiffies +
+                                 msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
+       } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) {
+               rc = dev->ops->tm_send(dev, skb);
+       } else {
+               rc = -ENOTCONN;
                kfree_skb(skb);
                goto error;
        }
 
-       if (dev->ops->check_presence)
-               del_timer_sync(&dev->check_pres_timer);
-
-       rc = dev->ops->data_exchange(dev, dev->active_target, skb, cb,
-                                    cb_context);
-
-       if (!rc && dev->ops->check_presence)
-               mod_timer(&dev->check_pres_timer, jiffies +
-                         msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
 
 error:
        device_unlock(&dev->dev);
@@ -727,7 +730,7 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops,
        struct nfc_dev *dev;
 
        if (!ops->start_poll || !ops->stop_poll || !ops->activate_target ||
-           !ops->deactivate_target || !ops->data_exchange)
+           !ops->deactivate_target || !ops->im_transceive)
                return NULL;
 
        if (!supported_protocols)
index 281f3a3bec00e42945271fb45f4258295969817a..a8b0b71e8f86456db556cffdb60069ea21b76f7b 100644 (file)
@@ -512,9 +512,9 @@ static void hci_deactivate_target(struct nfc_dev *nfc_dev,
 {
 }
 
-static int hci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
-                            struct sk_buff *skb, data_exchange_cb_t cb,
-                            void *cb_context)
+static int hci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
+                         struct sk_buff *skb, data_exchange_cb_t cb,
+                         void *cb_context)
 {
        struct nfc_hci_dev *hdev = nfc_get_drvdata(nfc_dev);
        int r;
@@ -580,7 +580,7 @@ static struct nfc_ops hci_nfc_ops = {
        .stop_poll = hci_stop_poll,
        .activate_target = hci_activate_target,
        .deactivate_target = hci_deactivate_target,
-       .data_exchange = hci_data_exchange,
+       .im_transceive = hci_transceive,
        .check_presence = hci_check_presence,
 };
 
index 0f718982f808f167a04f6913c8be83e4f7027f40..766a02b1dfa148fb521cc120f07623c00ac88e60 100644 (file)
@@ -522,9 +522,9 @@ static void nci_deactivate_target(struct nfc_dev *nfc_dev,
        }
 }
 
-static int nci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
-                            struct sk_buff *skb,
-                            data_exchange_cb_t cb, void *cb_context)
+static int nci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
+                         struct sk_buff *skb,
+                         data_exchange_cb_t cb, void *cb_context)
 {
        struct nci_dev *ndev = nfc_get_drvdata(nfc_dev);
        int rc;
@@ -557,7 +557,7 @@ static struct nfc_ops nci_nfc_ops = {
        .stop_poll = nci_stop_poll,
        .activate_target = nci_activate_target,
        .deactivate_target = nci_deactivate_target,
-       .data_exchange = nci_data_exchange,
+       .im_transceive = nci_transceive,
 };
 
 /* ---- Interface to NCI drivers ---- */
This page took 0.030457 seconds and 5 git commands to generate.