]> git.karo-electronics.de Git - karo-tx-linux.git/blob - net/nfc/digital_dep.c
NFC: digital: Fix handling of saved PDU sk_buff pointers
[karo-tx-linux.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 = pskb_copy(skb, GFP_KERNEL);
528
529         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
530                                  data_exch);
531         if (rc) {
532                 kfree_skb(skb);
533                 kfree_skb(ddev->saved_skb);
534                 ddev->saved_skb = NULL;
535         }
536
537         return rc;
538 }
539
540 static int digital_in_send_nack(struct nfc_digital_dev *ddev,
541                                 struct digital_data_exch *data_exch)
542 {
543         struct digital_dep_req_res *dep_req;
544         struct sk_buff *skb;
545         int rc;
546
547         skb = digital_skb_alloc(ddev, 1);
548         if (!skb)
549                 return -ENOMEM;
550
551         skb_push(skb, sizeof(struct digital_dep_req_res));
552
553         dep_req = (struct digital_dep_req_res *)skb->data;
554
555         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
556         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
557         dep_req->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
558                        DIGITAL_NFC_DEP_PFB_NACK_BIT | ddev->curr_nfc_dep_pni;
559
560         digital_skb_push_dep_sod(ddev, skb);
561
562         ddev->skb_add_crc(skb);
563
564         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
565                                  data_exch);
566         if (rc)
567                 kfree_skb(skb);
568
569         return rc;
570 }
571
572 static int digital_in_send_atn(struct nfc_digital_dev *ddev,
573                                struct digital_data_exch *data_exch)
574 {
575         struct digital_dep_req_res *dep_req;
576         struct sk_buff *skb;
577         int rc;
578
579         skb = digital_skb_alloc(ddev, 1);
580         if (!skb)
581                 return -ENOMEM;
582
583         skb_push(skb, sizeof(struct digital_dep_req_res));
584
585         dep_req = (struct digital_dep_req_res *)skb->data;
586
587         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
588         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
589         dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU;
590
591         digital_skb_push_dep_sod(ddev, skb);
592
593         ddev->skb_add_crc(skb);
594
595         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
596                                  data_exch);
597         if (rc)
598                 kfree_skb(skb);
599
600         return rc;
601 }
602
603 static int digital_in_send_rtox(struct nfc_digital_dev *ddev,
604                                 struct digital_data_exch *data_exch, u8 rtox)
605 {
606         struct digital_dep_req_res *dep_req;
607         struct sk_buff *skb;
608         int rc;
609
610         skb = digital_skb_alloc(ddev, 1);
611         if (!skb)
612                 return -ENOMEM;
613
614         *skb_put(skb, 1) = rtox;
615
616         skb_push(skb, sizeof(struct digital_dep_req_res));
617
618         dep_req = (struct digital_dep_req_res *)skb->data;
619
620         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
621         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
622         dep_req->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU |
623                        DIGITAL_NFC_DEP_PFB_TIMEOUT_BIT;
624
625         digital_skb_push_dep_sod(ddev, skb);
626
627         ddev->skb_add_crc(skb);
628
629         rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res,
630                                  data_exch);
631         if (rc)
632                 kfree_skb(skb);
633
634         return rc;
635 }
636
637 static int digital_in_send_saved_skb(struct nfc_digital_dev *ddev,
638                                      struct digital_data_exch *data_exch)
639 {
640         int rc;
641
642         if (!ddev->saved_skb)
643                 return -EINVAL;
644
645         skb_get(ddev->saved_skb);
646
647         rc = digital_in_send_cmd(ddev, ddev->saved_skb, 1500,
648                                  digital_in_recv_dep_res, data_exch);
649         if (rc)
650                 kfree_skb(ddev->saved_skb);
651
652         return rc;
653 }
654
655 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
656                                     struct sk_buff *resp)
657 {
658         struct digital_data_exch *data_exch = arg;
659         struct digital_dep_req_res *dep_res;
660         u8 pfb;
661         uint size;
662         int rc;
663
664         if (IS_ERR(resp)) {
665                 rc = PTR_ERR(resp);
666                 resp = NULL;
667
668                 if ((rc == -EIO || (rc == -ETIMEDOUT && ddev->nack_count)) &&
669                     (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
670                         ddev->atn_count = 0;
671
672                         rc = digital_in_send_nack(ddev, data_exch);
673                         if (rc)
674                                 goto error;
675
676                         return;
677                 } else if ((rc == -ETIMEDOUT) &&
678                            (ddev->atn_count++ < DIGITAL_NFC_DEP_N_RETRY_ATN)) {
679                         ddev->nack_count = 0;
680
681                         rc = digital_in_send_atn(ddev, data_exch);
682                         if (rc)
683                                 goto error;
684
685                         return;
686                 }
687
688                 goto exit;
689         }
690
691         rc = digital_skb_pull_dep_sod(ddev, resp);
692         if (rc) {
693                 PROTOCOL_ERR("14.4.1.2");
694                 goto exit;
695         }
696
697         rc = ddev->skb_check_crc(resp);
698         if (rc) {
699                 if ((resp->len >= 4) &&
700                     (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) {
701                         ddev->atn_count = 0;
702
703                         rc = digital_in_send_nack(ddev, data_exch);
704                         if (rc)
705                                 goto error;
706
707                         kfree_skb(resp);
708
709                         return;
710                 }
711
712                 PROTOCOL_ERR("14.4.1.6");
713                 goto error;
714         }
715
716         ddev->atn_count = 0;
717         ddev->nack_count = 0;
718
719         if (resp->len > ddev->local_payload_max) {
720                 rc = -EMSGSIZE;
721                 goto exit;
722         }
723
724         size = sizeof(struct digital_dep_req_res);
725         dep_res = (struct digital_dep_req_res *)resp->data;
726
727         if (resp->len < size || dep_res->dir != DIGITAL_NFC_DEP_FRAME_DIR_IN ||
728             dep_res->cmd != DIGITAL_CMD_DEP_RES) {
729                 rc = -EIO;
730                 goto error;
731         }
732
733         pfb = dep_res->pfb;
734
735         if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
736                 PROTOCOL_ERR("14.8.2.1");
737                 rc = -EIO;
738                 goto error;
739         }
740
741         if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
742                 rc = -EIO;
743                 goto exit;
744         }
745
746         if (size > resp->len) {
747                 rc = -EIO;
748                 goto error;
749         }
750
751         skb_pull(resp, size);
752
753         switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
754         case DIGITAL_NFC_DEP_PFB_I_PDU:
755                 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
756                         PROTOCOL_ERR("14.12.3.3");
757                         rc = -EIO;
758                         goto error;
759                 }
760
761                 ddev->curr_nfc_dep_pni =
762                         DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
763
764                 kfree_skb(ddev->saved_skb);
765                 ddev->saved_skb = NULL;
766
767                 resp = digital_recv_dep_data_gather(ddev, pfb, resp,
768                                                     digital_in_send_ack,
769                                                     data_exch);
770                 if (IS_ERR(resp)) {
771                         rc = PTR_ERR(resp);
772                         resp = NULL;
773                         goto error;
774                 }
775
776                 /* If resp is NULL then we're still chaining so return and
777                  * wait for the next part of the PDU.  Else, the PDU is
778                  * complete so pass it up.
779                  */
780                 if (!resp)
781                         return;
782
783                 rc = 0;
784                 break;
785
786         case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
787                 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) {
788                         PROTOCOL_ERR("14.12.3.3");
789                         rc = -EIO;
790                         goto exit;
791                 }
792
793                 ddev->curr_nfc_dep_pni =
794                         DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
795
796                 if (ddev->chaining_skb && !DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) {
797                         kfree_skb(ddev->saved_skb);
798                         ddev->saved_skb = NULL;
799
800                         rc = digital_in_send_dep_req(ddev, NULL,
801                                                      ddev->chaining_skb,
802                                                      ddev->data_exch);
803                         if (rc)
804                                 goto error;
805
806                         return;
807                 }
808
809                 pr_err("Received a ACK/NACK PDU\n");
810                 rc = -EINVAL;
811                 goto exit;
812
813         case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
814                 if (!DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) { /* ATN */
815                         rc = digital_in_send_saved_skb(ddev, data_exch);
816                         if (rc)
817                                 goto error;
818
819                         return;
820                 }
821
822                 rc = digital_in_send_rtox(ddev, data_exch, resp->data[0]);
823                 if (rc)
824                         goto error;
825
826                 kfree_skb(resp);
827                 return;
828         }
829
830 exit:
831         data_exch->cb(data_exch->cb_context, resp, rc);
832
833 error:
834         kfree(data_exch);
835
836         kfree_skb(ddev->chaining_skb);
837         ddev->chaining_skb = NULL;
838
839         kfree_skb(ddev->saved_skb);
840         ddev->saved_skb = NULL;
841
842         if (rc)
843                 kfree_skb(resp);
844 }
845
846 int digital_in_send_dep_req(struct nfc_digital_dev *ddev,
847                             struct nfc_target *target, struct sk_buff *skb,
848                             struct digital_data_exch *data_exch)
849 {
850         struct digital_dep_req_res *dep_req;
851         struct sk_buff *chaining_skb, *tmp_skb;
852         int rc;
853
854         skb_push(skb, sizeof(struct digital_dep_req_res));
855
856         dep_req = (struct digital_dep_req_res *)skb->data;
857
858         dep_req->dir = DIGITAL_NFC_DEP_FRAME_DIR_OUT;
859         dep_req->cmd = DIGITAL_CMD_DEP_REQ;
860         dep_req->pfb = ddev->curr_nfc_dep_pni;
861
862         ddev->atn_count = 0;
863         ddev->nack_count = 0;
864
865         chaining_skb = ddev->chaining_skb;
866
867         tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_req, data_exch);
868         if (IS_ERR(tmp_skb))
869                 return PTR_ERR(tmp_skb);
870
871         digital_skb_push_dep_sod(ddev, tmp_skb);
872
873         ddev->skb_add_crc(tmp_skb);
874
875         ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL);
876
877         rc = digital_in_send_cmd(ddev, tmp_skb, 1500, digital_in_recv_dep_res,
878                                  data_exch);
879         if (rc) {
880                 if (tmp_skb != skb)
881                         kfree_skb(tmp_skb);
882
883                 kfree_skb(chaining_skb);
884                 ddev->chaining_skb = NULL;
885
886                 kfree_skb(ddev->saved_skb);
887                 ddev->saved_skb = NULL;
888         }
889
890         return rc;
891 }
892
893 static void digital_tg_set_rf_tech(struct nfc_digital_dev *ddev, u8 rf_tech)
894 {
895         ddev->curr_rf_tech = rf_tech;
896
897         ddev->skb_add_crc = digital_skb_add_crc_none;
898         ddev->skb_check_crc = digital_skb_check_crc_none;
899
900         if (DIGITAL_DRV_CAPS_TG_CRC(ddev))
901                 return;
902
903         switch (ddev->curr_rf_tech) {
904         case NFC_DIGITAL_RF_TECH_106A:
905                 ddev->skb_add_crc = digital_skb_add_crc_a;
906                 ddev->skb_check_crc = digital_skb_check_crc_a;
907                 break;
908
909         case NFC_DIGITAL_RF_TECH_212F:
910         case NFC_DIGITAL_RF_TECH_424F:
911                 ddev->skb_add_crc = digital_skb_add_crc_f;
912                 ddev->skb_check_crc = digital_skb_check_crc_f;
913                 break;
914
915         default:
916                 break;
917         }
918 }
919
920 static int digital_tg_send_ack(struct nfc_digital_dev *ddev,
921                                struct digital_data_exch *data_exch)
922 {
923         struct digital_dep_req_res *dep_res;
924         struct sk_buff *skb;
925         int rc;
926
927         skb = digital_skb_alloc(ddev, 1);
928         if (!skb)
929                 return -ENOMEM;
930
931         skb_push(skb, sizeof(struct digital_dep_req_res));
932
933         dep_res = (struct digital_dep_req_res *)skb->data;
934
935         dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
936         dep_res->cmd = DIGITAL_CMD_DEP_RES;
937         dep_res->pfb = DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU |
938                        ddev->curr_nfc_dep_pni;
939
940         if (ddev->did) {
941                 dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
942
943                 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did,
944                        sizeof(ddev->did));
945         }
946
947         ddev->curr_nfc_dep_pni =
948                 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
949
950         digital_skb_push_dep_sod(ddev, skb);
951
952         ddev->skb_add_crc(skb);
953
954         ddev->saved_skb = pskb_copy(skb, GFP_KERNEL);
955
956         rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req,
957                                  data_exch);
958         if (rc) {
959                 kfree_skb(skb);
960                 kfree_skb(ddev->saved_skb);
961                 ddev->saved_skb = NULL;
962         }
963
964         return rc;
965 }
966
967 static int digital_tg_send_atn(struct nfc_digital_dev *ddev)
968 {
969         struct digital_dep_req_res *dep_res;
970         struct sk_buff *skb;
971         int rc;
972
973         skb = digital_skb_alloc(ddev, 1);
974         if (!skb)
975                 return -ENOMEM;
976
977         skb_push(skb, sizeof(struct digital_dep_req_res));
978
979         dep_res = (struct digital_dep_req_res *)skb->data;
980
981         dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
982         dep_res->cmd = DIGITAL_CMD_DEP_RES;
983         dep_res->pfb = DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU;
984
985         if (ddev->did) {
986                 dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
987
988                 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did,
989                        sizeof(ddev->did));
990         }
991
992         digital_skb_push_dep_sod(ddev, skb);
993
994         ddev->skb_add_crc(skb);
995
996         rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req,
997                                  NULL);
998         if (rc)
999                 kfree_skb(skb);
1000
1001         return rc;
1002 }
1003
1004 static int digital_tg_send_saved_skb(struct nfc_digital_dev *ddev)
1005 {
1006         int rc;
1007
1008         if (!ddev->saved_skb)
1009                 return -EINVAL;
1010
1011         skb_get(ddev->saved_skb);
1012
1013         rc = digital_tg_send_cmd(ddev, ddev->saved_skb, 1500,
1014                                  digital_tg_recv_dep_req, NULL);
1015         if (rc)
1016                 kfree_skb(ddev->saved_skb);
1017
1018         return rc;
1019 }
1020
1021 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
1022                                     struct sk_buff *resp)
1023 {
1024         int rc;
1025         struct digital_dep_req_res *dep_req;
1026         u8 pfb;
1027         size_t size;
1028
1029         if (IS_ERR(resp)) {
1030                 rc = PTR_ERR(resp);
1031                 resp = NULL;
1032                 goto exit;
1033         }
1034
1035         rc = ddev->skb_check_crc(resp);
1036         if (rc) {
1037                 PROTOCOL_ERR("14.4.1.6");
1038                 goto exit;
1039         }
1040
1041         rc = digital_skb_pull_dep_sod(ddev, resp);
1042         if (rc) {
1043                 PROTOCOL_ERR("14.4.1.2");
1044                 goto exit;
1045         }
1046
1047         if (resp->len > ddev->local_payload_max) {
1048                 rc = -EMSGSIZE;
1049                 goto exit;
1050         }
1051
1052         size = sizeof(struct digital_dep_req_res);
1053         dep_req = (struct digital_dep_req_res *)resp->data;
1054
1055         if (resp->len < size || dep_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1056             dep_req->cmd != DIGITAL_CMD_DEP_REQ) {
1057                 rc = -EIO;
1058                 goto exit;
1059         }
1060
1061         pfb = dep_req->pfb;
1062
1063         if (DIGITAL_NFC_DEP_DID_BIT_SET(pfb)) {
1064                 if (ddev->did && (ddev->did == resp->data[3])) {
1065                         size++;
1066                 } else {
1067                         rc = -EIO;
1068                         goto exit;
1069                 }
1070         } else if (ddev->did) {
1071                 rc = -EIO;
1072                 goto exit;
1073         }
1074
1075         if (DIGITAL_NFC_DEP_NAD_BIT_SET(pfb)) {
1076                 rc = -EIO;
1077                 goto exit;
1078         }
1079
1080         if (size > resp->len) {
1081                 rc = -EIO;
1082                 goto exit;
1083         }
1084
1085         skb_pull(resp, size);
1086
1087         switch (DIGITAL_NFC_DEP_PFB_TYPE(pfb)) {
1088         case DIGITAL_NFC_DEP_PFB_I_PDU:
1089                 pr_debug("DIGITAL_NFC_DEP_PFB_I_PDU\n");
1090
1091                 if ((ddev->atn_count && (DIGITAL_NFC_DEP_PFB_PNI(pfb - 1) !=
1092                                                 ddev->curr_nfc_dep_pni)) ||
1093                     (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni)) {
1094                         PROTOCOL_ERR("14.12.3.4");
1095                         rc = -EIO;
1096                         goto exit;
1097                 }
1098
1099                 if (ddev->atn_count) {
1100                         ddev->atn_count = 0;
1101
1102                         rc = digital_tg_send_saved_skb(ddev);
1103                         if (rc)
1104                                 goto exit;
1105
1106                         return;
1107                 }
1108
1109                 kfree_skb(ddev->saved_skb);
1110                 ddev->saved_skb = NULL;
1111
1112                 resp = digital_recv_dep_data_gather(ddev, pfb, resp,
1113                                                     digital_tg_send_ack, NULL);
1114                 if (IS_ERR(resp)) {
1115                         rc = PTR_ERR(resp);
1116                         resp = NULL;
1117                         goto exit;
1118                 }
1119
1120                 /* If resp is NULL then we're still chaining so return and
1121                  * wait for the next part of the PDU.  Else, the PDU is
1122                  * complete so pass it up.
1123                  */
1124                 if (!resp)
1125                         return;
1126
1127                 rc = 0;
1128                 break;
1129         case DIGITAL_NFC_DEP_PFB_ACK_NACK_PDU:
1130                 if (!DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { /* ACK */
1131                         if ((ddev->atn_count &&
1132                              (DIGITAL_NFC_DEP_PFB_PNI(pfb - 1) !=
1133                                                 ddev->curr_nfc_dep_pni)) ||
1134                             (DIGITAL_NFC_DEP_PFB_PNI(pfb) !=
1135                                                 ddev->curr_nfc_dep_pni) ||
1136                             !ddev->chaining_skb || !ddev->saved_skb) {
1137                                 rc = -EIO;
1138                                 goto exit;
1139                         }
1140
1141                         if (ddev->atn_count) {
1142                                 ddev->atn_count = 0;
1143
1144                                 rc = digital_tg_send_saved_skb(ddev);
1145                                 if (rc)
1146                                         goto exit;
1147
1148                                 return;
1149                         }
1150
1151                         kfree_skb(ddev->saved_skb);
1152                         ddev->saved_skb = NULL;
1153
1154                         rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb);
1155                         if (rc)
1156                                 goto exit;
1157                 } else { /* NACK */
1158                         if ((DIGITAL_NFC_DEP_PFB_PNI(pfb + 1) !=
1159                                                 ddev->curr_nfc_dep_pni) ||
1160                             !ddev->saved_skb) {
1161                                 rc = -EIO;
1162                                 goto exit;
1163                         }
1164
1165                         ddev->atn_count = 0;
1166
1167                         rc = digital_tg_send_saved_skb(ddev);
1168                         if (rc)
1169                                 goto exit;
1170                 }
1171
1172                 return;
1173         case DIGITAL_NFC_DEP_PFB_SUPERVISOR_PDU:
1174                 if (DIGITAL_NFC_DEP_PFB_IS_TIMEOUT(pfb)) {
1175                         rc = -EINVAL;
1176                         goto exit;
1177                 }
1178
1179                 rc = digital_tg_send_atn(ddev);
1180                 if (rc)
1181                         goto exit;
1182
1183                 ddev->atn_count++;
1184
1185                 kfree_skb(resp);
1186                 return;
1187         }
1188
1189         rc = nfc_tm_data_received(ddev->nfc_dev, resp);
1190
1191 exit:
1192         kfree_skb(ddev->chaining_skb);
1193         ddev->chaining_skb = NULL;
1194
1195         ddev->atn_count = 0;
1196
1197         kfree_skb(ddev->saved_skb);
1198         ddev->saved_skb = NULL;
1199
1200         if (rc)
1201                 kfree_skb(resp);
1202 }
1203
1204 int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb)
1205 {
1206         struct digital_dep_req_res *dep_res;
1207         struct sk_buff *chaining_skb, *tmp_skb;
1208         int rc;
1209
1210         skb_push(skb, sizeof(struct digital_dep_req_res));
1211
1212         dep_res = (struct digital_dep_req_res *)skb->data;
1213
1214         dep_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1215         dep_res->cmd = DIGITAL_CMD_DEP_RES;
1216         dep_res->pfb = ddev->curr_nfc_dep_pni;
1217
1218         if (ddev->did) {
1219                 dep_res->pfb |= DIGITAL_NFC_DEP_PFB_DID_BIT;
1220
1221                 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did,
1222                        sizeof(ddev->did));
1223         }
1224
1225         ddev->curr_nfc_dep_pni =
1226                 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1);
1227
1228         chaining_skb = ddev->chaining_skb;
1229
1230         tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_res, NULL);
1231         if (IS_ERR(tmp_skb))
1232                 return PTR_ERR(tmp_skb);
1233
1234         digital_skb_push_dep_sod(ddev, tmp_skb);
1235
1236         ddev->skb_add_crc(tmp_skb);
1237
1238         ddev->saved_skb = pskb_copy(tmp_skb, GFP_KERNEL);
1239
1240         rc = digital_tg_send_cmd(ddev, tmp_skb, 1500, digital_tg_recv_dep_req,
1241                                  NULL);
1242         if (rc) {
1243                 if (tmp_skb != skb)
1244                         kfree_skb(tmp_skb);
1245
1246                 kfree_skb(chaining_skb);
1247                 ddev->chaining_skb = NULL;
1248
1249                 kfree_skb(ddev->saved_skb);
1250                 ddev->saved_skb = NULL;
1251         }
1252
1253         return rc;
1254 }
1255
1256 static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev,
1257                                              void *arg, struct sk_buff *resp)
1258 {
1259         u8 rf_tech = (unsigned long)arg;
1260
1261         if (IS_ERR(resp))
1262                 return;
1263
1264         digital_tg_set_rf_tech(ddev, rf_tech);
1265
1266         digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech);
1267
1268         digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL);
1269
1270         dev_kfree_skb(resp);
1271 }
1272
1273 static int digital_tg_send_psl_res(struct nfc_digital_dev *ddev, u8 did,
1274                                    u8 rf_tech)
1275 {
1276         struct digital_psl_res *psl_res;
1277         struct sk_buff *skb;
1278         int rc;
1279
1280         skb = digital_skb_alloc(ddev, sizeof(struct digital_psl_res));
1281         if (!skb)
1282                 return -ENOMEM;
1283
1284         skb_put(skb, sizeof(struct digital_psl_res));
1285
1286         psl_res = (struct digital_psl_res *)skb->data;
1287
1288         psl_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1289         psl_res->cmd = DIGITAL_CMD_PSL_RES;
1290         psl_res->did = did;
1291
1292         digital_skb_push_dep_sod(ddev, skb);
1293
1294         ddev->skb_add_crc(skb);
1295
1296         ddev->curr_nfc_dep_pni = 0;
1297
1298         rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete,
1299                                  (void *)(unsigned long)rf_tech);
1300         if (rc)
1301                 kfree_skb(skb);
1302
1303         return rc;
1304 }
1305
1306 static void digital_tg_recv_psl_req(struct nfc_digital_dev *ddev, void *arg,
1307                                     struct sk_buff *resp)
1308 {
1309         int rc;
1310         struct digital_psl_req *psl_req;
1311         u8 rf_tech;
1312         u8 dsi, payload_size, payload_bits;
1313
1314         if (IS_ERR(resp)) {
1315                 rc = PTR_ERR(resp);
1316                 resp = NULL;
1317                 goto exit;
1318         }
1319
1320         rc = ddev->skb_check_crc(resp);
1321         if (rc) {
1322                 PROTOCOL_ERR("14.4.1.6");
1323                 goto exit;
1324         }
1325
1326         rc = digital_skb_pull_dep_sod(ddev, resp);
1327         if (rc) {
1328                 PROTOCOL_ERR("14.4.1.2");
1329                 goto exit;
1330         }
1331
1332         psl_req = (struct digital_psl_req *)resp->data;
1333
1334         if (resp->len != sizeof(struct digital_psl_req) ||
1335             psl_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1336             psl_req->cmd != DIGITAL_CMD_PSL_REQ) {
1337                 rc = -EIO;
1338                 goto exit;
1339         }
1340
1341         dsi = (psl_req->brs >> 3) & 0x07;
1342         switch (dsi) {
1343         case 0:
1344                 rf_tech = NFC_DIGITAL_RF_TECH_106A;
1345                 break;
1346         case 1:
1347                 rf_tech = NFC_DIGITAL_RF_TECH_212F;
1348                 break;
1349         case 2:
1350                 rf_tech = NFC_DIGITAL_RF_TECH_424F;
1351                 break;
1352         default:
1353                 pr_err("Unsupported dsi value %d\n", dsi);
1354                 goto exit;
1355         }
1356
1357         payload_bits = DIGITAL_PAYLOAD_FSL_TO_BITS(psl_req->fsl);
1358         payload_size = digital_payload_bits_to_size(payload_bits);
1359
1360         if (!payload_size || (payload_size > min(ddev->local_payload_max,
1361                                                  ddev->remote_payload_max))) {
1362                 rc = -EINVAL;
1363                 goto exit;
1364         }
1365
1366         ddev->local_payload_max = payload_size;
1367         ddev->remote_payload_max = payload_size;
1368
1369         rc = digital_tg_send_psl_res(ddev, psl_req->did, rf_tech);
1370
1371 exit:
1372         kfree_skb(resp);
1373 }
1374
1375 static void digital_tg_send_atr_res_complete(struct nfc_digital_dev *ddev,
1376                                              void *arg, struct sk_buff *resp)
1377 {
1378         int offset;
1379
1380         if (IS_ERR(resp)) {
1381                 digital_poll_next_tech(ddev);
1382                 return;
1383         }
1384
1385         offset = 2;
1386         if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB)
1387                 offset++;
1388
1389         ddev->atn_count = 0;
1390
1391         if (resp->data[offset] == DIGITAL_CMD_PSL_REQ)
1392                 digital_tg_recv_psl_req(ddev, arg, resp);
1393         else
1394                 digital_tg_recv_dep_req(ddev, arg, resp);
1395 }
1396
1397 static int digital_tg_send_atr_res(struct nfc_digital_dev *ddev,
1398                                    struct digital_atr_req *atr_req)
1399 {
1400         struct digital_atr_res *atr_res;
1401         struct sk_buff *skb;
1402         u8 *gb, payload_bits;
1403         size_t gb_len;
1404         int rc;
1405
1406         gb = nfc_get_local_general_bytes(ddev->nfc_dev, &gb_len);
1407         if (!gb)
1408                 gb_len = 0;
1409
1410         skb = digital_skb_alloc(ddev, sizeof(struct digital_atr_res) + gb_len);
1411         if (!skb)
1412                 return -ENOMEM;
1413
1414         skb_put(skb, sizeof(struct digital_atr_res));
1415         atr_res = (struct digital_atr_res *)skb->data;
1416
1417         memset(atr_res, 0, sizeof(struct digital_atr_res));
1418
1419         atr_res->dir = DIGITAL_NFC_DEP_FRAME_DIR_IN;
1420         atr_res->cmd = DIGITAL_CMD_ATR_RES;
1421         memcpy(atr_res->nfcid3, atr_req->nfcid3, sizeof(atr_req->nfcid3));
1422         atr_res->to = 8;
1423
1424         ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX;
1425         payload_bits = digital_payload_size_to_bits(ddev->local_payload_max);
1426         atr_res->pp = DIGITAL_PAYLOAD_BITS_TO_PP(payload_bits);
1427
1428         if (gb_len) {
1429                 skb_put(skb, gb_len);
1430
1431                 atr_res->pp |= DIGITAL_GB_BIT;
1432                 memcpy(atr_res->gb, gb, gb_len);
1433         }
1434
1435         digital_skb_push_dep_sod(ddev, skb);
1436
1437         ddev->skb_add_crc(skb);
1438
1439         ddev->curr_nfc_dep_pni = 0;
1440
1441         rc = digital_tg_send_cmd(ddev, skb, 999,
1442                                  digital_tg_send_atr_res_complete, NULL);
1443         if (rc)
1444                 kfree_skb(skb);
1445
1446         return rc;
1447 }
1448
1449 void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg,
1450                              struct sk_buff *resp)
1451 {
1452         int rc;
1453         struct digital_atr_req *atr_req;
1454         size_t gb_len, min_size;
1455         u8 poll_tech_count, payload_bits;
1456
1457         if (IS_ERR(resp)) {
1458                 rc = PTR_ERR(resp);
1459                 resp = NULL;
1460                 goto exit;
1461         }
1462
1463         if (!resp->len) {
1464                 rc = -EIO;
1465                 goto exit;
1466         }
1467
1468         if (resp->data[0] == DIGITAL_NFC_DEP_NFCA_SOD_SB) {
1469                 min_size = DIGITAL_ATR_REQ_MIN_SIZE + 2;
1470                 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_106A);
1471         } else {
1472                 min_size = DIGITAL_ATR_REQ_MIN_SIZE + 1;
1473                 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_212F);
1474         }
1475
1476         if (resp->len < min_size) {
1477                 rc = -EIO;
1478                 goto exit;
1479         }
1480
1481         ddev->curr_protocol = NFC_PROTO_NFC_DEP_MASK;
1482
1483         rc = ddev->skb_check_crc(resp);
1484         if (rc) {
1485                 PROTOCOL_ERR("14.4.1.6");
1486                 goto exit;
1487         }
1488
1489         rc = digital_skb_pull_dep_sod(ddev, resp);
1490         if (rc) {
1491                 PROTOCOL_ERR("14.4.1.2");
1492                 goto exit;
1493         }
1494
1495         atr_req = (struct digital_atr_req *)resp->data;
1496
1497         if (atr_req->dir != DIGITAL_NFC_DEP_FRAME_DIR_OUT ||
1498             atr_req->cmd != DIGITAL_CMD_ATR_REQ ||
1499             atr_req->did > DIGITAL_DID_MAX) {
1500                 rc = -EINVAL;
1501                 goto exit;
1502         }
1503
1504         payload_bits = DIGITAL_PAYLOAD_PP_TO_BITS(atr_req->pp);
1505         ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits);
1506
1507         if (!ddev->remote_payload_max) {
1508                 rc = -EINVAL;
1509                 goto exit;
1510         }
1511
1512         ddev->did = atr_req->did;
1513
1514         rc = digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
1515                                      NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED);
1516         if (rc)
1517                 goto exit;
1518
1519         rc = digital_tg_send_atr_res(ddev, atr_req);
1520         if (rc)
1521                 goto exit;
1522
1523         gb_len = resp->len - sizeof(struct digital_atr_req);
1524
1525         poll_tech_count = ddev->poll_tech_count;
1526         ddev->poll_tech_count = 0;
1527
1528         rc = nfc_tm_activated(ddev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
1529                               NFC_COMM_PASSIVE, atr_req->gb, gb_len);
1530         if (rc) {
1531                 ddev->poll_tech_count = poll_tech_count;
1532                 goto exit;
1533         }
1534
1535         rc = 0;
1536 exit:
1537         if (rc)
1538                 digital_poll_next_tech(ddev);
1539
1540         dev_kfree_skb(resp);
1541 }