Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 225516
b: refs/heads/master
c: c71e97b
h: refs/heads/master
v: v3
  • Loading branch information
Johan Hedberg authored and Gustavo F. Padovan committed Dec 23, 2010
1 parent 68d5ac7 commit 7b388f1
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f7b64e69c7c75c8e9f2d5e23edec8de1ce883bcc
refs/heads/master: c71e97bfaadfa727669fcfcf12301744fd169091
2 changes: 2 additions & 0 deletions trunk/include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,8 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);

/* Management interface */
int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
int mgmt_index_added(u16 index);
int mgmt_index_removed(u16 index);

/* HCI info for socket */
#define hci_pi(sk) ((struct hci_pinfo *) sk)
Expand Down
10 changes: 10 additions & 0 deletions trunk/include/net/bluetooth/mgmt.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,13 @@ struct mgmt_ev_controller_error {
__le16 index;
__u8 error_code;
} __packed;

#define MGMT_EV_INDEX_ADDED 0x0004
struct mgmt_ev_index_added {
__le16 index;
} __packed;

#define MGMT_EV_INDEX_REMOVED 0x0005
struct mgmt_ev_index_removed {
__le16 index;
} __packed;
2 changes: 2 additions & 0 deletions trunk/net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -960,6 +960,7 @@ int hci_register_dev(struct hci_dev *hdev)
}
}

mgmt_index_added(hdev->id);
hci_notify(hdev, HCI_DEV_REG);

return id;
Expand Down Expand Up @@ -989,6 +990,7 @@ int hci_unregister_dev(struct hci_dev *hdev)
for (i = 0; i < NUM_REASSEMBLY; i++)
kfree_skb(hdev->reassembly[i]);

mgmt_index_removed(hdev->id);
hci_notify(hdev, HCI_DEV_UNREG);

if (hdev->rfkill) {
Expand Down
41 changes: 41 additions & 0 deletions trunk/net/bluetooth/mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,3 +265,44 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
kfree(buf);
return err;
}

static int mgmt_event(u16 event, void *data, u16 data_len)
{
struct sk_buff *skb;
struct mgmt_hdr *hdr;

skb = alloc_skb(sizeof(*hdr) + data_len, GFP_ATOMIC);
if (!skb)
return -ENOMEM;

bt_cb(skb)->channel = HCI_CHANNEL_CONTROL;

hdr = (void *) skb_put(skb, sizeof(*hdr));
hdr->opcode = cpu_to_le16(event);
hdr->len = cpu_to_le16(data_len);

memcpy(skb_put(skb, data_len), data, data_len);

hci_send_to_sock(NULL, skb);
kfree_skb(skb);

return 0;
}

int mgmt_index_added(u16 index)
{
struct mgmt_ev_index_added ev;

put_unaligned_le16(index, &ev.index);

return mgmt_event(MGMT_EV_INDEX_ADDED, &ev, sizeof(ev));
}

int mgmt_index_removed(u16 index)
{
struct mgmt_ev_index_added ev;

put_unaligned_le16(index, &ev.index);

return mgmt_event(MGMT_EV_INDEX_REMOVED, &ev, sizeof(ev));
}

0 comments on commit 7b388f1

Please sign in to comment.