1 /* 2 * Copyright (C) 2011 Instituto Nokia de Tecnologia 3 * 4 * Authors: 5 * Lauro Ramos Venancio <lauro.venancio@openbossa.org> 6 * Aloisio Almeida Jr <aloisio.almeida@openbossa.org> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the 20 * Free Software Foundation, Inc., 21 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 22 */ 23 24 #define pr_fmt(fmt) KBUILD_MODNAME ": %s: " fmt, __func__ 25 26 #include <linux/init.h> 27 #include <linux/kernel.h> 28 #include <linux/module.h> 29 #include <linux/slab.h> 30 #include <linux/rfkill.h> 31 #include <linux/nfc.h> 32 33 #include <net/genetlink.h> 34 35 #include "nfc.h" 36 37 #define VERSION "0.1" 38 39 #define NFC_CHECK_PRES_FREQ_MS 2000 40 41 int nfc_devlist_generation; 42 DEFINE_MUTEX(nfc_devlist_mutex); 43 44 /* NFC device ID bitmap */ 45 static DEFINE_IDA(nfc_index_ida); 46 47 int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name) 48 { 49 int rc = 0; 50 51 pr_debug("%s do firmware %s\n", dev_name(&dev->dev), firmware_name); 52 53 device_lock(&dev->dev); 54 55 if (!device_is_registered(&dev->dev)) { 56 rc = -ENODEV; 57 goto error; 58 } 59 60 if (dev->dev_up) { 61 rc = -EBUSY; 62 goto error; 63 } 64 65 if (!dev->ops->fw_download) { 66 rc = -EOPNOTSUPP; 67 goto error; 68 } 69 70 dev->fw_download_in_progress = true; 71 rc = dev->ops->fw_download(dev, firmware_name); 72 if (rc) 73 dev->fw_download_in_progress = false; 74 75 error: 76 device_unlock(&dev->dev); 77 return rc; 78 } 79 80 int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name) 81 { 82 dev->fw_download_in_progress = false; 83 84 return nfc_genl_fw_download_done(dev, firmware_name); 85 } 86 EXPORT_SYMBOL(nfc_fw_download_done); 87 88 /** 89 * nfc_dev_up - turn on the NFC device 90 * 91 * @dev: The nfc device to be turned on 92 * 93 * The device remains up until the nfc_dev_down function is called. 94 */ 95 int nfc_dev_up(struct nfc_dev *dev) 96 { 97 int rc = 0; 98 99 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 100 101 device_lock(&dev->dev); 102 103 if (dev->rfkill && rfkill_blocked(dev->rfkill)) { 104 rc = -ERFKILL; 105 goto error; 106 } 107 108 if (!device_is_registered(&dev->dev)) { 109 rc = -ENODEV; 110 goto error; 111 } 112 113 if (dev->fw_download_in_progress) { 114 rc = -EBUSY; 115 goto error; 116 } 117 118 if (dev->dev_up) { 119 rc = -EALREADY; 120 goto error; 121 } 122 123 if (dev->ops->dev_up) 124 rc = dev->ops->dev_up(dev); 125 126 if (!rc) 127 dev->dev_up = true; 128 129 /* We have to enable the device before discovering SEs */ 130 if (dev->ops->discover_se) { 131 rc = dev->ops->discover_se(dev); 132 if (!rc) 133 pr_warn("SE discovery failed\n"); 134 } 135 136 error: 137 device_unlock(&dev->dev); 138 return rc; 139 } 140 141 /** 142 * nfc_dev_down - turn off the NFC device 143 * 144 * @dev: The nfc device to be turned off 145 */ 146 int nfc_dev_down(struct nfc_dev *dev) 147 { 148 int rc = 0; 149 150 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 151 152 device_lock(&dev->dev); 153 154 if (!device_is_registered(&dev->dev)) { 155 rc = -ENODEV; 156 goto error; 157 } 158 159 if (!dev->dev_up) { 160 rc = -EALREADY; 161 goto error; 162 } 163 164 if (dev->polling || dev->active_target) { 165 rc = -EBUSY; 166 goto error; 167 } 168 169 if (dev->ops->dev_down) 170 dev->ops->dev_down(dev); 171 172 dev->dev_up = false; 173 174 error: 175 device_unlock(&dev->dev); 176 return rc; 177 } 178 179 static int nfc_rfkill_set_block(void *data, bool blocked) 180 { 181 struct nfc_dev *dev = data; 182 183 pr_debug("%s blocked %d", dev_name(&dev->dev), blocked); 184 185 if (!blocked) 186 return 0; 187 188 nfc_dev_down(dev); 189 190 return 0; 191 } 192 193 static const struct rfkill_ops nfc_rfkill_ops = { 194 .set_block = nfc_rfkill_set_block, 195 }; 196 197 /** 198 * nfc_start_poll - start polling for nfc targets 199 * 200 * @dev: The nfc device that must start polling 201 * @protocols: bitset of nfc protocols that must be used for polling 202 * 203 * The device remains polling for targets until a target is found or 204 * the nfc_stop_poll function is called. 205 */ 206 int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols) 207 { 208 int rc; 209 210 pr_debug("dev_name %s initiator protocols 0x%x target protocols 0x%x\n", 211 dev_name(&dev->dev), im_protocols, tm_protocols); 212 213 if (!im_protocols && !tm_protocols) 214 return -EINVAL; 215 216 device_lock(&dev->dev); 217 218 if (!device_is_registered(&dev->dev)) { 219 rc = -ENODEV; 220 goto error; 221 } 222 223 if (!dev->dev_up) { 224 rc = -ENODEV; 225 goto error; 226 } 227 228 if (dev->polling) { 229 rc = -EBUSY; 230 goto error; 231 } 232 233 rc = dev->ops->start_poll(dev, im_protocols, tm_protocols); 234 if (!rc) { 235 dev->polling = true; 236 dev->rf_mode = NFC_RF_NONE; 237 } 238 239 error: 240 device_unlock(&dev->dev); 241 return rc; 242 } 243 244 /** 245 * nfc_stop_poll - stop polling for nfc targets 246 * 247 * @dev: The nfc device that must stop polling 248 */ 249 int nfc_stop_poll(struct nfc_dev *dev) 250 { 251 int rc = 0; 252 253 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 254 255 device_lock(&dev->dev); 256 257 if (!device_is_registered(&dev->dev)) { 258 rc = -ENODEV; 259 goto error; 260 } 261 262 if (!dev->polling) { 263 rc = -EINVAL; 264 goto error; 265 } 266 267 dev->ops->stop_poll(dev); 268 dev->polling = false; 269 dev->rf_mode = NFC_RF_NONE; 270 271 error: 272 device_unlock(&dev->dev); 273 return rc; 274 } 275 276 static struct nfc_target *nfc_find_target(struct nfc_dev *dev, u32 target_idx) 277 { 278 int i; 279 280 if (dev->n_targets == 0) 281 return NULL; 282 283 for (i = 0; i < dev->n_targets; i++) { 284 if (dev->targets[i].idx == target_idx) 285 return &dev->targets[i]; 286 } 287 288 return NULL; 289 } 290 291 int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode) 292 { 293 int rc = 0; 294 u8 *gb; 295 size_t gb_len; 296 struct nfc_target *target; 297 298 pr_debug("dev_name=%s comm %d\n", dev_name(&dev->dev), comm_mode); 299 300 if (!dev->ops->dep_link_up) 301 return -EOPNOTSUPP; 302 303 device_lock(&dev->dev); 304 305 if (!device_is_registered(&dev->dev)) { 306 rc = -ENODEV; 307 goto error; 308 } 309 310 if (dev->dep_link_up == true) { 311 rc = -EALREADY; 312 goto error; 313 } 314 315 gb = nfc_llcp_general_bytes(dev, &gb_len); 316 if (gb_len > NFC_MAX_GT_LEN) { 317 rc = -EINVAL; 318 goto error; 319 } 320 321 target = nfc_find_target(dev, target_index); 322 if (target == NULL) { 323 rc = -ENOTCONN; 324 goto error; 325 } 326 327 rc = dev->ops->dep_link_up(dev, target, comm_mode, gb, gb_len); 328 if (!rc) { 329 dev->active_target = target; 330 dev->rf_mode = NFC_RF_INITIATOR; 331 } 332 333 error: 334 device_unlock(&dev->dev); 335 return rc; 336 } 337 338 int nfc_dep_link_down(struct nfc_dev *dev) 339 { 340 int rc = 0; 341 342 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 343 344 if (!dev->ops->dep_link_down) 345 return -EOPNOTSUPP; 346 347 device_lock(&dev->dev); 348 349 if (!device_is_registered(&dev->dev)) { 350 rc = -ENODEV; 351 goto error; 352 } 353 354 if (dev->dep_link_up == false) { 355 rc = -EALREADY; 356 goto error; 357 } 358 359 rc = dev->ops->dep_link_down(dev); 360 if (!rc) { 361 dev->dep_link_up = false; 362 dev->active_target = NULL; 363 dev->rf_mode = NFC_RF_NONE; 364 nfc_llcp_mac_is_down(dev); 365 nfc_genl_dep_link_down_event(dev); 366 } 367 368 error: 369 device_unlock(&dev->dev); 370 371 return rc; 372 } 373 374 int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx, 375 u8 comm_mode, u8 rf_mode) 376 { 377 dev->dep_link_up = true; 378 379 nfc_llcp_mac_is_up(dev, target_idx, comm_mode, rf_mode); 380 381 return nfc_genl_dep_link_up_event(dev, target_idx, comm_mode, rf_mode); 382 } 383 EXPORT_SYMBOL(nfc_dep_link_is_up); 384 385 /** 386 * nfc_activate_target - prepare the target for data exchange 387 * 388 * @dev: The nfc device that found the target 389 * @target_idx: index of the target that must be activated 390 * @protocol: nfc protocol that will be used for data exchange 391 */ 392 int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol) 393 { 394 int rc; 395 struct nfc_target *target; 396 397 pr_debug("dev_name=%s target_idx=%u protocol=%u\n", 398 dev_name(&dev->dev), target_idx, protocol); 399 400 device_lock(&dev->dev); 401 402 if (!device_is_registered(&dev->dev)) { 403 rc = -ENODEV; 404 goto error; 405 } 406 407 if (dev->active_target) { 408 rc = -EBUSY; 409 goto error; 410 } 411 412 target = nfc_find_target(dev, target_idx); 413 if (target == NULL) { 414 rc = -ENOTCONN; 415 goto error; 416 } 417 418 rc = dev->ops->activate_target(dev, target, protocol); 419 if (!rc) { 420 dev->active_target = target; 421 dev->rf_mode = NFC_RF_INITIATOR; 422 423 if (dev->ops->check_presence && !dev->shutting_down) 424 mod_timer(&dev->check_pres_timer, jiffies + 425 msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); 426 } 427 428 error: 429 device_unlock(&dev->dev); 430 return rc; 431 } 432 433 /** 434 * nfc_deactivate_target - deactivate a nfc target 435 * 436 * @dev: The nfc device that found the target 437 * @target_idx: index of the target that must be deactivated 438 */ 439 int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx) 440 { 441 int rc = 0; 442 443 pr_debug("dev_name=%s target_idx=%u\n", 444 dev_name(&dev->dev), target_idx); 445 446 device_lock(&dev->dev); 447 448 if (!device_is_registered(&dev->dev)) { 449 rc = -ENODEV; 450 goto error; 451 } 452 453 if (dev->active_target == NULL) { 454 rc = -ENOTCONN; 455 goto error; 456 } 457 458 if (dev->active_target->idx != target_idx) { 459 rc = -ENOTCONN; 460 goto error; 461 } 462 463 if (dev->ops->check_presence) 464 del_timer_sync(&dev->check_pres_timer); 465 466 dev->ops->deactivate_target(dev, dev->active_target); 467 dev->active_target = NULL; 468 469 error: 470 device_unlock(&dev->dev); 471 return rc; 472 } 473 474 /** 475 * nfc_data_exchange - transceive data 476 * 477 * @dev: The nfc device that found the target 478 * @target_idx: index of the target 479 * @skb: data to be sent 480 * @cb: callback called when the response is received 481 * @cb_context: parameter for the callback function 482 * 483 * The user must wait for the callback before calling this function again. 484 */ 485 int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb, 486 data_exchange_cb_t cb, void *cb_context) 487 { 488 int rc; 489 490 pr_debug("dev_name=%s target_idx=%u skb->len=%u\n", 491 dev_name(&dev->dev), target_idx, skb->len); 492 493 device_lock(&dev->dev); 494 495 if (!device_is_registered(&dev->dev)) { 496 rc = -ENODEV; 497 kfree_skb(skb); 498 goto error; 499 } 500 501 if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) { 502 if (dev->active_target->idx != target_idx) { 503 rc = -EADDRNOTAVAIL; 504 kfree_skb(skb); 505 goto error; 506 } 507 508 if (dev->ops->check_presence) 509 del_timer_sync(&dev->check_pres_timer); 510 511 rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb, 512 cb_context); 513 514 if (!rc && dev->ops->check_presence && !dev->shutting_down) 515 mod_timer(&dev->check_pres_timer, jiffies + 516 msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); 517 } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) { 518 rc = dev->ops->tm_send(dev, skb); 519 } else { 520 rc = -ENOTCONN; 521 kfree_skb(skb); 522 goto error; 523 } 524 525 526 error: 527 device_unlock(&dev->dev); 528 return rc; 529 } 530 531 static struct nfc_se *find_se(struct nfc_dev *dev, u32 se_idx) 532 { 533 struct nfc_se *se, *n; 534 535 list_for_each_entry_safe(se, n, &dev->secure_elements, list) 536 if (se->idx == se_idx) 537 return se; 538 539 return NULL; 540 } 541 542 int nfc_enable_se(struct nfc_dev *dev, u32 se_idx) 543 { 544 545 struct nfc_se *se; 546 int rc; 547 548 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); 549 550 device_lock(&dev->dev); 551 552 if (!device_is_registered(&dev->dev)) { 553 rc = -ENODEV; 554 goto error; 555 } 556 557 if (!dev->dev_up) { 558 rc = -ENODEV; 559 goto error; 560 } 561 562 if (dev->polling) { 563 rc = -EBUSY; 564 goto error; 565 } 566 567 if (!dev->ops->enable_se || !dev->ops->disable_se) { 568 rc = -EOPNOTSUPP; 569 goto error; 570 } 571 572 se = find_se(dev, se_idx); 573 if (!se) { 574 rc = -EINVAL; 575 goto error; 576 } 577 578 if (se->type == NFC_SE_ENABLED) { 579 rc = -EALREADY; 580 goto error; 581 } 582 583 rc = dev->ops->enable_se(dev, se_idx); 584 585 error: 586 device_unlock(&dev->dev); 587 return rc; 588 } 589 590 int nfc_disable_se(struct nfc_dev *dev, u32 se_idx) 591 { 592 593 struct nfc_se *se; 594 int rc; 595 596 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); 597 598 device_lock(&dev->dev); 599 600 if (!device_is_registered(&dev->dev)) { 601 rc = -ENODEV; 602 goto error; 603 } 604 605 if (!dev->dev_up) { 606 rc = -ENODEV; 607 goto error; 608 } 609 610 if (!dev->ops->enable_se || !dev->ops->disable_se) { 611 rc = -EOPNOTSUPP; 612 goto error; 613 } 614 615 se = find_se(dev, se_idx); 616 if (!se) { 617 rc = -EINVAL; 618 goto error; 619 } 620 621 if (se->type == NFC_SE_DISABLED) { 622 rc = -EALREADY; 623 goto error; 624 } 625 626 rc = dev->ops->disable_se(dev, se_idx); 627 628 error: 629 device_unlock(&dev->dev); 630 return rc; 631 } 632 633 int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len) 634 { 635 pr_debug("dev_name=%s gb_len=%d\n", dev_name(&dev->dev), gb_len); 636 637 if (gb_len > NFC_MAX_GT_LEN) 638 return -EINVAL; 639 640 return nfc_llcp_set_remote_gb(dev, gb, gb_len); 641 } 642 EXPORT_SYMBOL(nfc_set_remote_general_bytes); 643 644 u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len) 645 { 646 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 647 648 return nfc_llcp_general_bytes(dev, gb_len); 649 } 650 EXPORT_SYMBOL(nfc_get_local_general_bytes); 651 652 int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb) 653 { 654 /* Only LLCP target mode for now */ 655 if (dev->dep_link_up == false) { 656 kfree_skb(skb); 657 return -ENOLINK; 658 } 659 660 return nfc_llcp_data_received(dev, skb); 661 } 662 EXPORT_SYMBOL(nfc_tm_data_received); 663 664 int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, 665 u8 *gb, size_t gb_len) 666 { 667 int rc; 668 669 device_lock(&dev->dev); 670 671 dev->polling = false; 672 673 if (gb != NULL) { 674 rc = nfc_set_remote_general_bytes(dev, gb, gb_len); 675 if (rc < 0) 676 goto out; 677 } 678 679 dev->rf_mode = NFC_RF_TARGET; 680 681 if (protocol == NFC_PROTO_NFC_DEP_MASK) 682 nfc_dep_link_is_up(dev, 0, comm_mode, NFC_RF_TARGET); 683 684 rc = nfc_genl_tm_activated(dev, protocol); 685 686 out: 687 device_unlock(&dev->dev); 688 689 return rc; 690 } 691 EXPORT_SYMBOL(nfc_tm_activated); 692 693 int nfc_tm_deactivated(struct nfc_dev *dev) 694 { 695 dev->dep_link_up = false; 696 dev->rf_mode = NFC_RF_NONE; 697 698 return nfc_genl_tm_deactivated(dev); 699 } 700 EXPORT_SYMBOL(nfc_tm_deactivated); 701 702 /** 703 * nfc_alloc_send_skb - allocate a skb for data exchange responses 704 * 705 * @size: size to allocate 706 * @gfp: gfp flags 707 */ 708 struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk, 709 unsigned int flags, unsigned int size, 710 unsigned int *err) 711 { 712 struct sk_buff *skb; 713 unsigned int total_size; 714 715 total_size = size + 716 dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; 717 718 skb = sock_alloc_send_skb(sk, total_size, flags & MSG_DONTWAIT, err); 719 if (skb) 720 skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); 721 722 return skb; 723 } 724 725 /** 726 * nfc_alloc_recv_skb - allocate a skb for data exchange responses 727 * 728 * @size: size to allocate 729 * @gfp: gfp flags 730 */ 731 struct sk_buff *nfc_alloc_recv_skb(unsigned int size, gfp_t gfp) 732 { 733 struct sk_buff *skb; 734 unsigned int total_size; 735 736 total_size = size + 1; 737 skb = alloc_skb(total_size, gfp); 738 739 if (skb) 740 skb_reserve(skb, 1); 741 742 return skb; 743 } 744 EXPORT_SYMBOL(nfc_alloc_recv_skb); 745 746 /** 747 * nfc_targets_found - inform that targets were found 748 * 749 * @dev: The nfc device that found the targets 750 * @targets: array of nfc targets found 751 * @ntargets: targets array size 752 * 753 * The device driver must call this function when one or many nfc targets 754 * are found. After calling this function, the device driver must stop 755 * polling for targets. 756 * NOTE: This function can be called with targets=NULL and n_targets=0 to 757 * notify a driver error, meaning that the polling operation cannot complete. 758 * IMPORTANT: this function must not be called from an atomic context. 759 * In addition, it must also not be called from a context that would prevent 760 * the NFC Core to call other nfc ops entry point concurrently. 761 */ 762 int nfc_targets_found(struct nfc_dev *dev, 763 struct nfc_target *targets, int n_targets) 764 { 765 int i; 766 767 pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets); 768 769 for (i = 0; i < n_targets; i++) 770 targets[i].idx = dev->target_next_idx++; 771 772 device_lock(&dev->dev); 773 774 if (dev->polling == false) { 775 device_unlock(&dev->dev); 776 return 0; 777 } 778 779 dev->polling = false; 780 781 dev->targets_generation++; 782 783 kfree(dev->targets); 784 dev->targets = NULL; 785 786 if (targets) { 787 dev->targets = kmemdup(targets, 788 n_targets * sizeof(struct nfc_target), 789 GFP_ATOMIC); 790 791 if (!dev->targets) { 792 dev->n_targets = 0; 793 device_unlock(&dev->dev); 794 return -ENOMEM; 795 } 796 } 797 798 dev->n_targets = n_targets; 799 device_unlock(&dev->dev); 800 801 nfc_genl_targets_found(dev); 802 803 return 0; 804 } 805 EXPORT_SYMBOL(nfc_targets_found); 806 807 /** 808 * nfc_target_lost - inform that an activated target went out of field 809 * 810 * @dev: The nfc device that had the activated target in field 811 * @target_idx: the nfc index of the target 812 * 813 * The device driver must call this function when the activated target 814 * goes out of the field. 815 * IMPORTANT: this function must not be called from an atomic context. 816 * In addition, it must also not be called from a context that would prevent 817 * the NFC Core to call other nfc ops entry point concurrently. 818 */ 819 int nfc_target_lost(struct nfc_dev *dev, u32 target_idx) 820 { 821 struct nfc_target *tg; 822 int i; 823 824 pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx); 825 826 device_lock(&dev->dev); 827 828 for (i = 0; i < dev->n_targets; i++) { 829 tg = &dev->targets[i]; 830 if (tg->idx == target_idx) 831 break; 832 } 833 834 if (i == dev->n_targets) { 835 device_unlock(&dev->dev); 836 return -EINVAL; 837 } 838 839 dev->targets_generation++; 840 dev->n_targets--; 841 dev->active_target = NULL; 842 843 if (dev->n_targets) { 844 memcpy(&dev->targets[i], &dev->targets[i + 1], 845 (dev->n_targets - i) * sizeof(struct nfc_target)); 846 } else { 847 kfree(dev->targets); 848 dev->targets = NULL; 849 } 850 851 device_unlock(&dev->dev); 852 853 nfc_genl_target_lost(dev, target_idx); 854 855 return 0; 856 } 857 EXPORT_SYMBOL(nfc_target_lost); 858 859 inline void nfc_driver_failure(struct nfc_dev *dev, int err) 860 { 861 nfc_targets_found(dev, NULL, 0); 862 } 863 EXPORT_SYMBOL(nfc_driver_failure); 864 865 int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type) 866 { 867 struct nfc_se *se; 868 int rc; 869 870 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); 871 872 se = find_se(dev, se_idx); 873 if (se) 874 return -EALREADY; 875 876 se = kzalloc(sizeof(struct nfc_se), GFP_KERNEL); 877 if (!se) 878 return -ENOMEM; 879 880 se->idx = se_idx; 881 se->type = type; 882 se->state = NFC_SE_DISABLED; 883 INIT_LIST_HEAD(&se->list); 884 885 list_add(&se->list, &dev->secure_elements); 886 887 rc = nfc_genl_se_added(dev, se_idx, type); 888 if (rc < 0) { 889 list_del(&se->list); 890 kfree(se); 891 892 return rc; 893 } 894 895 return 0; 896 } 897 EXPORT_SYMBOL(nfc_add_se); 898 899 int nfc_remove_se(struct nfc_dev *dev, u32 se_idx) 900 { 901 struct nfc_se *se, *n; 902 int rc; 903 904 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); 905 906 list_for_each_entry_safe(se, n, &dev->secure_elements, list) 907 if (se->idx == se_idx) { 908 rc = nfc_genl_se_removed(dev, se_idx); 909 if (rc < 0) 910 return rc; 911 912 list_del(&se->list); 913 kfree(se); 914 915 return 0; 916 } 917 918 return -EINVAL; 919 } 920 EXPORT_SYMBOL(nfc_remove_se); 921 922 static void nfc_release(struct device *d) 923 { 924 struct nfc_dev *dev = to_nfc_dev(d); 925 struct nfc_se *se, *n; 926 927 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 928 929 nfc_genl_data_exit(&dev->genl_data); 930 kfree(dev->targets); 931 932 list_for_each_entry_safe(se, n, &dev->secure_elements, list) { 933 nfc_genl_se_removed(dev, se->idx); 934 list_del(&se->list); 935 kfree(se); 936 } 937 938 kfree(dev); 939 } 940 941 static void nfc_check_pres_work(struct work_struct *work) 942 { 943 struct nfc_dev *dev = container_of(work, struct nfc_dev, 944 check_pres_work); 945 int rc; 946 947 device_lock(&dev->dev); 948 949 if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) { 950 rc = dev->ops->check_presence(dev, dev->active_target); 951 if (rc == -EOPNOTSUPP) 952 goto exit; 953 if (rc) { 954 u32 active_target_idx = dev->active_target->idx; 955 device_unlock(&dev->dev); 956 nfc_target_lost(dev, active_target_idx); 957 return; 958 } 959 960 if (!dev->shutting_down) 961 mod_timer(&dev->check_pres_timer, jiffies + 962 msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); 963 } 964 965 exit: 966 device_unlock(&dev->dev); 967 } 968 969 static void nfc_check_pres_timeout(unsigned long data) 970 { 971 struct nfc_dev *dev = (struct nfc_dev *)data; 972 973 schedule_work(&dev->check_pres_work); 974 } 975 976 struct class nfc_class = { 977 .name = "nfc", 978 .dev_release = nfc_release, 979 }; 980 EXPORT_SYMBOL(nfc_class); 981 982 static int match_idx(struct device *d, const void *data) 983 { 984 struct nfc_dev *dev = to_nfc_dev(d); 985 const unsigned int *idx = data; 986 987 return dev->idx == *idx; 988 } 989 990 struct nfc_dev *nfc_get_device(unsigned int idx) 991 { 992 struct device *d; 993 994 d = class_find_device(&nfc_class, NULL, &idx, match_idx); 995 if (!d) 996 return NULL; 997 998 return to_nfc_dev(d); 999 } 1000 1001 /** 1002 * nfc_allocate_device - allocate a new nfc device 1003 * 1004 * @ops: device operations 1005 * @supported_protocols: NFC protocols supported by the device 1006 */ 1007 struct nfc_dev *nfc_allocate_device(struct nfc_ops *ops, 1008 u32 supported_protocols, 1009 int tx_headroom, int tx_tailroom) 1010 { 1011 struct nfc_dev *dev; 1012 1013 if (!ops->start_poll || !ops->stop_poll || !ops->activate_target || 1014 !ops->deactivate_target || !ops->im_transceive) 1015 return NULL; 1016 1017 if (!supported_protocols) 1018 return NULL; 1019 1020 dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL); 1021 if (!dev) 1022 return NULL; 1023 1024 dev->ops = ops; 1025 dev->supported_protocols = supported_protocols; 1026 dev->tx_headroom = tx_headroom; 1027 dev->tx_tailroom = tx_tailroom; 1028 INIT_LIST_HEAD(&dev->secure_elements); 1029 1030 nfc_genl_data_init(&dev->genl_data); 1031 1032 dev->rf_mode = NFC_RF_NONE; 1033 1034 /* first generation must not be 0 */ 1035 dev->targets_generation = 1; 1036 1037 if (ops->check_presence) { 1038 init_timer(&dev->check_pres_timer); 1039 dev->check_pres_timer.data = (unsigned long)dev; 1040 dev->check_pres_timer.function = nfc_check_pres_timeout; 1041 1042 INIT_WORK(&dev->check_pres_work, nfc_check_pres_work); 1043 } 1044 1045 return dev; 1046 } 1047 EXPORT_SYMBOL(nfc_allocate_device); 1048 1049 /** 1050 * nfc_register_device - register a nfc device in the nfc subsystem 1051 * 1052 * @dev: The nfc device to register 1053 */ 1054 int nfc_register_device(struct nfc_dev *dev) 1055 { 1056 int rc; 1057 1058 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 1059 1060 dev->idx = ida_simple_get(&nfc_index_ida, 0, 0, GFP_KERNEL); 1061 if (dev->idx < 0) 1062 return dev->idx; 1063 1064 dev->dev.class = &nfc_class; 1065 dev_set_name(&dev->dev, "nfc%d", dev->idx); 1066 device_initialize(&dev->dev); 1067 1068 mutex_lock(&nfc_devlist_mutex); 1069 nfc_devlist_generation++; 1070 rc = device_add(&dev->dev); 1071 mutex_unlock(&nfc_devlist_mutex); 1072 1073 if (rc < 0) 1074 return rc; 1075 1076 rc = nfc_llcp_register_device(dev); 1077 if (rc) 1078 pr_err("Could not register llcp device\n"); 1079 1080 rc = nfc_genl_device_added(dev); 1081 if (rc) 1082 pr_debug("The userspace won't be notified that the device %s was added\n", 1083 dev_name(&dev->dev)); 1084 1085 dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, 1086 RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev); 1087 if (dev->rfkill) { 1088 if (rfkill_register(dev->rfkill) < 0) { 1089 rfkill_destroy(dev->rfkill); 1090 dev->rfkill = NULL; 1091 } 1092 } 1093 1094 return 0; 1095 } 1096 EXPORT_SYMBOL(nfc_register_device); 1097 1098 /** 1099 * nfc_unregister_device - unregister a nfc device in the nfc subsystem 1100 * 1101 * @dev: The nfc device to unregister 1102 */ 1103 void nfc_unregister_device(struct nfc_dev *dev) 1104 { 1105 int rc, id; 1106 1107 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); 1108 1109 id = dev->idx; 1110 1111 if (dev->rfkill) { 1112 rfkill_unregister(dev->rfkill); 1113 rfkill_destroy(dev->rfkill); 1114 } 1115 1116 if (dev->ops->check_presence) { 1117 device_lock(&dev->dev); 1118 dev->shutting_down = true; 1119 device_unlock(&dev->dev); 1120 del_timer_sync(&dev->check_pres_timer); 1121 cancel_work_sync(&dev->check_pres_work); 1122 } 1123 1124 rc = nfc_genl_device_removed(dev); 1125 if (rc) 1126 pr_debug("The userspace won't be notified that the device %s " 1127 "was removed\n", dev_name(&dev->dev)); 1128 1129 nfc_llcp_unregister_device(dev); 1130 1131 mutex_lock(&nfc_devlist_mutex); 1132 nfc_devlist_generation++; 1133 device_del(&dev->dev); 1134 mutex_unlock(&nfc_devlist_mutex); 1135 1136 ida_simple_remove(&nfc_index_ida, id); 1137 } 1138 EXPORT_SYMBOL(nfc_unregister_device); 1139 1140 static int __init nfc_init(void) 1141 { 1142 int rc; 1143 1144 pr_info("NFC Core ver %s\n", VERSION); 1145 1146 rc = class_register(&nfc_class); 1147 if (rc) 1148 return rc; 1149 1150 rc = nfc_genl_init(); 1151 if (rc) 1152 goto err_genl; 1153 1154 /* the first generation must not be 0 */ 1155 nfc_devlist_generation = 1; 1156 1157 rc = rawsock_init(); 1158 if (rc) 1159 goto err_rawsock; 1160 1161 rc = nfc_llcp_init(); 1162 if (rc) 1163 goto err_llcp_sock; 1164 1165 rc = af_nfc_init(); 1166 if (rc) 1167 goto err_af_nfc; 1168 1169 return 0; 1170 1171 err_af_nfc: 1172 nfc_llcp_exit(); 1173 err_llcp_sock: 1174 rawsock_exit(); 1175 err_rawsock: 1176 nfc_genl_exit(); 1177 err_genl: 1178 class_unregister(&nfc_class); 1179 return rc; 1180 } 1181 1182 static void __exit nfc_exit(void) 1183 { 1184 af_nfc_exit(); 1185 nfc_llcp_exit(); 1186 rawsock_exit(); 1187 nfc_genl_exit(); 1188 class_unregister(&nfc_class); 1189 } 1190 1191 subsys_initcall(nfc_init); 1192 module_exit(nfc_exit); 1193 1194 MODULE_AUTHOR("Lauro Ramos Venancio <lauro.venancio@openbossa.org>"); 1195 MODULE_DESCRIPTION("NFC Core ver " VERSION); 1196 MODULE_VERSION(VERSION); 1197 MODULE_LICENSE("GPL"); 1198 MODULE_ALIAS_NETPROTO(PF_NFC); 1199 MODULE_ALIAS_GENL_FAMILY(NFC_GENL_NAME); 1200