diff options
Diffstat (limited to 'net/bluetooth/sco.c')
| -rw-r--r-- | net/bluetooth/sco.c | 70 | 
1 files changed, 32 insertions, 38 deletions
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index 96bd388d93a..c06dbd3938e 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c @@ -92,9 +92,6 @@ static struct sco_conn *sco_conn_add(struct hci_conn *hcon)  	hcon->sco_data = conn;  	conn->hcon = hcon; -	conn->src = &hdev->bdaddr; -	conn->dst = &hcon->dst; -  	if (hdev->sco_mtu > 0)  		conn->mtu = hdev->sco_mtu;  	else @@ -156,16 +153,14 @@ static int sco_chan_add(struct sco_conn *conn, struct sock *sk,  static int sco_connect(struct sock *sk)  { -	bdaddr_t *src = &bt_sk(sk)->src; -	bdaddr_t *dst = &bt_sk(sk)->dst;  	struct sco_conn *conn;  	struct hci_conn *hcon;  	struct hci_dev  *hdev;  	int err, type; -	BT_DBG("%pMR -> %pMR", src, dst); +	BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst); -	hdev = hci_get_route(dst, src); +	hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src);  	if (!hdev)  		return -EHOSTUNREACH; @@ -182,7 +177,8 @@ static int sco_connect(struct sock *sk)  		goto done;  	} -	hcon = hci_connect_sco(hdev, type, dst, sco_pi(sk)->setting); +	hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst, +			       sco_pi(sk)->setting);  	if (IS_ERR(hcon)) {  		err = PTR_ERR(hcon);  		goto done; @@ -196,7 +192,7 @@ static int sco_connect(struct sock *sk)  	}  	/* Update source addr of the socket */ -	bacpy(src, conn->src); +	bacpy(&sco_pi(sk)->src, &hcon->src);  	err = sco_chan_add(conn, sk, NULL);  	if (err) @@ -270,7 +266,7 @@ static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)  		if (sk->sk_state != BT_LISTEN)  			continue; -		if (!bacmp(&bt_sk(sk)->src, ba)) +		if (!bacmp(&sco_pi(sk)->src, ba))  			return sk;  	} @@ -291,11 +287,11 @@ static struct sock *sco_get_sock_listen(bdaddr_t *src)  			continue;  		/* Exact match. */ -		if (!bacmp(&bt_sk(sk)->src, src)) +		if (!bacmp(&sco_pi(sk)->src, src))  			break;  		/* Closest match */ -		if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) +		if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))  			sk1 = sk;  	} @@ -475,7 +471,7 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le  		goto done;  	} -	bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr); +	bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);  	sk->sk_state = BT_BOUND; @@ -505,7 +501,7 @@ static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen  	lock_sock(sk);  	/* Set destination address and psm */ -	bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr); +	bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);  	err = sco_connect(sk);  	if (err) @@ -522,7 +518,7 @@ done:  static int sco_sock_listen(struct socket *sock, int backlog)  {  	struct sock *sk = sock->sk; -	bdaddr_t *src = &bt_sk(sk)->src; +	bdaddr_t *src = &sco_pi(sk)->src;  	int err = 0;  	BT_DBG("sk %p backlog %d", sk, backlog); @@ -626,9 +622,9 @@ static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len  	*len = sizeof(struct sockaddr_sco);  	if (peer) -		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst); +		bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);  	else -		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src); +		bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);  	return 0;  } @@ -680,20 +676,20 @@ static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)  		bacpy(&cp.bdaddr, &conn->dst);  		cp.pkt_type = cpu_to_le16(conn->pkt_type); -		cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40); -		cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40); +		cp.tx_bandwidth   = cpu_to_le32(0x00001f40); +		cp.rx_bandwidth   = cpu_to_le32(0x00001f40);  		cp.content_format = cpu_to_le16(setting);  		switch (setting & SCO_AIRMODE_MASK) {  		case SCO_AIRMODE_TRANSP:  			if (conn->pkt_type & ESCO_2EV3) -				cp.max_latency = __constant_cpu_to_le16(0x0008); +				cp.max_latency = cpu_to_le16(0x0008);  			else -				cp.max_latency = __constant_cpu_to_le16(0x000D); +				cp.max_latency = cpu_to_le16(0x000D);  			cp.retrans_effort = 0x02;  			break;  		case SCO_AIRMODE_CVSD: -			cp.max_latency = __constant_cpu_to_le16(0xffff); +			cp.max_latency = cpu_to_le16(0xffff);  			cp.retrans_effort = 0xff;  			break;  		} @@ -715,7 +711,6 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,  	    test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {  		sco_conn_defer_accept(pi->conn->hcon, pi->setting);  		sk->sk_state = BT_CONFIG; -		msg->msg_namelen = 0;  		release_sock(sk);  		return 0; @@ -999,7 +994,7 @@ static void sco_conn_ready(struct sco_conn *conn)  	} else {  		sco_conn_lock(conn); -		parent = sco_get_sock_listen(conn->src); +		parent = sco_get_sock_listen(&conn->hcon->src);  		if (!parent) {  			sco_conn_unlock(conn);  			return; @@ -1017,8 +1012,8 @@ static void sco_conn_ready(struct sco_conn *conn)  		sco_sock_init(sk, parent); -		bacpy(&bt_sk(sk)->src, conn->src); -		bacpy(&bt_sk(sk)->dst, conn->dst); +		bacpy(&sco_pi(sk)->src, &conn->hcon->src); +		bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);  		hci_conn_hold(conn->hcon);  		__sco_chan_add(conn, sk, parent); @@ -1029,7 +1024,7 @@ static void sco_conn_ready(struct sco_conn *conn)  			sk->sk_state = BT_CONNECTED;  		/* Wake up parent */ -		parent->sk_data_ready(parent, 1); +		parent->sk_data_ready(parent);  		bh_unlock_sock(parent); @@ -1051,8 +1046,8 @@ int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)  		if (sk->sk_state != BT_LISTEN)  			continue; -		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) || -		    !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) { +		if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) || +		    !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {  			lm |= HCI_LM_ACCEPT;  			if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) @@ -1111,8 +1106,8 @@ static int sco_debugfs_show(struct seq_file *f, void *p)  	read_lock(&sco_sk_list.lock);  	sk_for_each(sk, &sco_sk_list.head) { -		seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src, -			   &bt_sk(sk)->dst, sk->sk_state); +		seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src, +			   &sco_pi(sk)->dst, sk->sk_state);  	}  	read_unlock(&sco_sk_list.lock); @@ -1181,15 +1176,14 @@ int __init sco_init(void)  		goto error;  	} -	if (bt_debugfs) { -		sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs, -						  NULL, &sco_debugfs_fops); -		if (!sco_debugfs) -			BT_ERR("Failed to create SCO debug file"); -	} -  	BT_INFO("SCO socket layer initialized"); +	if (IS_ERR_OR_NULL(bt_debugfs)) +		return 0; + +	sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs, +					  NULL, &sco_debugfs_fops); +  	return 0;  error:  | 
