Commit 53aef920 authored by Samuel Ortiz's avatar Samuel Ortiz Committed by John W. Linville

NFC: Handle Receiver Not Ready LLCP frame

Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 4722d2b7
...@@ -671,15 +671,15 @@ static void nfc_llcp_recv_hdlc(struct nfc_llcp_local *local, ...@@ -671,15 +671,15 @@ static void nfc_llcp_recv_hdlc(struct nfc_llcp_local *local,
nfc_llcp_sock_put(llcp_sock); nfc_llcp_sock_put(llcp_sock);
} }
if (ns == llcp_sock->recv_n)
llcp_sock->recv_n = (llcp_sock->recv_n + 1) % 16;
else
pr_err("Received out of sequence I PDU\n");
/* Pass the payload upstream */ /* Pass the payload upstream */
if (ptype == LLCP_PDU_I) { if (ptype == LLCP_PDU_I) {
pr_debug("I frame, queueing on %p\n", &llcp_sock->sk); pr_debug("I frame, queueing on %p\n", &llcp_sock->sk);
if (ns == llcp_sock->recv_n)
llcp_sock->recv_n = (llcp_sock->recv_n + 1) % 16;
else
pr_err("Received out of sequence I PDU\n");
skb_pull(skb, LLCP_HEADER_SIZE + LLCP_SEQUENCE_SIZE); skb_pull(skb, LLCP_HEADER_SIZE + LLCP_SEQUENCE_SIZE);
if (sock_queue_rcv_skb(&llcp_sock->sk, skb)) { if (sock_queue_rcv_skb(&llcp_sock->sk, skb)) {
pr_err("receive queue is full\n"); pr_err("receive queue is full\n");
...@@ -700,6 +700,11 @@ static void nfc_llcp_recv_hdlc(struct nfc_llcp_local *local, ...@@ -700,6 +700,11 @@ static void nfc_llcp_recv_hdlc(struct nfc_llcp_local *local,
} }
} }
if (ptype == LLCP_PDU_RR)
llcp_sock->remote_ready = true;
else if (ptype == LLCP_PDU_RNR)
llcp_sock->remote_ready = false;
nfc_llcp_queue_i_frames(llcp_sock); nfc_llcp_queue_i_frames(llcp_sock);
release_sock(sk); release_sock(sk);
...@@ -813,6 +818,7 @@ static void nfc_llcp_rx_work(struct work_struct *work) ...@@ -813,6 +818,7 @@ static void nfc_llcp_rx_work(struct work_struct *work)
case LLCP_PDU_I: case LLCP_PDU_I:
case LLCP_PDU_RR: case LLCP_PDU_RR:
case LLCP_PDU_RNR:
pr_debug("I frame\n"); pr_debug("I frame\n");
nfc_llcp_recv_hdlc(local, skb); nfc_llcp_recv_hdlc(local, skb);
break; break;
......
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