aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Lapuyade <eric.lapuyade@linux.intel.com>2012-11-28 09:48:44 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2013-01-09 18:51:49 -0500
commit27c31191b3d7ff32c266a5dbea344b9aa96ebf14 (patch)
treec8138ab74878bf69c1b5932c119da2c3d3b5c67b
parentf0c9103813b3045bd5b43220b6a78c9908a45d24 (diff)
NFC: Added error handling in event_received hci ops
There is no use to return an error if the caller doesn't get it. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/nfc/pn544/pn544.c27
-rw-r--r--include/net/nfc/hci.h4
-rw-r--r--net/nfc/hci/core.c8
3 files changed, 20 insertions, 19 deletions
diff --git a/drivers/nfc/pn544/pn544.c b/drivers/nfc/pn544/pn544.c
index cc666de3b8e5..4af70f9c01aa 100644
--- a/drivers/nfc/pn544/pn544.c
+++ b/drivers/nfc/pn544/pn544.c
@@ -714,8 +714,8 @@ static int pn544_hci_check_presence(struct nfc_hci_dev *hdev,
714 return 0; 714 return 0;
715} 715}
716 716
717static void pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, 717static int pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, u8 event,
718 u8 event, struct sk_buff *skb) 718 struct sk_buff *skb)
719{ 719{
720 struct sk_buff *rgb_skb = NULL; 720 struct sk_buff *rgb_skb = NULL;
721 int r = 0; 721 int r = 0;
@@ -724,25 +724,23 @@ static void pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate,
724 switch (event) { 724 switch (event) {
725 case PN544_HCI_EVT_ACTIVATED: 725 case PN544_HCI_EVT_ACTIVATED:
726 if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE) 726 if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE)
727 nfc_hci_target_discovered(hdev, gate); 727 r = nfc_hci_target_discovered(hdev, gate);
728 else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) { 728 else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) {
729 r = nfc_hci_get_param(hdev, gate, PN544_DEP_ATR_REQ, 729 r = nfc_hci_get_param(hdev, gate, PN544_DEP_ATR_REQ,
730 &rgb_skb); 730 &rgb_skb);
731
732 if (r < 0) 731 if (r < 0)
733 goto exit; 732 goto exit;
734 733
735 nfc_tm_activated(hdev->ndev, NFC_PROTO_NFC_DEP_MASK, 734 r = nfc_tm_activated(hdev->ndev, NFC_PROTO_NFC_DEP_MASK,
736 NFC_COMM_PASSIVE, rgb_skb->data, 735 NFC_COMM_PASSIVE, rgb_skb->data,
737 rgb_skb->len); 736 rgb_skb->len);
738 737
739 kfree_skb(rgb_skb); 738 kfree_skb(rgb_skb);
740 } 739 }
741
742 break; 740 break;
743 case PN544_HCI_EVT_DEACTIVATED: 741 case PN544_HCI_EVT_DEACTIVATED:
744 nfc_hci_send_event(hdev, gate, 742 r = nfc_hci_send_event(hdev, gate, NFC_HCI_EVT_END_OPERATION,
745 NFC_HCI_EVT_END_OPERATION, NULL, 0); 743 NULL, 0);
746 break; 744 break;
747 case PN544_HCI_EVT_RCV_DATA: 745 case PN544_HCI_EVT_RCV_DATA:
748 if (skb->len < 2) { 746 if (skb->len < 2) {
@@ -757,15 +755,16 @@ static void pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate,
757 } 755 }
758 756
759 skb_pull(skb, 2); 757 skb_pull(skb, 2);
760 nfc_tm_data_received(hdev->ndev, skb); 758 return nfc_tm_data_received(hdev->ndev, skb);
761
762 return;
763 default: 759 default:
760 pr_err("Discarded unknown event %x to gate %x\n", event, gate);
764 break; 761 break;
765 } 762 }
766 763
767exit: 764exit:
768 kfree_skb(skb); 765 kfree_skb(skb);
766
767 return r;
769} 768}
770 769
771static struct nfc_hci_ops pn544_hci_ops = { 770static struct nfc_hci_ops pn544_hci_ops = {
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h
index e6224571e5e6..834e36481aff 100644
--- a/include/net/nfc/hci.h
+++ b/include/net/nfc/hci.h
@@ -57,8 +57,8 @@ struct nfc_hci_ops {
57 int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb); 57 int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb);
58 int (*check_presence)(struct nfc_hci_dev *hdev, 58 int (*check_presence)(struct nfc_hci_dev *hdev,
59 struct nfc_target *target); 59 struct nfc_target *target);
60 void (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event, 60 int (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event,
61 struct sk_buff *skb); 61 struct sk_buff *skb);
62}; 62};
63 63
64/* Pipes */ 64/* Pipes */
diff --git a/net/nfc/hci/core.c b/net/nfc/hci/core.c
index b4b84268653d..f30f6fe815b4 100644
--- a/net/nfc/hci/core.c
+++ b/net/nfc/hci/core.c
@@ -323,16 +323,18 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
323 break; 323 break;
324 default: 324 default:
325 if (hdev->ops->event_received) { 325 if (hdev->ops->event_received) {
326 hdev->ops->event_received(hdev, gate, event, skb); 326 r = hdev->ops->event_received(hdev, gate, event, skb);
327 return; 327 goto exit_noskb;
328 } else {
329 r = -EINVAL;
328 } 330 }
329
330 break; 331 break;
331 } 332 }
332 333
333exit: 334exit:
334 kfree_skb(skb); 335 kfree_skb(skb);
335 336
337exit_noskb:
336 if (r) { 338 if (r) {
337 /* TODO: There was an error dispatching the event, 339 /* TODO: There was an error dispatching the event,
338 * how to propagate up to nfc core? 340 * how to propagate up to nfc core?