aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/nfc/nfc.h1
-rw-r--r--net/nfc/core.c12
-rw-r--r--net/nfc/llcp/llcp.c15
-rw-r--r--net/nfc/nfc.h7
4 files changed, 35 insertions, 0 deletions
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h
index 45c4c970575c..180964b954ab 100644
--- a/include/net/nfc/nfc.h
+++ b/include/net/nfc/nfc.h
@@ -202,5 +202,6 @@ int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx,
202int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, 202int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode,
203 u8 *gb, size_t gb_len); 203 u8 *gb, size_t gb_len);
204int nfc_tm_deactivated(struct nfc_dev *dev); 204int nfc_tm_deactivated(struct nfc_dev *dev);
205int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb);
205 206
206#endif /* __NET_NFC_H */ 207#endif /* __NET_NFC_H */
diff --git a/net/nfc/core.c b/net/nfc/core.c
index 76c1e207d297..6a3799eebc30 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 5f7aa3f632fb..5705e6dffb32 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 cd9fcbe57464..c5e42b79a418 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;