diff options
author | Eric Lapuyade <eric.lapuyade@linux.intel.com> | 2012-11-28 09:48:44 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-01-09 18:51:49 -0500 |
commit | 27c31191b3d7ff32c266a5dbea344b9aa96ebf14 (patch) | |
tree | c8138ab74878bf69c1b5932c119da2c3d3b5c67b | |
parent | f0c9103813b3045bd5b43220b6a78c9908a45d24 (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.c | 27 | ||||
-rw-r--r-- | include/net/nfc/hci.h | 4 | ||||
-rw-r--r-- | net/nfc/hci/core.c | 8 |
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 | ||
717 | static void pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, | 717 | static 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 | ||
767 | exit: | 764 | exit: |
768 | kfree_skb(skb); | 765 | kfree_skb(skb); |
766 | |||
767 | return r; | ||
769 | } | 768 | } |
770 | 769 | ||
771 | static struct nfc_hci_ops pn544_hci_ops = { | 770 | static 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 | ||
333 | exit: | 334 | exit: |
334 | kfree_skb(skb); | 335 | kfree_skb(skb); |
335 | 336 | ||
337 | exit_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? |