Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / net / bluetooth / sco.c
index a0d11b8..5dc2f21 100644 (file)
@@ -189,7 +189,7 @@ static int sco_connect(struct sock *sk)
        if (!hdev)
                return -EHOSTUNREACH;
 
-       hci_dev_lock_bh(hdev);
+       hci_dev_lock(hdev);
 
        if (lmp_esco_capable(hdev) && !disable_esco)
                type = ESCO_LINK;
@@ -225,7 +225,7 @@ static int sco_connect(struct sock *sk)
        }
 
 done:
-       hci_dev_unlock_bh(hdev);
+       hci_dev_unlock(hdev);
        hci_dev_put(hdev);
        return err;
 }
@@ -893,15 +893,12 @@ done:
 }
 
 /* ----- SCO interface with lower layer (HCI) ----- */
-static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
+int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
 {
        register struct sock *sk;
        struct hlist_node *node;
        int lm = 0;
 
-       if (type != SCO_LINK && type != ESCO_LINK)
-               return -EINVAL;
-
        BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
 
        /* Find listening sockets */
@@ -921,13 +918,9 @@ static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
        return lm;
 }
 
-static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
+int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
 {
        BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
-
-       if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
-               return -EINVAL;
-
        if (!status) {
                struct sco_conn *conn;
 
@@ -940,19 +933,15 @@ static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
        return 0;
 }
 
-static int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
+int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
 {
        BT_DBG("hcon %p reason %d", hcon, reason);
 
-       if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
-               return -EINVAL;
-
        sco_conn_del(hcon, bt_to_errno(reason));
-
        return 0;
 }
 
-static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
+int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
 {
        struct sco_conn *conn = hcon->sco_data;
 
@@ -1028,15 +1017,6 @@ static const struct net_proto_family sco_sock_family_ops = {
        .create = sco_sock_create,
 };
 
-static struct hci_proto sco_hci_proto = {
-       .name           = "SCO",
-       .id             = HCI_PROTO_SCO,
-       .connect_ind    = sco_connect_ind,
-       .connect_cfm    = sco_connect_cfm,
-       .disconn_cfm    = sco_disconn_cfm,
-       .recv_scodata   = sco_recv_scodata
-};
-
 int __init sco_init(void)
 {
        int err;
@@ -1051,13 +1031,6 @@ int __init sco_init(void)
                goto error;
        }
 
-       err = hci_register_proto(&sco_hci_proto);
-       if (err < 0) {
-               BT_ERR("SCO protocol registration failed");
-               bt_sock_unregister(BTPROTO_SCO);
-               goto error;
-       }
-
        if (bt_debugfs) {
                sco_debugfs = debugfs_create_file("sco", 0444,
                                        bt_debugfs, NULL, &sco_debugfs_fops);
@@ -1081,9 +1054,6 @@ void __exit sco_exit(void)
        if (bt_sock_unregister(BTPROTO_SCO) < 0)
                BT_ERR("SCO socket unregistration failed");
 
-       if (hci_unregister_proto(&sco_hci_proto) < 0)
-               BT_ERR("SCO protocol unregistration failed");
-
        proto_unregister(&sco_proto);
 }