mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
This commit is contained in:
commit
6037463148
8 changed files with 45 additions and 20 deletions
|
@ -1851,14 +1851,6 @@ int __devinit rtl_pci_probe(struct pci_dev *pdev,
|
||||||
/*like read eeprom and so on */
|
/*like read eeprom and so on */
|
||||||
rtlpriv->cfg->ops->read_eeprom_info(hw);
|
rtlpriv->cfg->ops->read_eeprom_info(hw);
|
||||||
|
|
||||||
if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
|
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
|
|
||||||
err = -ENODEV;
|
|
||||||
goto fail3;
|
|
||||||
}
|
|
||||||
|
|
||||||
rtlpriv->cfg->ops->init_sw_leds(hw);
|
|
||||||
|
|
||||||
/*aspm */
|
/*aspm */
|
||||||
rtl_pci_init_aspm(hw);
|
rtl_pci_init_aspm(hw);
|
||||||
|
|
||||||
|
@ -1877,6 +1869,14 @@ int __devinit rtl_pci_probe(struct pci_dev *pdev,
|
||||||
goto fail3;
|
goto fail3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
|
||||||
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
|
||||||
|
err = -ENODEV;
|
||||||
|
goto fail3;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtlpriv->cfg->ops->init_sw_leds(hw);
|
||||||
|
|
||||||
err = sysfs_create_group(&pdev->dev.kobj, &rtl_attribute_group);
|
err = sysfs_create_group(&pdev->dev.kobj, &rtl_attribute_group);
|
||||||
if (err) {
|
if (err) {
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
|
||||||
|
|
|
@ -971,11 +971,6 @@ int __devinit rtl_usb_probe(struct usb_interface *intf,
|
||||||
rtlpriv->cfg->ops->read_chip_version(hw);
|
rtlpriv->cfg->ops->read_chip_version(hw);
|
||||||
/*like read eeprom and so on */
|
/*like read eeprom and so on */
|
||||||
rtlpriv->cfg->ops->read_eeprom_info(hw);
|
rtlpriv->cfg->ops->read_eeprom_info(hw);
|
||||||
if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
|
|
||||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
|
|
||||||
goto error_out;
|
|
||||||
}
|
|
||||||
rtlpriv->cfg->ops->init_sw_leds(hw);
|
|
||||||
err = _rtl_usb_init(hw);
|
err = _rtl_usb_init(hw);
|
||||||
if (err)
|
if (err)
|
||||||
goto error_out;
|
goto error_out;
|
||||||
|
@ -987,6 +982,11 @@ int __devinit rtl_usb_probe(struct usb_interface *intf,
|
||||||
"Can't allocate sw for mac80211\n");
|
"Can't allocate sw for mac80211\n");
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
|
||||||
|
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
|
||||||
|
goto error_out;
|
||||||
|
}
|
||||||
|
rtlpriv->cfg->ops->init_sw_leds(hw);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
error_out:
|
error_out:
|
||||||
|
|
|
@ -191,6 +191,7 @@ struct bt_sock {
|
||||||
struct list_head accept_q;
|
struct list_head accept_q;
|
||||||
struct sock *parent;
|
struct sock *parent;
|
||||||
u32 defer_setup;
|
u32 defer_setup;
|
||||||
|
bool suspended;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bt_sock_list {
|
struct bt_sock_list {
|
||||||
|
|
|
@ -450,7 +450,7 @@ unsigned int bt_sock_poll(struct file *file, struct socket *sock, poll_table *wa
|
||||||
sk->sk_state == BT_CONFIG)
|
sk->sk_state == BT_CONFIG)
|
||||||
return mask;
|
return mask;
|
||||||
|
|
||||||
if (sock_writeable(sk))
|
if (!bt_sk(sk)->suspended && sock_writeable(sk))
|
||||||
mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
|
mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
|
||||||
else
|
else
|
||||||
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||||
|
|
|
@ -2784,6 +2784,14 @@ static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
if (conn) {
|
if (conn) {
|
||||||
hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
|
hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
|
||||||
|
|
||||||
|
hci_dev_lock(hdev);
|
||||||
|
if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
|
||||||
|
!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
|
||||||
|
mgmt_device_connected(hdev, &conn->dst, conn->type,
|
||||||
|
conn->dst_type, 0, NULL, 0,
|
||||||
|
conn->dev_class);
|
||||||
|
hci_dev_unlock(hdev);
|
||||||
|
|
||||||
/* Send to upper protocol */
|
/* Send to upper protocol */
|
||||||
l2cap_recv_acldata(conn, skb, flags);
|
l2cap_recv_acldata(conn, skb, flags);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2039,6 +2039,12 @@ static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *
|
||||||
|
|
||||||
clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
|
clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
|
||||||
|
|
||||||
|
if (ev->status && conn->state == BT_CONNECTED) {
|
||||||
|
hci_acl_disconn(conn, 0x13);
|
||||||
|
hci_conn_put(conn);
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
if (conn->state == BT_CONFIG) {
|
if (conn->state == BT_CONFIG) {
|
||||||
if (!ev->status)
|
if (!ev->status)
|
||||||
conn->state = BT_CONNECTED;
|
conn->state = BT_CONNECTED;
|
||||||
|
@ -2049,6 +2055,7 @@ static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *
|
||||||
hci_encrypt_cfm(conn, ev->status, ev->encrypt);
|
hci_encrypt_cfm(conn, ev->status, ev->encrypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock:
|
||||||
hci_dev_unlock(hdev);
|
hci_dev_unlock(hdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2102,7 +2109,7 @@ static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ev->status) {
|
if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
|
||||||
struct hci_cp_remote_name_req cp;
|
struct hci_cp_remote_name_req cp;
|
||||||
memset(&cp, 0, sizeof(cp));
|
memset(&cp, 0, sizeof(cp));
|
||||||
bacpy(&cp.bdaddr, &conn->dst);
|
bacpy(&cp.bdaddr, &conn->dst);
|
||||||
|
@ -2871,7 +2878,7 @@ static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_b
|
||||||
if (conn->state != BT_CONFIG)
|
if (conn->state != BT_CONFIG)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
if (!ev->status) {
|
if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
|
||||||
struct hci_cp_remote_name_req cp;
|
struct hci_cp_remote_name_req cp;
|
||||||
memset(&cp, 0, sizeof(cp));
|
memset(&cp, 0, sizeof(cp));
|
||||||
bacpy(&cp.bdaddr, &conn->dst);
|
bacpy(&cp.bdaddr, &conn->dst);
|
||||||
|
|
|
@ -4589,6 +4589,11 @@ int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
|
||||||
|
|
||||||
if (!status && (chan->state == BT_CONNECTED ||
|
if (!status && (chan->state == BT_CONNECTED ||
|
||||||
chan->state == BT_CONFIG)) {
|
chan->state == BT_CONFIG)) {
|
||||||
|
struct sock *sk = chan->sk;
|
||||||
|
|
||||||
|
bt_sk(sk)->suspended = false;
|
||||||
|
sk->sk_state_change(sk);
|
||||||
|
|
||||||
l2cap_check_encryption(chan, encrypt);
|
l2cap_check_encryption(chan, encrypt);
|
||||||
l2cap_chan_unlock(chan);
|
l2cap_chan_unlock(chan);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -592,10 +592,14 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
|
||||||
sk->sk_state = BT_CONFIG;
|
sk->sk_state = BT_CONFIG;
|
||||||
chan->state = BT_CONFIG;
|
chan->state = BT_CONFIG;
|
||||||
|
|
||||||
/* or for ACL link, under defer_setup time */
|
/* or for ACL link */
|
||||||
} else if (sk->sk_state == BT_CONNECT2 &&
|
} else if ((sk->sk_state == BT_CONNECT2 &&
|
||||||
bt_sk(sk)->defer_setup) {
|
bt_sk(sk)->defer_setup) ||
|
||||||
err = l2cap_chan_check_security(chan);
|
sk->sk_state == BT_CONNECTED) {
|
||||||
|
if (!l2cap_chan_check_security(chan))
|
||||||
|
bt_sk(sk)->suspended = true;
|
||||||
|
else
|
||||||
|
sk->sk_state_change(sk);
|
||||||
} else {
|
} else {
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue