|
@@ -392,14 +392,12 @@ static void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
|
|
|
|
|
|
void hci_sock_dev_event(struct hci_dev *hdev, int event)
|
|
|
{
|
|
|
- struct hci_ev_si_device ev;
|
|
|
-
|
|
|
BT_DBG("hdev %s event %d", hdev->name, event);
|
|
|
|
|
|
- /* Send event to monitor */
|
|
|
if (atomic_read(&monitor_promisc)) {
|
|
|
struct sk_buff *skb;
|
|
|
|
|
|
+ /* Send event to monitor */
|
|
|
skb = create_monitor_event(hdev, event);
|
|
|
if (skb) {
|
|
|
hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
|
|
@@ -408,10 +406,14 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Send event to sockets */
|
|
|
- ev.event = event;
|
|
|
- ev.dev_id = hdev->id;
|
|
|
- hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
|
|
|
+ if (event <= HCI_DEV_DOWN) {
|
|
|
+ struct hci_ev_si_device ev;
|
|
|
+
|
|
|
+ /* Send event to sockets */
|
|
|
+ ev.event = event;
|
|
|
+ ev.dev_id = hdev->id;
|
|
|
+ hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
|
|
|
+ }
|
|
|
|
|
|
if (event == HCI_DEV_UNREG) {
|
|
|
struct sock *sk;
|