]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
NFC: Move LLCP MIU extension value to socket structure
authorSamuel Ortiz <sameo@linux.intel.com>
Mon, 14 May 2012 15:37:32 +0000 (17:37 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 4 Jun 2012 19:34:29 +0000 (21:34 +0200)
The MIU extension value can be received during the PAX or during the
connection establishment process. It's definitely a connection related value
rather than a link one.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
net/nfc/llcp/commands.c
net/nfc/llcp/llcp.c
net/nfc/llcp/llcp.h
net/nfc/llcp/sock.c

index eb51864089ef31be6f5009f155e9bed809f40e9d..850e5cf79378b69050646a6b3176620a2603b7c5 100644 (file)
@@ -183,6 +183,9 @@ int nfc_llcp_parse_connection_tlv(struct nfc_llcp_sock *sock,
                pr_debug("type 0x%x length %d\n", type, length);
 
                switch (type) {
+               case LLCP_TLV_MIUX:
+                       sock->miu = llcp_tlv_miux(tlv) + 128;
+                       break;
                case LLCP_TLV_RW:
                        sock->rw = llcp_tlv_rw(tlv);
                        break;
@@ -197,7 +200,7 @@ int nfc_llcp_parse_connection_tlv(struct nfc_llcp_sock *sock,
                tlv += length + 2;
        }
 
-       pr_debug("sock %p rw %d\n", sock, sock->rw);
+       pr_debug("sock %p rw %d miu %d\n", sock, sock->rw, sock->miu);
 
        return 0;
 }
@@ -505,7 +508,7 @@ int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock,
 
        while (remaining_len > 0) {
 
-               frag_len = min_t(size_t, local->remote_miu, remaining_len);
+               frag_len = min_t(size_t, sock->miu, remaining_len);
 
                pr_debug("Fragment %zd bytes remaining %zd",
                         frag_len, remaining_len);
index d3efc5b3c19f4dbad477aa9eb189dcc9ce838238..5f7aa3f632fbf701ab3b932ea3fa051e94cbd1a7 100644 (file)
@@ -655,6 +655,7 @@ static void nfc_llcp_recv_connect(struct nfc_llcp_local *local,
        new_sock = nfc_llcp_sock(new_sk);
        new_sock->dev = local->dev;
        new_sock->local = nfc_llcp_local_get(local);
+       new_sock->miu = local->remote_miu;
        new_sock->nfc_protocol = sock->nfc_protocol;
        new_sock->ssap = sock->ssap;
        new_sock->dsap = ssap;
index add03e74a9ea488f05a2bb36a285db9adcb07c2b..7286c86982ffa0ec135376717b902354f0167eb3 100644 (file)
@@ -102,6 +102,7 @@ struct nfc_llcp_sock {
        char *service_name;
        size_t service_name_len;
        u8 rw;
+       u16 miu;
 
        /* Link variables */
        u8 send_n;
index aab077e68094742233b17b96e8181a44c2824cbf..30e3cc71be7a0328626e42c3f06555cf8f989de5 100644 (file)
@@ -477,6 +477,7 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
 
        llcp_sock->dev = dev;
        llcp_sock->local = nfc_llcp_local_get(local);
+       llcp_sock->miu = llcp_sock->local->remote_miu;
        llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
        if (llcp_sock->ssap == LLCP_SAP_MAX) {
                ret = -ENOMEM;
@@ -679,6 +680,7 @@ struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp)
        llcp_sock->ssap = 0;
        llcp_sock->dsap = LLCP_SAP_SDP;
        llcp_sock->rw = LLCP_DEFAULT_RW;
+       llcp_sock->miu = LLCP_DEFAULT_MIU;
        llcp_sock->send_n = llcp_sock->send_ack_n = 0;
        llcp_sock->recv_n = llcp_sock->recv_ack_n = 0;
        llcp_sock->remote_ready = 1;