Bluetooth: Add hci_reset_dev() for driver triggerd stack reset
Subsystems (2)
Marcel Holtmann
maintainerPATCH 1/2 Bluetooth: Add hci_reset_dev() for driver triggerd stack reset
Some Bluetooth drivers require to reset the upper stack. To avoid having all drivers send HCI Hardware Error events, provide a generic function to wrap the reset functionality.
Signed-off-by Marcel Holtmann <[email protected]>
--- include/net/bluetooth/hci_core.h | 1 + net/bluetooth/hci_core.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+)
include/net/bluetooth/hci_core.h +1 -0
@@ -856,6 +856,7 @@ int hci_register_dev(struct hci_dev *hdev);void hci_unregister_dev (struct hci_dev *hdev);int hci_suspend_dev (struct hci_dev *hdev);int hci_resume_dev (struct hci_dev *hdev); +int hci_reset_dev (struct hci_dev *hdev);int hci_dev_open (__u16 dev);int hci_dev_close (__u16 dev);int hci_dev_reset (__u16 dev);
net/bluetooth/hci_core.c +18 -0
@@ -4248,6 +4248,24 @@ int hci_resume_dev(struct hci_dev *hdev) }EXPORT_SYMBOL (hci_resume_dev); +/* Reset HCI device */ +int hci_reset_dev (struct hci_dev *hdev) +{ +const u8 hw_err[] = {HCI_EV_HARDWARE_ERROR ,0x01 ,0x00 }; +struct sk_buff *skb; + + skb =bt_skb_alloc (3 ,GFP_ATOMIC ); +if (!skb) +return -ENOMEM ; + +bt_cb (skb)->pkt_type =HCI_EVENT_PKT ; +memcpy (skb_put (skb,3 ), hw_err,3 ); + +/* Send Hardware Error to upper stack */ +return hci_recv_frame (hdev, skb); +} +EXPORT_SYMBOL (hci_reset_dev); +/* Receive frame from HCI drivers */ int hci_recv_frame (struct hci_dev *hdev,struct sk_buff *skb) {
Signature · 1 line
1.9.3
Hi Marcel,
Quoted 9 lines · Marcel Holtmann
Some Bluetooth drivers require to reset the upper stack. To avoid having all drivers send HCI Hardware Error events, provide a generic function to wrap the reset functionality.
Signed-off-by Marcel Holtmann <[email protected]>--- include/net/bluetooth/hci_core.h | 1 + net/bluetooth/hci_core.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+)
Both patches in this set have been applied to bluetooth-next. Thanks.
Johan