Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6222fb0 authored by John W. Linville's avatar John W. Linville
Browse files

Merge branch 'master' of git://github.com/padovan/bluetooth-next

parents 76ed94be c510eae3
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ static struct usb_device_id btusb_table[] = {
	/* Generic Bluetooth USB device */
	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },

	/* Broadcom SoftSailing reporting vendor specific */
	{ USB_DEVICE(0x05ac, 0x21e1) },

	/* Apple MacBookPro 7,1 */
	{ USB_DEVICE(0x05ac, 0x8213) },

@@ -708,8 +711,7 @@ static int btusb_send_frame(struct sk_buff *skb)
		break;

	case HCI_ACLDATA_PKT:
		if (!data->bulk_tx_ep || (hdev->conn_hash.acl_num < 1 &&
						hdev->conn_hash.le_num < 1))
		if (!data->bulk_tx_ep)
			return -ENODEV;

		urb = usb_alloc_urb(0, GFP_ATOMIC);
+1 −2
Original line number Diff line number Diff line
@@ -354,8 +354,8 @@ struct l2cap_chan {
	__u8		retry_count;
	__u8		num_acked;
	__u16		sdu_len;
	__u16		partial_sdu_len;
	struct sk_buff	*sdu;
	struct sk_buff	*sdu_last_frag;

	__u8		remote_tx_win;
	__u8		remote_max_tx;
@@ -448,7 +448,6 @@ enum {
#define L2CAP_CONF_MAX_CONF_RSP 2

enum {
	CONN_SAR_SDU,
	CONN_SREJ_SENT,
	CONN_WAIT_F,
	CONN_SREJ_ACT,
+28 −2
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
		}

		chunk = min_t(unsigned int, skb->len, size);
		if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
		if (skb_copy_datagram_iovec(skb, 0, msg->msg_iov, chunk)) {
			skb_queue_head(&sk->sk_receive_queue, skb);
			if (!copied)
				copied = -EFAULT;
@@ -361,7 +361,33 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
		sock_recv_ts_and_drops(msg, sk, skb);

		if (!(flags & MSG_PEEK)) {
			skb_pull(skb, chunk);
			int skb_len = skb_headlen(skb);

			if (chunk <= skb_len) {
				__skb_pull(skb, chunk);
			} else {
				struct sk_buff *frag;

				__skb_pull(skb, skb_len);
				chunk -= skb_len;

				skb_walk_frags(skb, frag) {
					if (chunk <= frag->len) {
						/* Pulling partial data */
						skb->len -= chunk;
						skb->data_len -= chunk;
						__skb_pull(frag, chunk);
						break;
					} else if (frag->len) {
						/* Pulling all frag data */
						chunk -= frag->len;
						skb->len -= frag->len;
						skb->data_len -= frag->len;
						__skb_pull(frag, frag->len);
					}
				}
			}

			if (skb->len) {
				skb_queue_head(&sk->sk_receive_queue, skb);
				break;
+4 −1
Original line number Diff line number Diff line
@@ -492,7 +492,10 @@ static int bnep_session(void *arg)
		/* RX */
		while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
			skb_orphan(skb);
			if (!skb_linearize(skb))
				bnep_rx_frame(s, skb);
			else
				kfree_skb(skb);
		}

		if (sk->sk_state != BT_CONNECTED)
+4 −1
Original line number Diff line number Diff line
@@ -302,7 +302,10 @@ static int cmtp_session(void *arg)

		while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
			skb_orphan(skb);
			if (!skb_linearize(skb))
				cmtp_recv_frame(session, skb);
			else
				kfree_skb(skb);
		}

		cmtp_process_transmit(session);
Loading