aboutsummaryrefslogtreecommitdiffstats
path: root/net/nfc
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2012-05-30 18:05:50 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2012-06-04 15:34:31 -0400
commit73167ced31d15c04e57b9e0885ac05675e9195a4 (patch)
tree165bc763ef1058ad8ec66ccd8adbb39c5af7e6f1 /net/nfc
parentbe9ae4ce4ee66e211815122ab4f41913efed4fec (diff)
NFC: Introduce target mode rx data callback
This routine will be called by drivers whenever they receive data in target mode. This should be unexpected events and as such should be handled by a standalone API (i.e. not as a callback pointer from an existing API). Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc')
-rw-r--r--net/nfc/core.c12
-rw-r--r--net/nfc/llcp/llcp.c15
-rw-r--r--net/nfc/nfc.h7
3 files changed, 34 insertions, 0 deletions
diff --git a/net/nfc/core.c b/net/nfc/core.c
index 76c1e207d29..6a3799eebc3 100644
--- a/net/nfc/core.c
+++ b/net/nfc/core.c
@@ -462,6 +462,18 @@ u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len)
462} 462}
463EXPORT_SYMBOL(nfc_get_local_general_bytes); 463EXPORT_SYMBOL(nfc_get_local_general_bytes);
464 464
465int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb)
466{
467 /* Only LLCP target mode for now */
468 if (dev->dep_link_up == false) {
469 kfree_skb(skb);
470 return -ENOLINK;
471 }
472
473 return nfc_llcp_data_received(dev, skb);
474}
475EXPORT_SYMBOL(nfc_tm_data_received);
476
465int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, 477int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode,
466 u8 *gb, size_t gb_len) 478 u8 *gb, size_t gb_len)
467{ 479{
diff --git a/net/nfc/llcp/llcp.c b/net/nfc/llcp/llcp.c
index 5f7aa3f632f..5705e6dffb3 100644
--- a/net/nfc/llcp/llcp.c
+++ b/net/nfc/llcp/llcp.c
@@ -937,6 +937,21 @@ void nfc_llcp_recv(void *data, struct sk_buff *skb, int err)
937 return; 937 return;
938} 938}
939 939
940int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb)
941{
942 struct nfc_llcp_local *local;
943
944 local = nfc_llcp_find_local(dev);
945 if (local == NULL)
946 return -ENODEV;
947
948 local->rx_pending = skb_get(skb);
949 del_timer(&local->link_timer);
950 queue_work(local->rx_wq, &local->rx_work);
951
952 return 0;
953}
954
940void nfc_llcp_mac_is_down(struct nfc_dev *dev) 955void nfc_llcp_mac_is_down(struct nfc_dev *dev)
941{ 956{
942 struct nfc_llcp_local *local; 957 struct nfc_llcp_local *local;
diff --git a/net/nfc/nfc.h b/net/nfc/nfc.h
index cd9fcbe5746..c5e42b79a41 100644
--- a/net/nfc/nfc.h
+++ b/net/nfc/nfc.h
@@ -55,6 +55,7 @@ int nfc_llcp_register_device(struct nfc_dev *dev);
55void nfc_llcp_unregister_device(struct nfc_dev *dev); 55void nfc_llcp_unregister_device(struct nfc_dev *dev);
56int nfc_llcp_set_remote_gb(struct nfc_dev *dev, u8 *gb, u8 gb_len); 56int nfc_llcp_set_remote_gb(struct nfc_dev *dev, u8 *gb, u8 gb_len);
57u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len); 57u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len);
58int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb);
58int __init nfc_llcp_init(void); 59int __init nfc_llcp_init(void);
59void nfc_llcp_exit(void); 60void nfc_llcp_exit(void);
60 61
@@ -90,6 +91,12 @@ static inline u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *gb_len)
90 return NULL; 91 return NULL;
91} 92}
92 93
94static inline int nfc_llcp_data_received(struct nfc_dev *dev,
95 struct sk_buff *skb)
96{
97 return 0;
98}
99
93static inline int nfc_llcp_init(void) 100static inline int nfc_llcp_init(void)
94{ 101{
95 return 0; 102 return 0;