Commit c0068c85 authored by John W. Linville's avatar John W. Linville
parents 2411054a adb08ede
...@@ -132,7 +132,7 @@ struct hci_dev { ...@@ -132,7 +132,7 @@ struct hci_dev {
struct inquiry_cache inq_cache; struct inquiry_cache inq_cache;
struct hci_conn_hash conn_hash; struct hci_conn_hash conn_hash;
struct bdaddr_list blacklist; struct list_head blacklist;
struct hci_dev_stats stat; struct hci_dev_stats stat;
......
...@@ -924,7 +924,7 @@ int hci_register_dev(struct hci_dev *hdev) ...@@ -924,7 +924,7 @@ int hci_register_dev(struct hci_dev *hdev)
hci_conn_hash_init(hdev); hci_conn_hash_init(hdev);
INIT_LIST_HEAD(&hdev->blacklist.list); INIT_LIST_HEAD(&hdev->blacklist);
memset(&hdev->stat, 0, sizeof(struct hci_dev_stats)); memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
......
...@@ -168,9 +168,8 @@ static int hci_sock_release(struct socket *sock) ...@@ -168,9 +168,8 @@ static int hci_sock_release(struct socket *sock)
struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr) struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
{ {
struct list_head *p; struct list_head *p;
struct bdaddr_list *blacklist = &hdev->blacklist;
list_for_each(p, &blacklist->list) { list_for_each(p, &hdev->blacklist) {
struct bdaddr_list *b; struct bdaddr_list *b;
b = list_entry(p, struct bdaddr_list, list); b = list_entry(p, struct bdaddr_list, list);
...@@ -202,7 +201,7 @@ static int hci_blacklist_add(struct hci_dev *hdev, void __user *arg) ...@@ -202,7 +201,7 @@ static int hci_blacklist_add(struct hci_dev *hdev, void __user *arg)
bacpy(&entry->bdaddr, &bdaddr); bacpy(&entry->bdaddr, &bdaddr);
list_add(&entry->list, &hdev->blacklist.list); list_add(&entry->list, &hdev->blacklist);
return 0; return 0;
} }
...@@ -210,9 +209,8 @@ static int hci_blacklist_add(struct hci_dev *hdev, void __user *arg) ...@@ -210,9 +209,8 @@ static int hci_blacklist_add(struct hci_dev *hdev, void __user *arg)
int hci_blacklist_clear(struct hci_dev *hdev) int hci_blacklist_clear(struct hci_dev *hdev)
{ {
struct list_head *p, *n; struct list_head *p, *n;
struct bdaddr_list *blacklist = &hdev->blacklist;
list_for_each_safe(p, n, &blacklist->list) { list_for_each_safe(p, n, &hdev->blacklist) {
struct bdaddr_list *b; struct bdaddr_list *b;
b = list_entry(p, struct bdaddr_list, list); b = list_entry(p, struct bdaddr_list, list);
......
...@@ -439,12 +439,11 @@ static const struct file_operations inquiry_cache_fops = { ...@@ -439,12 +439,11 @@ static const struct file_operations inquiry_cache_fops = {
static int blacklist_show(struct seq_file *f, void *p) static int blacklist_show(struct seq_file *f, void *p)
{ {
struct hci_dev *hdev = f->private; struct hci_dev *hdev = f->private;
struct bdaddr_list *blacklist = &hdev->blacklist;
struct list_head *l; struct list_head *l;
hci_dev_lock_bh(hdev); hci_dev_lock_bh(hdev);
list_for_each(l, &blacklist->list) { list_for_each(l, &hdev->blacklist) {
struct bdaddr_list *b; struct bdaddr_list *b;
bdaddr_t bdaddr; bdaddr_t bdaddr;
......
...@@ -2527,6 +2527,10 @@ static int l2cap_build_conf_req(struct sock *sk, void *data) ...@@ -2527,6 +2527,10 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
if (pi->imtu != L2CAP_DEFAULT_MTU) if (pi->imtu != L2CAP_DEFAULT_MTU)
l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu); l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
if (!(pi->conn->feat_mask & L2CAP_FEAT_ERTM) &&
!(pi->conn->feat_mask & L2CAP_FEAT_STREAMING))
break;
rfc.mode = L2CAP_MODE_BASIC; rfc.mode = L2CAP_MODE_BASIC;
rfc.txwin_size = 0; rfc.txwin_size = 0;
rfc.max_transmit = 0; rfc.max_transmit = 0;
...@@ -2534,6 +2538,8 @@ static int l2cap_build_conf_req(struct sock *sk, void *data) ...@@ -2534,6 +2538,8 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
rfc.monitor_timeout = 0; rfc.monitor_timeout = 0;
rfc.max_pdu_size = 0; rfc.max_pdu_size = 0;
l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
(unsigned long) &rfc);
break; break;
case L2CAP_MODE_ERTM: case L2CAP_MODE_ERTM:
...@@ -2546,6 +2552,9 @@ static int l2cap_build_conf_req(struct sock *sk, void *data) ...@@ -2546,6 +2552,9 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10) if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10); rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
(unsigned long) &rfc);
if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS)) if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
break; break;
...@@ -2566,6 +2575,9 @@ static int l2cap_build_conf_req(struct sock *sk, void *data) ...@@ -2566,6 +2575,9 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10) if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10); rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
(unsigned long) &rfc);
if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS)) if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
break; break;
...@@ -2577,9 +2589,6 @@ static int l2cap_build_conf_req(struct sock *sk, void *data) ...@@ -2577,9 +2589,6 @@ static int l2cap_build_conf_req(struct sock *sk, void *data)
break; break;
} }
l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
(unsigned long) &rfc);
/* FIXME: Need actual value of the flush timeout */ /* FIXME: Need actual value of the flush timeout */
//if (flush_to != L2CAP_DEFAULT_FLUSH_TO) //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
// l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to); // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
...@@ -3339,6 +3348,15 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm ...@@ -3339,6 +3348,15 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
del_timer(&conn->info_timer); del_timer(&conn->info_timer);
if (result != L2CAP_IR_SUCCESS) {
conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
conn->info_ident = 0;
l2cap_conn_start(conn);
return 0;
}
if (type == L2CAP_IT_FEAT_MASK) { if (type == L2CAP_IT_FEAT_MASK) {
conn->feat_mask = get_unaligned_le32(rsp->data); conn->feat_mask = get_unaligned_le32(rsp->data);
......
...@@ -1183,7 +1183,7 @@ int __init rfcomm_init_ttys(void) ...@@ -1183,7 +1183,7 @@ int __init rfcomm_init_ttys(void)
return 0; return 0;
} }
void __exit rfcomm_cleanup_ttys(void) void rfcomm_cleanup_ttys(void)
{ {
tty_unregister_driver(rfcomm_tty_driver); tty_unregister_driver(rfcomm_tty_driver);
put_tty_driver(rfcomm_tty_driver); put_tty_driver(rfcomm_tty_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment