diff options
Diffstat (limited to 'net/bluetooth')
| -rw-r--r-- | net/bluetooth/hci_core.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index e1da8f68759c..3fc90e543ec1 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
| @@ -987,6 +987,29 @@ int hci_resume_dev(struct hci_dev *hdev) | |||
| 987 | } | 987 | } |
| 988 | EXPORT_SYMBOL(hci_resume_dev); | 988 | EXPORT_SYMBOL(hci_resume_dev); |
| 989 | 989 | ||
| 990 | /* Receive frame from HCI drivers */ | ||
| 991 | int hci_recv_frame(struct sk_buff *skb) | ||
| 992 | { | ||
| 993 | struct hci_dev *hdev = (struct hci_dev *) skb->dev; | ||
| 994 | if (!hdev || (!test_bit(HCI_UP, &hdev->flags) | ||
| 995 | && !test_bit(HCI_INIT, &hdev->flags))) { | ||
| 996 | kfree_skb(skb); | ||
| 997 | return -ENXIO; | ||
| 998 | } | ||
| 999 | |||
| 1000 | /* Incomming skb */ | ||
| 1001 | bt_cb(skb)->incoming = 1; | ||
| 1002 | |||
| 1003 | /* Time stamp */ | ||
| 1004 | __net_timestamp(skb); | ||
| 1005 | |||
| 1006 | /* Queue frame for rx task */ | ||
| 1007 | skb_queue_tail(&hdev->rx_q, skb); | ||
| 1008 | hci_sched_rx(hdev); | ||
| 1009 | return 0; | ||
| 1010 | } | ||
| 1011 | EXPORT_SYMBOL(hci_recv_frame); | ||
| 1012 | |||
| 990 | /* Receive packet type fragment */ | 1013 | /* Receive packet type fragment */ |
| 991 | #define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 2]) | 1014 | #define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 2]) |
| 992 | 1015 | ||
