From: Benjamin Berg <bberg@xxxxxxxxxx> Currently this function only cancels any synchronous operation that might be ongoing. Adding this function allows aborting synchronous commands in case of low level TX/RX issues. A common example for this is that the device has been removed. Signed-off-by: Benjamin Berg <bberg@xxxxxxxxxx> --- include/net/bluetooth/hci_core.h | 1 + net/bluetooth/hci_core.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index dd8840e70e25..542f5a37b9d0 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1267,6 +1267,7 @@ void hci_release_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); +void hci_tx_error(struct hci_dev *hdev, int err); int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb); int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb); __printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...); diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 8d33aa64846b..bbb35188e41f 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -4069,6 +4069,13 @@ int hci_reset_dev(struct hci_dev *hdev) } EXPORT_SYMBOL(hci_reset_dev); +/* Reset HCI device */ +void hci_tx_error(struct hci_dev *hdev, int err) +{ + hci_req_sync_cancel(hdev, err); +} +EXPORT_SYMBOL(hci_tx_error); + /* Receive frame from HCI drivers */ int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb) { -- 2.31.1