NFC: Introduce target mode tx ops
And rename the initiator mode data exchange ops for consistency sake. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
f212ad5e99
commit
be9ae4ce4e
@ -1691,7 +1691,7 @@ error:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pn533_data_exchange(struct nfc_dev *nfc_dev,
|
static int pn533_transceive(struct nfc_dev *nfc_dev,
|
||||||
struct nfc_target *target, struct sk_buff *skb,
|
struct nfc_target *target, struct sk_buff *skb,
|
||||||
data_exchange_cb_t cb, void *cb_context)
|
data_exchange_cb_t cb, void *cb_context)
|
||||||
{
|
{
|
||||||
@ -1853,7 +1853,7 @@ struct nfc_ops pn533_nfc_ops = {
|
|||||||
.stop_poll = pn533_stop_poll,
|
.stop_poll = pn533_stop_poll,
|
||||||
.activate_target = pn533_activate_target,
|
.activate_target = pn533_activate_target,
|
||||||
.deactivate_target = pn533_deactivate_target,
|
.deactivate_target = pn533_deactivate_target,
|
||||||
.data_exchange = pn533_data_exchange,
|
.im_transceive = pn533_transceive,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int pn533_probe(struct usb_interface *interface,
|
static int pn533_probe(struct usb_interface *interface,
|
||||||
|
@ -63,9 +63,10 @@ struct nfc_ops {
|
|||||||
u32 protocol);
|
u32 protocol);
|
||||||
void (*deactivate_target)(struct nfc_dev *dev,
|
void (*deactivate_target)(struct nfc_dev *dev,
|
||||||
struct nfc_target *target);
|
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,
|
struct sk_buff *skb, data_exchange_cb_t cb,
|
||||||
void *cb_context);
|
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);
|
int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -413,12 +413,7 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->active_target == NULL) {
|
if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) {
|
||||||
rc = -ENOTCONN;
|
|
||||||
kfree_skb(skb);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev->active_target->idx != target_idx) {
|
if (dev->active_target->idx != target_idx) {
|
||||||
rc = -EADDRNOTAVAIL;
|
rc = -EADDRNOTAVAIL;
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
@ -428,12 +423,20 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,
|
|||||||
if (dev->ops->check_presence)
|
if (dev->ops->check_presence)
|
||||||
del_timer_sync(&dev->check_pres_timer);
|
del_timer_sync(&dev->check_pres_timer);
|
||||||
|
|
||||||
rc = dev->ops->data_exchange(dev, dev->active_target, skb, cb,
|
rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb,
|
||||||
cb_context);
|
cb_context);
|
||||||
|
|
||||||
if (!rc && dev->ops->check_presence)
|
if (!rc && dev->ops->check_presence)
|
||||||
mod_timer(&dev->check_pres_timer, jiffies +
|
mod_timer(&dev->check_pres_timer, jiffies +
|
||||||
msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
error:
|
error:
|
||||||
device_unlock(&dev->dev);
|
device_unlock(&dev->dev);
|
||||||
@ -727,7 +730,7 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops,
|
|||||||
struct nfc_dev *dev;
|
struct nfc_dev *dev;
|
||||||
|
|
||||||
if (!ops->start_poll || !ops->stop_poll || !ops->activate_target ||
|
if (!ops->start_poll || !ops->stop_poll || !ops->activate_target ||
|
||||||
!ops->deactivate_target || !ops->data_exchange)
|
!ops->deactivate_target || !ops->im_transceive)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!supported_protocols)
|
if (!supported_protocols)
|
||||||
|
@ -512,7 +512,7 @@ static void hci_deactivate_target(struct nfc_dev *nfc_dev,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
|
static int hci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
|
||||||
struct sk_buff *skb, data_exchange_cb_t cb,
|
struct sk_buff *skb, data_exchange_cb_t cb,
|
||||||
void *cb_context)
|
void *cb_context)
|
||||||
{
|
{
|
||||||
@ -580,7 +580,7 @@ static struct nfc_ops hci_nfc_ops = {
|
|||||||
.stop_poll = hci_stop_poll,
|
.stop_poll = hci_stop_poll,
|
||||||
.activate_target = hci_activate_target,
|
.activate_target = hci_activate_target,
|
||||||
.deactivate_target = hci_deactivate_target,
|
.deactivate_target = hci_deactivate_target,
|
||||||
.data_exchange = hci_data_exchange,
|
.im_transceive = hci_transceive,
|
||||||
.check_presence = hci_check_presence,
|
.check_presence = hci_check_presence,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -522,7 +522,7 @@ static void nci_deactivate_target(struct nfc_dev *nfc_dev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nci_data_exchange(struct nfc_dev *nfc_dev, struct nfc_target *target,
|
static int nci_transceive(struct nfc_dev *nfc_dev, struct nfc_target *target,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
data_exchange_cb_t cb, void *cb_context)
|
data_exchange_cb_t cb, void *cb_context)
|
||||||
{
|
{
|
||||||
@ -557,7 +557,7 @@ static struct nfc_ops nci_nfc_ops = {
|
|||||||
.stop_poll = nci_stop_poll,
|
.stop_poll = nci_stop_poll,
|
||||||
.activate_target = nci_activate_target,
|
.activate_target = nci_activate_target,
|
||||||
.deactivate_target = nci_deactivate_target,
|
.deactivate_target = nci_deactivate_target,
|
||||||
.data_exchange = nci_data_exchange,
|
.im_transceive = nci_transceive,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ---- Interface to NCI drivers ---- */
|
/* ---- Interface to NCI drivers ---- */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user