Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 36804
b: refs/heads/master
c: 0a85b96
h: refs/heads/master
v: v3
  • Loading branch information
Marcel Holtmann authored and David S. Miller committed Sep 29, 2006
1 parent 38cf1eb commit d0c198e
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b219e3ac66183fc9771b94af931fb5fd41d586ec
refs/heads/master: 0a85b964e141a4b8db6eaf500ceace12f8f52f93
26 changes: 24 additions & 2 deletions trunk/net/bluetooth/bnep/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#include <asm/unaligned.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>

#include "bnep.h"
Expand Down Expand Up @@ -515,6 +516,26 @@ static int bnep_session(void *arg)
return 0;
}

static struct device *bnep_get_device(struct bnep_session *session)
{
bdaddr_t *src = &bt_sk(session->sock->sk)->src;
bdaddr_t *dst = &bt_sk(session->sock->sk)->dst;
struct hci_dev *hdev;
struct hci_conn *conn;

hdev = hci_get_route(dst, src);
if (!hdev)
return NULL;

conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
if (!conn)
return NULL;

hci_dev_put(hdev);

return &conn->dev;
}

int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
{
struct net_device *dev;
Expand All @@ -534,7 +555,6 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
if (!dev)
return -ENOMEM;


down_write(&bnep_session_sem);

ss = __bnep_get_session(dst);
Expand All @@ -551,7 +571,7 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
memcpy(s->eh.h_source, &dst, ETH_ALEN);
memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN);

s->dev = dev;
s->dev = dev;
s->sock = sock;
s->role = req->role;
s->state = BT_CONNECTED;
Expand All @@ -568,6 +588,8 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
bnep_set_default_proto_filter(s);
#endif

SET_NETDEV_DEV(dev, bnep_get_device(s));

err = register_netdev(dev);
if (err) {
goto failed;
Expand Down
23 changes: 23 additions & 0 deletions trunk/net/bluetooth/hidp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include <linux/input.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>

#include "hidp.h"
Expand Down Expand Up @@ -528,6 +529,26 @@ static int hidp_session(void *arg)
return 0;
}

static struct device *hidp_get_device(struct hidp_session *session)
{
bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
struct hci_dev *hdev;
struct hci_conn *conn;

hdev = hci_get_route(dst, src);
if (!hdev)
return NULL;

conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
if (!conn)
return NULL;

hci_dev_put(hdev);

return &conn->dev;
}

static inline void hidp_setup_input(struct hidp_session *session, struct hidp_connadd_req *req)
{
struct input_dev *input = session->input;
Expand Down Expand Up @@ -566,6 +587,8 @@ static inline void hidp_setup_input(struct hidp_session *session, struct hidp_co
input->relbit[0] |= BIT(REL_WHEEL);
}

input->cdev.dev = hidp_get_device(session);

input->event = hidp_input_event;

input_register_device(input);
Expand Down
21 changes: 20 additions & 1 deletion trunk/net/bluetooth/rfcomm/tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include <linux/skbuff.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/rfcomm.h>

#ifndef CONFIG_BT_RFCOMM_DEBUG
Expand Down Expand Up @@ -161,6 +162,24 @@ static inline struct rfcomm_dev *rfcomm_dev_get(int id)
return dev;
}

static struct device *rfcomm_get_device(struct rfcomm_dev *dev)
{
struct hci_dev *hdev;
struct hci_conn *conn;

hdev = hci_get_route(&dev->dst, &dev->src);
if (!hdev)
return NULL;

conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &dev->dst);
if (!conn)
return NULL;

hci_dev_put(hdev);

return &conn->dev;
}

static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
{
struct rfcomm_dev *dev;
Expand Down Expand Up @@ -244,7 +263,7 @@ static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
return err;
}

tty_register_device(rfcomm_tty_driver, dev->id, NULL);
tty_register_device(rfcomm_tty_driver, dev->id, rfcomm_get_device(dev));

return dev->id;
}
Expand Down

0 comments on commit d0c198e

Please sign in to comment.