Skip to content

Commit

Permalink
NFC: Export target lost function
Browse files Browse the repository at this point in the history
NFC drivers will call this routine when they detect that a tag leaves the
RF field. This will eventually lead to the corresponding netlink event
to be sent.

Signed-off-by: Eric Lapuyade <eric.lapuyade@intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Eric Lapuyade authored and linvjw committed Apr 12, 2012
1 parent 8112a5c commit e1da0ef
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/net/nfc/nfc.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ int nfc_set_remote_general_bytes(struct nfc_dev *dev,

int nfc_targets_found(struct nfc_dev *dev,
struct nfc_target *targets, int ntargets);
int nfc_target_lost(struct nfc_dev *dev, u32 target_idx);

int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx,
u8 comm_mode, u8 rf_mode);
Expand Down
39 changes: 39 additions & 0 deletions net/nfc/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,45 @@ int nfc_targets_found(struct nfc_dev *dev,
}
EXPORT_SYMBOL(nfc_targets_found);

int nfc_target_lost(struct nfc_dev *dev, u32 target_idx)
{
struct nfc_target *tg;
int i;

pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx);

spin_lock_bh(&dev->targets_lock);

for (i = 0; i < dev->n_targets; i++) {
tg = &dev->targets[i];
if (tg->idx == target_idx)
break;
}

if (i == dev->n_targets) {
spin_unlock_bh(&dev->targets_lock);
return -EINVAL;
}

dev->targets_generation++;
dev->n_targets--;

if (dev->n_targets) {
memcpy(&dev->targets[i], &dev->targets[i + 1],
(dev->n_targets - i) * sizeof(struct nfc_target));
} else {
kfree(dev->targets);
dev->targets = NULL;
}

spin_unlock_bh(&dev->targets_lock);

nfc_genl_target_lost(dev, target_idx);

return 0;
}
EXPORT_SYMBOL(nfc_target_lost);

static void nfc_release(struct device *d)
{
struct nfc_dev *dev = to_nfc_dev(d);
Expand Down

0 comments on commit e1da0ef

Please sign in to comment.