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