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