Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 300877
b: refs/heads/master
c: 144612c
h: refs/heads/master
i:
  300875: 8d1f91f
v: v3
  • Loading branch information
Eric Lapuyade authored and John W. Linville committed Apr 12, 2012
1 parent 758b755 commit e08f63b
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 01ae0eea9bed132a9c4a2c207dbf8e05b0051071
refs/heads/master: 144612cacc0b5c230f0b3aebc3a3a53854c332ee
3 changes: 2 additions & 1 deletion trunk/include/net/nfc/nfc.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ struct nfc_ops {

#define NFC_TARGET_IDX_ANY -1
#define NFC_MAX_GT_LEN 48
#define NFC_TARGET_IDX_NONE 0xffffffff

struct nfc_target {
u32 idx;
Expand Down Expand Up @@ -97,7 +98,7 @@ struct nfc_dev {
struct device dev;
bool dev_up;
bool polling;
bool remote_activated;
u32 activated_target_idx;
bool dep_link_up;
u32 dep_rf_mode;
struct nfc_genl_data genl_data;
Expand Down
24 changes: 21 additions & 3 deletions trunk/net/nfc/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ int nfc_dev_down(struct nfc_dev *dev)
goto error;
}

if (dev->polling || dev->remote_activated) {
if (dev->polling || dev->activated_target_idx != NFC_TARGET_IDX_NONE) {
rc = -EBUSY;
goto error;
}
Expand Down Expand Up @@ -211,6 +211,8 @@ int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode)
}

rc = dev->ops->dep_link_up(dev, target_index, comm_mode, gb, gb_len);
if (!rc)
dev->activated_target_idx = target_index;

error:
device_unlock(&dev->dev);
Expand Down Expand Up @@ -246,6 +248,7 @@ int nfc_dep_link_down(struct nfc_dev *dev)
rc = dev->ops->dep_link_down(dev);
if (!rc) {
dev->dep_link_up = false;
dev->activated_target_idx = NFC_TARGET_IDX_NONE;
nfc_llcp_mac_is_down(dev);
nfc_genl_dep_link_down_event(dev);
}
Expand Down Expand Up @@ -290,7 +293,7 @@ int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol)

rc = dev->ops->activate_target(dev, target_idx, protocol);
if (!rc)
dev->remote_activated = true;
dev->activated_target_idx = target_idx;

error:
device_unlock(&dev->dev);
Expand Down Expand Up @@ -318,7 +321,7 @@ int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx)
}

dev->ops->deactivate_target(dev, target_idx);
dev->remote_activated = false;
dev->activated_target_idx = NFC_TARGET_IDX_NONE;

error:
device_unlock(&dev->dev);
Expand Down Expand Up @@ -352,6 +355,18 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,
goto error;
}

if (dev->activated_target_idx == NFC_TARGET_IDX_NONE) {
rc = -ENOTCONN;
kfree_skb(skb);
goto error;
}

if (target_idx != dev->activated_target_idx) {
rc = -EADDRNOTAVAIL;
kfree_skb(skb);
goto error;
}

rc = dev->ops->data_exchange(dev, target_idx, skb, cb, cb_context);

error:
Expand Down Expand Up @@ -482,6 +497,7 @@ int nfc_target_lost(struct nfc_dev *dev, u32 target_idx)

dev->targets_generation++;
dev->n_targets--;
dev->activated_target_idx = NFC_TARGET_IDX_NONE;

if (dev->n_targets) {
memcpy(&dev->targets[i], &dev->targets[i + 1],
Expand Down Expand Up @@ -575,6 +591,8 @@ struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops,
/* first generation must not be 0 */
dev->targets_generation = 1;

dev->activated_target_idx = NFC_TARGET_IDX_NONE;

return dev;
}
EXPORT_SYMBOL(nfc_allocate_device);
Expand Down

0 comments on commit e08f63b

Please sign in to comment.