Bluetooth: Add ACL MTU, available buffers and total buffers to hci_conn_info.
authorNick Pelly <npelly@google.com>
Wed, 9 Dec 2009 08:15:41 +0000 (00:15 -0800)
committerArve Hjønnevåg <arve@android.com>
Mon, 1 Jul 2013 20:40:28 +0000 (13:40 -0700)
This provides userspace debugging tools access to ACL flow control state.

Signed-off-by: Nick Pelly <npelly@google.com>
include/net/bluetooth/hci.h
net/bluetooth/hci_conn.c

index e0512aaef4b85df8d05c7f91983f1054ee6a7628..2d6adf331265a501d8742496f860aaa834c7ef80 100644 (file)
@@ -1628,6 +1628,9 @@ struct hci_conn_info {
        __u8     out;
        __u16    state;
        __u32    link_mode;
+       __u32    mtu;
+       __u32    cnt;
+       __u32    pkts;
 };
 
 struct hci_dev_req {
index 6c7f3637972254c9bbbe0b5a9c6f007ba1ec41e2..b4bbdd55812a750243ff82269b1e7ee9e7c1c38f 100644 (file)
@@ -880,6 +880,15 @@ int hci_get_conn_list(void __user *arg)
                (ci + n)->out   = c->out;
                (ci + n)->state = c->state;
                (ci + n)->link_mode = c->link_mode;
+               if (c->type == SCO_LINK) {
+                       (ci + n)->mtu = hdev->sco_mtu;
+                       (ci + n)->cnt = hdev->sco_cnt;
+                       (ci + n)->pkts = hdev->sco_pkts;
+               } else {
+                       (ci + n)->mtu = hdev->acl_mtu;
+                       (ci + n)->cnt = hdev->acl_cnt;
+                       (ci + n)->pkts = hdev->acl_pkts;
+               }
                if (++n >= req.conn_num)
                        break;
        }
@@ -916,6 +925,15 @@ int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
                ci.out   = conn->out;
                ci.state = conn->state;
                ci.link_mode = conn->link_mode;
+               if (req.type == SCO_LINK) {
+                       ci.mtu = hdev->sco_mtu;
+                       ci.cnt = hdev->sco_cnt;
+                       ci.pkts = hdev->sco_pkts;
+               } else {
+                       ci.mtu = hdev->acl_mtu;
+                       ci.cnt = hdev->acl_cnt;
+                       ci.pkts = hdev->acl_pkts;
+               }
        }
        hci_dev_unlock(hdev);