NFC: digital: Add NFC-DEP Initiator-side ATN Support
[firefly-linux-kernel-4.4.55.git] / net / nfc / digital_dep.c
1 /*
2  * NFC Digital Protocol stack
3  * Copyright (c) 2013, Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  */
15
16 #define pr_fmt(fmt) "digital: %s: " fmt, __func__
17
18 #include "digital.h"
19
20 #define DIGITAL_NFC_DEP_N_RETRY_NACK    2
21 #define DIGITAL_NFC_DEP_N_RETRY_ATN     2
22
23 #define DIGITAL_NFC_DEP_FRAME_DIR_OUT 0xD4
24 #define DIGITAL_NFC_DEP_FRAME_DIR_IN  0xD5
25
26 #define DIGITAL_NFC_DEP_NFCA_SOD_SB   0xF0
27
28 #define DIGITAL_CMD_ATR_REQ 0x00
29 #define DIGITAL_CMD_ATR_RES 0x01
30 #define DIGITAL_CMD_PSL_REQ 0x04
31 #define DIGITAL_CMD_PSL_RES 0x05
32 #define DIGITAL_CMD_DEP_REQ 0x06
33 #define DIGITAL_CMD_DEP_RES 0x07
34
35 #define DIGITAL_ATR_REQ_MIN_SIZE 16
36 #define DIGITAL_ATR_REQ_MAX_SIZE 64
37
38 #define DIGITAL_DID_MAX 14
39
40 #define DIGITAL_PAYLOAD_SIZE_MAX        254
41 #define DIGITAL_PAYLOAD_BITS_TO_PP(s)   (((s) & 0x3) << 4)
42 #define DIGITAL_PAYLOAD_PP_TO_BITS(s)   (((s) >> 4) & 0x3)
43 #define DIGITAL_PAYLOAD_BITS_TO_FSL(s)  ((s) & 0x3)
44 #define DIGITAL_PAYLOAD_FSL_TO_BITS(s)  ((s) & 0x3)
45
46 #define DIGITAL_GB_BIT  0x02
47
48 #define DIGITAL_NFC_DEP_REQ_RES_HEADROOM        2 /* SoD: [SB (NFC-A)] + LEN */
49 #define DIGITAL_NFC_DEP_REQ_RES_TAILROOM        2 /* EoD: 2-byte CRC */
50
51 #define DIGITAL_NFC_DEP_PFB_TYPE(pfb) ((pfb) & 0xE0)
52
53 #define DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT 0x10
54 #define DIGITAL_NFC_DEP_PFB_MI_BIT      0x10
55 #define DIGITAL_NFC_DEP_PFB_NACK_BIT    0x10
56 #define DIGITAL_NFC_DEP_PFB_DID_BIT     0x04
57
58 #define DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb) \
59                                 ((pfb) & DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT)
60 #define DIGITAL_NFC_DEP_MI_BIT_SET(pfb)  ((pfb) & DIGITAL_NFC_DEP_PFB_MI_BIT)
61 #define DIGITAL_NFC_DEP_NACK_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_NACK_BIT)
62 #define DIGITAL_NFC_DEP_NAD_BIT_SET(pfb) ((pfb) & 0x08)
63 #define DIGITAL_NFC_DEP_DID_BIT_SET(pfb) ((pfb) & DIGITAL_NFC_DEP_PFB_DID_BIT)
64 #define DIGITAL_NFC_DEP_PFB_PNI(pfb)     ((pfb) & 0x03)
65
66 #define DIGITAL_NFC_DEP_PFB_I_PDU          0x00
67 #define DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU   0x40
68 #define DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU 0x80
69
70 struct digital_atr_req {
71         u8 dir;
72         u8 cmd;
73         u8 nfcid3[10];
74         u8 did;
75         u8 bs;
76         u8 br;
77         u8 pp;
78         u8 gb[0];
79 } __packed;
80
81 struct digital_atr_res {
82         u8 dir;
83         u8 cmd;
84         u8 nfcid3[10];
85         u8 did;
86         u8 bs;
87         u8 br;
88         u8 to;
89         u8 pp;
90         u8 gb[0];
91 } __packed;
92
93 struct digital_psl_req {
94         u8 dir;
95         u8 cmd;
96         u8 did;
97         u8 brs;
98         u8 fsl;
99 } __packed;
100
101 struct digital_psl_res {
102         u8 dir;
103         u8 cmd;
104         u8 did;
105 } __packed;
106
107 struct digital_dep_req_res {
108         u8 dir;
109         u8 cmd;
110         u8 pfb;
111 } __packed;
112
113 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
114                                     struct sk_buff *resp);
115 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
116                                     struct sk_buff *resp);
117
118 static const u8 digital_payload_bits_map[4] = {
119         [0] = 64,
120         [1] = 128,
121         [2] = 192,
122         [3] = 254
123 };
124
125 static u8 digital_payload_bits_to_size(u8 payload_bits)
126 {
127         if (payload_bits >= ARRAY_SIZE(digital_payload_bits_map))
128                 return 0;
129
130         return digital_payload_bits_map[payload_bits];
131 }
132
133 static u8 digital_payload_size_to_bits(u8 payload_size)
134 {
135         int i;
136
137         for (i = 0; i < ARRAY_SIZE(digital_payload_bits_map); i++)
138                 if (digital_payload_bits_map[i] == payload_size)
139                         return i;
140
141         return 0xff;
142 }
143
144 static void digital_skb_push_dep_sod(struct nfc_digital_dev *ddev,
145                                      struct sk_buff *skb)
146 {
147         skb_push(skb, sizeof(u8));
148
149         skb->data[0] = skb->len;
150
151         if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)
152                 *skb_push(skb, sizeof(u8)) = DIGITAL_NFC_DEP_NFCA_SOD_SB;
153 }
154
155 static int digital_skb_pull_dep_sod(struct nfc_digital_dev *ddev,
156                                     struct sk_buff *skb)
157 {
158         u8 size;
159
160         if (skb->len < 2)
161                 return -EIO;
162
163         if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)
164                 skb_pull(skb, sizeof(u8));
165
166         size = skb->data[0];
167         if (size != skb->len)
168                 return -EIO;
169
170         skb_pull(skb, sizeof(u8));
171
172         return 0;
173 }
174
175 static struct sk_buff *
176 digital_send_dep_data_prep(struct nfc_digital_dev *ddev, struct sk_buff *skb,
177                            struct digital_dep_req_res *dep_req_res,
178                            struct digital_data_exch *data_exch)
179 {
180         struct sk_buff *new_skb;
181
182         if (skb->len > ddev->remote_payload_max) {
183                 dep_req_res->pfb |= DIGITAL_NFC_DEP_PFB_MI_BIT;
184
185                 new_skb = digital_skb_alloc(ddev, ddev->remote_payload_max);
186                 if (!new_skb) {
187                         kfree_skb(ddev->chaining_skb);
188                         ddev->chaining_skb = NULL;
189
190                         return ERR_PTR(-ENOMEM);
191                 }
192
193                 skb_reserve(new_skb, ddev->tx_headroom + NFC_HEADER_SIZE +
194                                         DIGITAL_NFC_DEP_REQ_RES_HEADROOM);
195                 memcpy(skb_put(new_skb, ddev->remote_payload_max), skb->data,
196                        ddev->remote_payload_max);
197                 skb_pull(skb, ddev->remote_payload_max);
198
199                 ddev->chaining_skb = skb;
200                 ddev->data_exch = data_exch;
201         } else {
202                 ddev->chaining_skb = NULL;
203                 new_skb = skb;
204         }
205
206         return new_skb;
207 }
208
209 static struct sk_buff *
210 digital_recv_dep_data_gather(struct nfc_digital_dev *ddev, u8 pfb,
211                              struct sk_buff *resp,
212                              int (*send_ack)(struct nfc_digital_dev *ddev,
213                                              struct digital_data_exch
214                                                              *data_exch),
215                              struct digital_data_exch *data_exch)
216 {
217         struct sk_buff *new_skb;
218         int rc;
219
220         if (DIGITAL_NFC_DEP_MI_BIT_SET(pfb) && (!ddev->chaining_skb)) {
221                 ddev->chaining_skb =
222                         nfc_alloc_recv_skb(8 * ddev->local_payload_max,
223                                            GFP_KERNEL);
224                 if (!ddev->chaining_skb) {
225                         rc = -ENOMEM;
226                         goto error;
227                 }
228         }
229
230         if (ddev->chaining_skb) {
231                 if (resp->len > skb_tailroom(ddev->chaining_skb)) {
232                         new_skb = skb_copy_expand(ddev->chaining_skb,
233                                                   skb_headroom(
234                                                           ddev->chaining_skb),
235                                                   8 * ddev->local_payload_max,
236                                                   GFP_KERNEL);
237                         if (!new_skb) {
238                                 rc = -ENOMEM;
239                                 goto error;
240                         }
241
242                         kfree_skb(ddev->chaining_skb);
243                         ddev->chaining_skb = new_skb;
244                 }
245
246                 memcpy(skb_put(ddev->chaining_skb, resp->len), resp->data,
247                        resp->len);
248
249                 kfree_skb(resp);
250                 resp = NULL;
251
252                 if (DIGITAL_NFC_DEP_MI_BIT_SET(pfb)) {
253                         rc = send_ack(ddev, data_exch);
254                         if (rc)
255                                 goto error;
256
257                         return NULL;
258                 }
259
260                 resp = ddev->chaining_skb;
261                 ddev->chaining_skb = NULL;
262         }
263
264         return resp;
265
266 error:
267         kfree_skb(resp);
268
269         kfree_skb(ddev->chaining_skb);
270         ddev->chaining_skb = NULL;
271
272         return ERR_PTR(rc);
273 }
274
275 static void digital_in_recv_psl_res(struct nfc_digital_dev *ddev, void *arg,
276                                     struct sk_buff *resp)
277 {
278         struct nfc_target *target = arg;
279         struct digital_psl_res *psl_res;
280         int rc;
281
282         if (IS_ERR(resp)) {
283                 rc = PTR_ERR(resp);
284                 resp = NULL;
285                 goto exit;
286         }
287
288         rc = ddev->skb_check_crc(resp);
289         if (rc) {
290                 PROTOCOL_ERR("14.4.1.6");
291                 goto exit;
292         }
293
294         rc = digital_skb_pull_dep_sod(ddev, resp);
295         if (rc) {
296                 PROTOCOL_ERR("14.4.1.2");
297                 goto exit;
298         }
299
300         psl_res = (struct digital_psl_res *)resp->data;
301
302         if ((resp->len != sizeof(*psl_res)) ||
303             (psl_res->dir != DIGITAL_NFC_DEP_FRAME_DIR_IN) ||
304             (psl_res->cmd != DIGITAL_CMD_PSL_RES)) {
305                 rc = -EIO;
306                 goto exit;
307         }
308
309         rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH,
310                                      NFC_DIGITAL_RF_TECH_424F);
311         if (rc)
312                 goto exit;
313
314         rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
315                                      NFC_DIGITAL_FRAMING_NFCF_NFC_DEP);
316         if (rc)
317                 goto exit;
318
319         if (!DIGITAL_DRV_CAPS_IN_CRC(ddev) &&
320             (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)) {
321                 ddev->skb_add_crc = digital_skb_add_crc_f;
322                 ddev->skb_check_crc = digital_skb_check_crc_f;
323         }
324
325         ddev->curr_rf_tech = NFC_DIGITAL_RF_TECH_424F;
326
327         nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE,
328                            NFC_RF_INITIATOR);
329
330         ddev->curr_nfc_dep_pni = 0;
331
332 exit:
333         dev_kfree_skb(resp);
334
335         if (rc)
336                 ddev->curr_protocol = 0;
337 }
338
339 static int digital_in_send_psl_req(struct nfc_digital_dev *ddev,
340                                    struct nfc_target *target)
341 {
342         struct sk_buff *skb;
343         struct digital_psl_req *psl_req;
344         int rc;
345         u8 payload_size, payload_bits;
346
347         skb = digital_skb_alloc(ddev, sizeof(*psl_req));
348         if (!skb)
349                 return -ENOMEM;
350
351         skb_put(skb, sizeof(*psl_req));
352
353         psl_req = (struct digital_psl_req *)skb->data;
354
355         psl_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
356         psl_req->cmd = DIGITAL_CMD_PSL_REQ;
357         psl_req->did = 0;
358         psl_req->brs = (0x2 << 3) | 0x2; /* 424F both directions */
359
360         payload_size = min(ddev->local_payload_max, ddev->remote_payload_max);
361         payload_bits = digital_payload_size_to_bits(payload_size);
362         psl_req->fsl = DIGITAL_PAYLOAD_BITS_TO_FSL(payload_bits);
363
364         ddev->local_payload_max = payload_size;
365         ddev->remote_payload_max = payload_size;
366
367         digital_skb_push_dep_sod(ddev, skb);
368
369         ddev->skb_add_crc(skb);
370
371         rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_psl_res,
372                                  target);
373         if (rc)
374                 kfree_skb(skb);
375
376         return rc;
377 }
378
379 static void digital_in_recv_atr_res(struct nfc_digital_dev *ddev, void *arg,
380                                  struct sk_buff *resp)
381 {
382         struct nfc_target *target = arg;
383         struct digital_atr_res *atr_res;
384         u8 gb_len, payload_bits;
385         int rc;
386
387         if (IS_ERR(resp)) {
388                 rc = PTR_ERR(resp);
389                 resp = NULL;
390                 goto exit;
391         }
392
393         rc = ddev->skb_check_crc(resp);
394         if (rc) {
395                 PROTOCOL_ERR("14.4.1.6");
396                 goto exit;
397         }
398
399         rc = digital_skb_pull_dep_sod(ddev, resp);
400         if (rc) {
401                 PROTOCOL_ERR("14.4.1.2");
402                 goto exit;
403         }
404
405         if (resp->len < sizeof(struct digital_atr_res)) {
406                 rc = -EIO;
407                 goto exit;
408         }
409
410         gb_len = resp->len - sizeof(struct digital_atr_res);
411
412         atr_res = (struct digital_atr_res *)resp->data;
413
414         payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_res->pp);
415         ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits);
416
417         if (!ddev->remote_payload_max) {
418                 rc = -EINVAL;
419                 goto exit;
420         }
421
422         rc = nfc_set_remote_general_bytes(ddev->nfc_dev, atr_res->gb, gb_len);
423         if (rc)
424                 goto exit;
425
426         if ((ddev->protocols & NFC_PROTO_FELICA_MASK) &&
427             (ddev->curr_rf_tech != NFC_DIGITAL_RF_TECH_424F)) {
428                 rc = digital_in_send_psl_req(ddev, target);
429                 if (!rc)
430                         goto exit;
431         }
432
433         rc = nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE,
434                                 NFC_RF_INITIATOR);
435
436         ddev->curr_nfc_dep_pni = 0;
437
438 exit:
439         dev_kfree_skb(resp);
440
441         if (rc)
442                 ddev->curr_protocol = 0;
443 }
444
445 int digital_in_send_atr_req(struct nfc_digital_dev *ddev,
446                             struct nfc_target *target, __u8 comm_mode, __u8 *gb,
447                             size_t gb_len)
448 {
449         struct sk_buff *skb;
450         struct digital_atr_req *atr_req;
451         uint size;
452         int rc;
453         u8 payload_bits;
454
455         size = DIGITAL_ATR_REQ_MIN_SIZE + gb_len;
456
457         if (size > DIGITAL_ATR_REQ_MAX_SIZE) {
458                 PROTOCOL_ERR("14.6.1.1");
459                 return -EINVAL;
460         }
461
462         skb = digital_skb_alloc(ddev, size);
463         if (!skb)
464                 return -ENOMEM;
465
466         skb_put(skb, sizeof(struct digital_atr_req));
467
468         atr_req = (struct digital_atr_req *)skb->data;
469         memset(atr_req, 0, sizeof(struct digital_atr_req));
470
471         atr_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
472         atr_req->cmd = DIGITAL_CMD_ATR_REQ;
473         if (target->nfcid2_len)
474                 memcpy(atr_req->nfcid3, target->nfcid2, NFC_NFCID2_MAXSIZE);
475         else
476                 get_random_bytes(atr_req->nfcid3, NFC_NFCID3_MAXSIZE);
477
478         atr_req->did = 0;
479         atr_req->bs = 0;
480         atr_req->br = 0;
481
482         ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX;
483         payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
484         atr_req->pp = DIGITAL_PAYLOAD_BITS_TO_PP(payload_bits);
485
486         if (gb_len) {
487                 atr_req->pp |= DIGITAL_GB_BIT;
488                 memcpy(skb_put(skb, gb_len), gb, gb_len);
489         }
490
491         digital_skb_push_dep_sod(ddev, skb);
492
493         ddev->skb_add_crc(skb);
494
495         rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_atr_res,
496                                  target);
497         if (rc)
498                 kfree_skb(skb);
499
500         return rc;
501 }
502
503 static int digital_in_send_ack(struct nfc_digital_dev *ddev,
504                                struct digital_data_exch *data_exch)
505 {
506         struct digital_dep_req_res *dep_req;
507         struct sk_buff *skb;
508         int rc;
509
510         skb = digital_skb_alloc(ddev, 1);
511         if (!skb)
512                 return -ENOMEM;
513
514         skb_push(skb, sizeof(struct digital_dep_req_res));
515
516         dep_req = (struct digital_dep_req_res *)skb->data;
517
518         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
519         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
520         dep_req->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
521                        ddev->curr_nfc_dep_pni;
522
523         digital_skb_push_dep_sod(ddev, skb);
524
525         ddev->skb_add_crc(skb);
526
527         ddev->saved_skb = skb_get(skb);
528         ddev->saved_skb_len = skb->len;
529
530         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
531                                  data_exch);
532         if (rc) {
533                 kfree_skb(skb);
534                 kfree_skb(ddev->saved_skb);
535                 ddev->saved_skb = NULL;
536         }
537
538         return rc;
539 }
540
541 static int digital_in_send_nack(struct nfc_digital_dev *ddev,
542                                 struct digital_data_exch *data_exch)
543 {
544         struct digital_dep_req_res *dep_req;
545         struct sk_buff *skb;
546         int rc;
547
548         skb = digital_skb_alloc(ddev, 1);
549         if (!skb)
550                 return -ENOMEM;
551
552         skb_push(skb, sizeof(struct digital_dep_req_res));
553
554         dep_req = (struct digital_dep_req_res *)skb->data;
555
556         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
557         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
558         dep_req->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
559                        DIGITAL_NFC_DEP_PFB_NACK_BIT | ddev->curr_nfc_dep_pni;
560
561         digital_skb_push_dep_sod(ddev, skb);
562
563         ddev->skb_add_crc(skb);
564
565         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
566                                  data_exch);
567         if (rc)
568                 kfree_skb(skb);
569
570         return rc;
571 }
572
573 static int digital_in_send_atn(struct nfc_digital_dev *ddev,
574                                struct digital_data_exch *data_exch)
575 {
576         struct digital_dep_req_res *dep_req;
577         struct sk_buff *skb;
578         int rc;
579
580         skb = digital_skb_alloc(ddev, 1);
581         if (!skb)
582                 return -ENOMEM;
583
584         skb_push(skb, sizeof(struct digital_dep_req_res));
585
586         dep_req = (struct digital_dep_req_res *)skb->data;
587
588         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
589         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
590         dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU;
591
592         digital_skb_push_dep_sod(ddev, skb);
593
594         ddev->skb_add_crc(skb);
595
596         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
597                                  data_exch);
598         if (rc)
599                 kfree_skb(skb);
600
601         return rc;
602 }
603
604 static int digital_in_send_rtox(struct nfc_digital_dev *ddev,
605                                 struct digital_data_exch *data_exch, u8 rtox)
606 {
607         struct digital_dep_req_res *dep_req;
608         struct sk_buff *skb;
609         int rc;
610
611         skb = digital_skb_alloc(ddev, 1);
612         if (!skb)
613                 return -ENOMEM;
614
615         *skb_put(skb, 1) = rtox;
616
617         skb_push(skb, sizeof(struct digital_dep_req_res));
618
619         dep_req = (struct digital_dep_req_res *)skb->data;
620
621         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
622         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
623         dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU |
624                        DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT;
625
626         digital_skb_push_dep_sod(ddev, skb);
627
628         ddev->skb_add_crc(skb);
629
630         ddev->saved_skb = skb_get(skb);
631         ddev->saved_skb_len = skb->len;
632
633         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
634                                  data_exch);
635         if (rc) {
636                 kfree_skb(skb);
637                 kfree_skb(ddev->saved_skb);
638                 ddev->saved_skb = NULL;
639         }
640
641         return rc;
642 }
643
644 static int digital_in_send_saved_skb(struct nfc_digital_dev *ddev,
645                                      struct digital_data_exch *data_exch)
646 {
647         skb_get(ddev->saved_skb);
648         skb_push(ddev->saved_skb, ddev->saved_skb_len);
649
650         return digital_in_send_cmd(ddev, ddev->saved_skb, 1500,
651                                    digital_in_recv_dep_res, data_exch);
652 }
653
654 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
655                                     struct sk_buff *resp)
656 {
657         struct digital_data_exch *data_exch = arg;
658         struct digital_dep_req_res *dep_res;
659         u8 pfb;
660         uint size;
661         int rc;
662
663         if (IS_ERR(resp)) {
664                 rc = PTR_ERR(resp);
665                 resp = NULL;
666
667                 if (((rc != -ETIMEDOUT) || ddev->nack_count) &&
668                     (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
669                         ddev->atn_count = 0;
670
671                         rc = digital_in_send_nack(ddev, data_exch);
672                         if (rc)
673                                 goto error;
674
675                         return;
676                 } else if ((rc == -ETIMEDOUT) &&
677                            (ddev->atn_count++ < DIGITAL_NFC_DEP_N_RETRY_ATN)) {
678                         ddev->nack_count = 0;
679
680                         rc = digital_in_send_atn(ddev, data_exch);
681                         if (rc)
682                                 goto error;
683
684                         return;
685                 }
686
687                 goto exit;
688         }
689
690         rc = digital_skb_pull_dep_sod(ddev, resp);
691         if (rc) {
692                 PROTOCOL_ERR("14.4.1.2");
693                 goto exit;
694         }
695
696         rc = ddev->skb_check_crc(resp);
697         if (rc) {
698                 if ((resp->len >= 4) &&
699                     (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
700                         ddev->atn_count = 0;
701
702                         rc = digital_in_send_nack(ddev, data_exch);
703                         if (rc)
704                                 goto error;
705
706                         kfree_skb(resp);
707
708                         return;
709                 }
710
711                 PROTOCOL_ERR("14.4.1.6");
712                 goto error;
713         }
714
715         ddev->atn_count = 0;
716         ddev->nack_count = 0;
717
718         if (resp->len > ddev->local_payload_max) {
719                 rc = -EMSGSIZE;
720                 goto exit;
721         }
722
723         size = sizeof(struct digital_dep_req_res);
724         dep_res = (struct digital_dep_req_res *)resp->data;
725
726         if (resp->len < size || dep_res->dir != DIGITAL_NFC_DEP_FRAME_DIR_IN ||
727             dep_res->cmd != DIGITAL_CMD_DEP_RES) {
728                 rc = -EIO;
729                 goto error;
730         }
731
732         pfb = dep_res->pfb;
733
734         if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
735                 PROTOCOL_ERR("14.8.2.1");
736                 rc = -EIO;
737                 goto error;
738         }
739
740         if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
741                 rc = -EIO;
742                 goto exit;
743         }
744
745         if (size > resp->len) {
746                 rc = -EIO;
747                 goto error;
748         }
749
750         skb_pull(resp, size);
751
752         switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
753         case DIGITAL_NFC_DEP_PFB_I_PDU:
754                 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
755                         PROTOCOL_ERR("14.12.3.3");
756                         rc = -EIO;
757                         goto error;
758                 }
759
760                 ddev->curr_nfc_dep_pni =
761                         DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
762
763                 kfree_skb(ddev->saved_skb);
764                 ddev->saved_skb = NULL;
765
766                 resp = digital_recv_dep_data_gather(ddev, pfb, resp,
767                                                     digital_in_send_ack,
768                                                     data_exch);
769                 if (IS_ERR(resp)) {
770                         rc = PTR_ERR(resp);
771                         resp = NULL;
772                         goto error;
773                 }
774
775                 /* If resp is NULL then we're still chaining so return and
776                  * wait for the next part of the PDU.  Else, the PDU is
777                  * complete so pass it up.
778                  */
779                 if (!resp)
780                         return;
781
782                 rc = 0;
783                 break;
784
785         case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
786                 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
787                         PROTOCOL_ERR("14.12.3.3");
788                         rc = -EIO;
789                         goto exit;
790                 }
791
792                 ddev->curr_nfc_dep_pni =
793                         DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
794
795                 if (ddev->chaining_skb && !DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) {
796                         kfree_skb(ddev->saved_skb);
797                         ddev->saved_skb = NULL;
798
799                         rc = digital_in_send_dep_req(ddev, NULL,
800                                                      ddev->chaining_skb,
801                                                      ddev->data_exch);
802                         if (rc)
803                                 goto error;
804
805                         return;
806                 }
807
808                 pr_err("Received a ACK/NACK PDU\n");
809                 rc = -EINVAL;
810                 goto exit;
811
812         case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
813                 if (!DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) { /* ATN */
814                         rc = digital_in_send_saved_skb(ddev, data_exch);
815                         if (rc) {
816                                 kfree_skb(ddev->saved_skb);
817                                 goto error;
818                         }
819
820                         return;
821                 }
822
823                 kfree_skb(ddev->saved_skb);
824                 ddev->saved_skb = NULL;
825
826                 rc = digital_in_send_rtox(ddev, data_exch, resp->data[0]);
827                 if (rc)
828                         goto error;
829
830                 kfree_skb(resp);
831                 return;
832         }
833
834 exit:
835         data_exch->cb(data_exch->cb_context, resp, rc);
836
837 error:
838         kfree(data_exch);
839
840         kfree_skb(ddev->chaining_skb);
841         ddev->chaining_skb = NULL;
842
843         kfree_skb(ddev->saved_skb);
844         ddev->saved_skb = NULL;
845
846         if (rc)
847                 kfree_skb(resp);
848 }
849
850 int digital_in_send_dep_req(struct nfc_digital_dev *ddev,
851                             struct nfc_target *target, struct sk_buff *skb,
852                             struct digital_data_exch *data_exch)
853 {
854         struct digital_dep_req_res *dep_req;
855         struct sk_buff *chaining_skb, *tmp_skb;
856         int rc;
857
858         skb_push(skb, sizeof(struct digital_dep_req_res));
859
860         dep_req = (struct digital_dep_req_res *)skb->data;
861
862         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
863         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
864         dep_req->pfb = ddev->curr_nfc_dep_pni;
865
866         ddev->atn_count = 0;
867         ddev->nack_count = 0;
868
869         chaining_skb = ddev->chaining_skb;
870
871         tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_req, data_exch);
872         if (IS_ERR(tmp_skb))
873                 return PTR_ERR(tmp_skb);
874
875         digital_skb_push_dep_sod(ddev, tmp_skb);
876
877         ddev->skb_add_crc(tmp_skb);
878
879         ddev->saved_skb = skb_get(tmp_skb);
880         ddev->saved_skb_len = tmp_skb->len;
881
882         rc = digital_in_send_cmd(ddev, tmp_skb, 1500, digital_in_recv_dep_res,
883                                  data_exch);
884         if (rc) {
885                 if (tmp_skb != skb)
886                         kfree_skb(tmp_skb);
887
888                 kfree_skb(chaining_skb);
889                 ddev->chaining_skb = NULL;
890
891                 kfree_skb(ddev->saved_skb);
892                 ddev->saved_skb = NULL;
893         }
894
895         return rc;
896 }
897
898 static void digital_tg_set_rf_tech(struct nfc_digital_dev *ddev, u8 rf_tech)
899 {
900         ddev->curr_rf_tech = rf_tech;
901
902         ddev->skb_add_crc = digital_skb_add_crc_none;
903         ddev->skb_check_crc = digital_skb_check_crc_none;
904
905         if (DIGITAL_DRV_CAPS_TG_CRC(ddev))
906                 return;
907
908         switch (ddev->curr_rf_tech) {
909         case NFC_DIGITAL_RF_TECH_106A:
910                 ddev->skb_add_crc = digital_skb_add_crc_a;
911                 ddev->skb_check_crc = digital_skb_check_crc_a;
912                 break;
913
914         case NFC_DIGITAL_RF_TECH_212F:
915         case NFC_DIGITAL_RF_TECH_424F:
916                 ddev->skb_add_crc = digital_skb_add_crc_f;
917                 ddev->skb_check_crc = digital_skb_check_crc_f;
918                 break;
919
920         default:
921                 break;
922         }
923 }
924
925 static int digital_tg_send_ack(struct nfc_digital_dev *ddev,
926                                struct digital_data_exch *data_exch)
927 {
928         struct digital_dep_req_res *dep_res;
929         struct sk_buff *skb;
930         int rc;
931
932         skb = digital_skb_alloc(ddev, 1);
933         if (!skb)
934                 return -ENOMEM;
935
936         skb_push(skb, sizeof(struct digital_dep_req_res));
937
938         dep_res = (struct digital_dep_req_res *)skb->data;
939
940         dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
941         dep_res->cmd = DIGITAL_CMD_DEP_RES;
942         dep_res->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
943                        ddev->curr_nfc_dep_pni;
944
945         if (ddev->did) {
946                 dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
947
948                 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did,
949                        sizeof(ddev->did));
950         }
951
952         ddev->curr_nfc_dep_pni =
953                 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
954
955         digital_skb_push_dep_sod(ddev, skb);
956
957         ddev->skb_add_crc(skb);
958
959         ddev->saved_skb = skb_get(skb);
960         ddev->saved_skb_len = skb->len;
961
962         rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req,
963                                  data_exch);
964         if (rc) {
965                 kfree_skb(skb);
966                 kfree_skb(ddev->saved_skb);
967                 ddev->saved_skb = NULL;
968         }
969
970         return rc;
971 }
972
973 static int digital_tg_send_saved_skb(struct nfc_digital_dev *ddev)
974 {
975         skb_get(ddev->saved_skb);
976         skb_push(ddev->saved_skb, ddev->saved_skb_len);
977
978         return digital_tg_send_cmd(ddev, ddev->saved_skb, 1500,
979                                    digital_tg_recv_dep_req, NULL);
980 }
981
982 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
983                                     struct sk_buff *resp)
984 {
985         int rc;
986         struct digital_dep_req_res *dep_req;
987         u8 pfb;
988         size_t size;
989
990         if (IS_ERR(resp)) {
991                 rc = PTR_ERR(resp);
992                 resp = NULL;
993                 goto exit;
994         }
995
996         rc = ddev->skb_check_crc(resp);
997         if (rc) {
998                 PROTOCOL_ERR("14.4.1.6");
999                 goto exit;
1000         }
1001
1002         rc = digital_skb_pull_dep_sod(ddev, resp);
1003         if (rc) {
1004                 PROTOCOL_ERR("14.4.1.2");
1005                 goto exit;
1006         }
1007
1008         if (resp->len > ddev->local_payload_max) {
1009                 rc = -EMSGSIZE;
1010                 goto exit;
1011         }
1012
1013         size = sizeof(struct digital_dep_req_res);
1014         dep_req = (struct digital_dep_req_res *)resp->data;
1015
1016         if (resp->len < size || dep_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1017             dep_req->cmd != DIGITAL_CMD_DEP_REQ) {
1018                 rc = -EIO;
1019                 goto exit;
1020         }
1021
1022         pfb = dep_req->pfb;
1023
1024         if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
1025                 if (ddev->did && (ddev->did == resp->data[3])) {
1026                         size++;
1027                 } else {
1028                         rc = -EIO;
1029                         goto exit;
1030                 }
1031         } else if (ddev->did) {
1032                 rc = -EIO;
1033                 goto exit;
1034         }
1035
1036         if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
1037                 rc = -EIO;
1038                 goto exit;
1039         }
1040
1041         if (size > resp->len) {
1042                 rc = -EIO;
1043                 goto exit;
1044         }
1045
1046         skb_pull(resp, size);
1047
1048         switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
1049         case DIGITAL_NFC_DEP_PFB_I_PDU:
1050                 pr_debug("DIGITAL_NFC_DEP_PFB_I_PDU\n");
1051
1052                 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
1053                         PROTOCOL_ERR("14.12.3.4");
1054                         rc = -EIO;
1055                         goto exit;
1056                 }
1057
1058                 kfree_skb(ddev->saved_skb);
1059                 ddev->saved_skb = NULL;
1060
1061                 resp = digital_recv_dep_data_gather(ddev, pfb, resp,
1062                                                     digital_tg_send_ack, NULL);
1063                 if (IS_ERR(resp)) {
1064                         rc = PTR_ERR(resp);
1065                         resp = NULL;
1066                         goto exit;
1067                 }
1068
1069                 /* If resp is NULL then we're still chaining so return and
1070                  * wait for the next part of the PDU.  Else, the PDU is
1071                  * complete so pass it up.
1072                  */
1073                 if (!resp)
1074                         return;
1075
1076                 rc = 0;
1077                 break;
1078         case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
1079                 if (!DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { /* ACK */
1080                         if ((DIGITAL_NFC_DEP_PFB_PNI(pfb) !=
1081                                                 ddev->curr_nfc_dep_pni) ||
1082                             !ddev->chaining_skb || !ddev->saved_skb) {
1083                                 rc = -EIO;
1084                                 goto exit;
1085                         }
1086
1087                         kfree_skb(ddev->saved_skb);
1088                         ddev->saved_skb = NULL;
1089
1090                         rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb);
1091                         if (rc)
1092                                 goto exit;
1093                 } else { /* NACK */
1094                         if ((DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) !=
1095                                                 ddev->curr_nfc_dep_pni) ||
1096                             !ddev->saved_skb) {
1097                                 rc = -EIO;
1098                                 goto exit;
1099                         }
1100
1101                         rc = digital_tg_send_saved_skb(ddev);
1102                         if (rc) {
1103                                 kfree_skb(ddev->saved_skb);
1104                                 goto exit;
1105                         }
1106                 }
1107
1108                 return;
1109         case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
1110                 pr_err("Received a SUPERVISOR PDU\n");
1111                 rc = -EINVAL;
1112                 goto exit;
1113         }
1114
1115         rc = nfc_tm_data_received(ddev->nfc_dev, resp);
1116
1117 exit:
1118         kfree_skb(ddev->chaining_skb);
1119         ddev->chaining_skb = NULL;
1120
1121         kfree_skb(ddev->saved_skb);
1122         ddev->saved_skb = NULL;
1123
1124         if (rc)
1125                 kfree_skb(resp);
1126 }
1127
1128 int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb)
1129 {
1130         struct digital_dep_req_res *dep_res;
1131         struct sk_buff *chaining_skb, *tmp_skb;
1132         int rc;
1133
1134         skb_push(skb, sizeof(struct digital_dep_req_res));
1135
1136         dep_res = (struct digital_dep_req_res *)skb->data;
1137
1138         dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1139         dep_res->cmd = DIGITAL_CMD_DEP_RES;
1140         dep_res->pfb = ddev->curr_nfc_dep_pni;
1141
1142         if (ddev->did) {
1143                 dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
1144
1145                 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did,
1146                        sizeof(ddev->did));
1147         }
1148
1149         ddev->curr_nfc_dep_pni =
1150                 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
1151
1152         chaining_skb = ddev->chaining_skb;
1153
1154         tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_res, NULL);
1155         if (IS_ERR(tmp_skb))
1156                 return PTR_ERR(tmp_skb);
1157
1158         digital_skb_push_dep_sod(ddev, tmp_skb);
1159
1160         ddev->skb_add_crc(tmp_skb);
1161
1162         ddev->saved_skb = skb_get(tmp_skb);
1163         ddev->saved_skb_len = tmp_skb->len;
1164
1165         rc = digital_tg_send_cmd(ddev, tmp_skb, 1500, digital_tg_recv_dep_req,
1166                                  NULL);
1167         if (rc) {
1168                 if (tmp_skb != skb)
1169                         kfree_skb(tmp_skb);
1170
1171                 kfree_skb(chaining_skb);
1172                 ddev->chaining_skb = NULL;
1173
1174                 kfree_skb(ddev->saved_skb);
1175                 ddev->saved_skb = NULL;
1176         }
1177
1178         return rc;
1179 }
1180
1181 static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev,
1182                                              void *arg, struct sk_buff *resp)
1183 {
1184         u8 rf_tech = (unsigned long)arg;
1185
1186         if (IS_ERR(resp))
1187                 return;
1188
1189         digital_tg_set_rf_tech(ddev, rf_tech);
1190
1191         digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech);
1192
1193         digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL);
1194
1195         dev_kfree_skb(resp);
1196 }
1197
1198 static int digital_tg_send_psl_res(struct nfc_digital_dev *ddev, u8 did,
1199                                    u8 rf_tech)
1200 {
1201         struct digital_psl_res *psl_res;
1202         struct sk_buff *skb;
1203         int rc;
1204
1205         skb = digital_skb_alloc(ddev, sizeof(struct digital_psl_res));
1206         if (!skb)
1207                 return -ENOMEM;
1208
1209         skb_put(skb, sizeof(struct digital_psl_res));
1210
1211         psl_res = (struct digital_psl_res *)skb->data;
1212
1213         psl_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1214         psl_res->cmd = DIGITAL_CMD_PSL_RES;
1215         psl_res->did = did;
1216
1217         digital_skb_push_dep_sod(ddev, skb);
1218
1219         ddev->skb_add_crc(skb);
1220
1221         ddev->curr_nfc_dep_pni = 0;
1222
1223         rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete,
1224                                  (void *)(unsigned long)rf_tech);
1225         if (rc)
1226                 kfree_skb(skb);
1227
1228         return rc;
1229 }
1230
1231 static void digital_tg_recv_psl_req(struct nfc_digital_dev *ddev, void *arg,
1232                                     struct sk_buff *resp)
1233 {
1234         int rc;
1235         struct digital_psl_req *psl_req;
1236         u8 rf_tech;
1237         u8 dsi, payload_size, payload_bits;
1238
1239         if (IS_ERR(resp)) {
1240                 rc = PTR_ERR(resp);
1241                 resp = NULL;
1242                 goto exit;
1243         }
1244
1245         rc = ddev->skb_check_crc(resp);
1246         if (rc) {
1247                 PROTOCOL_ERR("14.4.1.6");
1248                 goto exit;
1249         }
1250
1251         rc = digital_skb_pull_dep_sod(ddev, resp);
1252         if (rc) {
1253                 PROTOCOL_ERR("14.4.1.2");
1254                 goto exit;
1255         }
1256
1257         psl_req = (struct digital_psl_req *)resp->data;
1258
1259         if (resp->len != sizeof(struct digital_psl_req) ||
1260             psl_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1261             psl_req->cmd != DIGITAL_CMD_PSL_REQ) {
1262                 rc = -EIO;
1263                 goto exit;
1264         }
1265
1266         dsi = (psl_req->brs >> 3) & 0x07;
1267         switch (dsi) {
1268         case 0:
1269                 rf_tech = NFC_DIGITAL_RF_TECH_106A;
1270                 break;
1271         case 1:
1272                 rf_tech = NFC_DIGITAL_RF_TECH_212F;
1273                 break;
1274         case 2:
1275                 rf_tech = NFC_DIGITAL_RF_TECH_424F;
1276                 break;
1277         default:
1278                 pr_err("Unsupported dsi value %d\n", dsi);
1279                 goto exit;
1280         }
1281
1282         payload_bits = DIGITAL_PAYLOAD_FSL_TO_BITS(psl_req->fsl);
1283         payload_size = digital_payload_bits_to_size(payload_bits);
1284
1285         if (!payload_size || (payload_size > min(ddev->local_payload_max,
1286                                                  ddev->remote_payload_max))) {
1287                 rc = -EINVAL;
1288                 goto exit;
1289         }
1290
1291         ddev->local_payload_max = payload_size;
1292         ddev->remote_payload_max = payload_size;
1293
1294         rc = digital_tg_send_psl_res(ddev, psl_req->did, rf_tech);
1295
1296 exit:
1297         kfree_skb(resp);
1298 }
1299
1300 static void digital_tg_send_atr_res_complete(struct nfc_digital_dev *ddev,
1301                                              void *arg, struct sk_buff *resp)
1302 {
1303         int offset;
1304
1305         if (IS_ERR(resp)) {
1306                 digital_poll_next_tech(ddev);
1307                 return;
1308         }
1309
1310         offset = 2;
1311         if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB)
1312                 offset++;
1313
1314         if (resp->data[offset] == DIGITAL_CMD_PSL_REQ)
1315                 digital_tg_recv_psl_req(ddev, arg, resp);
1316         else
1317                 digital_tg_recv_dep_req(ddev, arg, resp);
1318 }
1319
1320 static int digital_tg_send_atr_res(struct nfc_digital_dev *ddev,
1321                                    struct digital_atr_req *atr_req)
1322 {
1323         struct digital_atr_res *atr_res;
1324         struct sk_buff *skb;
1325         u8 *gb, payload_bits;
1326         size_t gb_len;
1327         int rc;
1328
1329         gb = nfc_get_local_general_bytes(ddev->nfc_dev, &gb_len);
1330         if (!gb)
1331                 gb_len = 0;
1332
1333         skb = digital_skb_alloc(ddev, sizeof(struct digital_atr_res) + gb_len);
1334         if (!skb)
1335                 return -ENOMEM;
1336
1337         skb_put(skb, sizeof(struct digital_atr_res));
1338         atr_res = (struct digital_atr_res *)skb->data;
1339
1340         memset(atr_res, 0, sizeof(struct digital_atr_res));
1341
1342         atr_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1343         atr_res->cmd = DIGITAL_CMD_ATR_RES;
1344         memcpy(atr_res->nfcid3, atr_req->nfcid3, sizeof(atr_req->nfcid3));
1345         atr_res->to = 8;
1346
1347         ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX;
1348         payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
1349         atr_res->pp = DIGITAL_PAYLOAD_BITS_TO_PP(payload_bits);
1350
1351         if (gb_len) {
1352                 skb_put(skb, gb_len);
1353
1354                 atr_res->pp |= DIGITAL_GB_BIT;
1355                 memcpy(atr_res->gb, gb, gb_len);
1356         }
1357
1358         digital_skb_push_dep_sod(ddev, skb);
1359
1360         ddev->skb_add_crc(skb);
1361
1362         ddev->curr_nfc_dep_pni = 0;
1363
1364         rc = digital_tg_send_cmd(ddev, skb, 999,
1365                                  digital_tg_send_atr_res_complete, NULL);
1366         if (rc)
1367                 kfree_skb(skb);
1368
1369         return rc;
1370 }
1371
1372 void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg,
1373                              struct sk_buff *resp)
1374 {
1375         int rc;
1376         struct digital_atr_req *atr_req;
1377         size_t gb_len, min_size;
1378         u8 poll_tech_count, payload_bits;
1379
1380         if (IS_ERR(resp)) {
1381                 rc = PTR_ERR(resp);
1382                 resp = NULL;
1383                 goto exit;
1384         }
1385
1386         if (!resp->len) {
1387                 rc = -EIO;
1388                 goto exit;
1389         }
1390
1391         if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB) {
1392                 min_size = DIGITAL_ATR_REQ_MIN_SIZE + 2;
1393                 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_106A);
1394         } else {
1395                 min_size = DIGITAL_ATR_REQ_MIN_SIZE + 1;
1396                 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_212F);
1397         }
1398
1399         if (resp->len < min_size) {
1400                 rc = -EIO;
1401                 goto exit;
1402         }
1403
1404         ddev->curr_protocol = NFC_PROTO_NFC_DEP_MASK;
1405
1406         rc = ddev->skb_check_crc(resp);
1407         if (rc) {
1408                 PROTOCOL_ERR("14.4.1.6");
1409                 goto exit;
1410         }
1411
1412         rc = digital_skb_pull_dep_sod(ddev, resp);
1413         if (rc) {
1414                 PROTOCOL_ERR("14.4.1.2");
1415                 goto exit;
1416         }
1417
1418         atr_req = (struct digital_atr_req *)resp->data;
1419
1420         if (atr_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1421             atr_req->cmd != DIGITAL_CMD_ATR_REQ ||
1422             atr_req->did > DIGITAL_DID_MAX) {
1423                 rc = -EINVAL;
1424                 goto exit;
1425         }
1426
1427         payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_req->pp);
1428         ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits);
1429
1430         if (!ddev->remote_payload_max) {
1431                 rc = -EINVAL;
1432                 goto exit;
1433         }
1434
1435         ddev->did = atr_req->did;
1436
1437         rc = digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
1438                                      NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED);
1439         if (rc)
1440                 goto exit;
1441
1442         rc = digital_tg_send_atr_res(ddev, atr_req);
1443         if (rc)
1444                 goto exit;
1445
1446         gb_len = resp->len - sizeof(struct digital_atr_req);
1447
1448         poll_tech_count = ddev->poll_tech_count;
1449         ddev->poll_tech_count = 0;
1450
1451         rc = nfc_tm_activated(ddev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
1452                               NFC_COMM_PASSIVE, atr_req->gb, gb_len);
1453         if (rc) {
1454                 ddev->poll_tech_count = poll_tech_count;
1455                 goto exit;
1456         }
1457
1458         rc = 0;
1459 exit:
1460         if (rc)
1461                 digital_poll_next_tech(ddev);
1462
1463         dev_kfree_skb(resp);
1464 }