Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 340954
b: refs/heads/master
c: 94f418a
h: refs/heads/master
v: v3
  • Loading branch information
Samuel Ortiz committed Oct 26, 2012
1 parent 445d739 commit 1199e9f
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 31ca61a8dffa5c7171d00cfa40a2845e190863c0
refs/heads/master: 94f418a206648c9be6fd84d6681d6956b8f8b106
46 changes: 46 additions & 0 deletions trunk/net/nfc/llcp/commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,52 @@ int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock,
return len;
}

int nfc_llcp_send_ui_frame(struct nfc_llcp_sock *sock, u8 ssap, u8 dsap,
struct msghdr *msg, size_t len)
{
struct sk_buff *pdu;
struct nfc_llcp_local *local;
size_t frag_len = 0, remaining_len;
u8 *msg_ptr;
int err;

pr_debug("Send UI frame len %zd\n", len);

local = sock->local;
if (local == NULL)
return -ENODEV;

remaining_len = len;
msg_ptr = (u8 *) msg->msg_iov;

while (remaining_len > 0) {

frag_len = min_t(size_t, sock->miu, remaining_len);

pr_debug("Fragment %zd bytes remaining %zd",
frag_len, remaining_len);

pdu = nfc_alloc_send_skb(sock->dev, &sock->sk, MSG_DONTWAIT,
frag_len + LLCP_HEADER_SIZE, &err);
if (pdu == NULL) {
pr_err("Could not allocate PDU\n");
continue;
}

pdu = llcp_add_header(pdu, dsap, ssap, LLCP_PDU_UI);

memcpy(skb_put(pdu, frag_len), msg_ptr, frag_len);

/* No need to check for the peer RW for UI frames */
skb_queue_tail(&local->tx_queue, pdu);

remaining_len -= frag_len;
msg_ptr += frag_len;
}

return len;
}

int nfc_llcp_send_rr(struct nfc_llcp_sock *sock)
{
struct sk_buff *skb;
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/nfc/llcp/llcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ int nfc_llcp_send_dm(struct nfc_llcp_local *local, u8 ssap, u8 dsap, u8 reason);
int nfc_llcp_send_disconnect(struct nfc_llcp_sock *sock);
int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock,
struct msghdr *msg, size_t len);
int nfc_llcp_send_ui_frame(struct nfc_llcp_sock *sock, u8 ssap, u8 dsap,
struct msghdr *msg, size_t len);
int nfc_llcp_send_rr(struct nfc_llcp_sock *sock);

/* Socket API */
Expand Down

0 comments on commit 1199e9f

Please sign in to comment.