Lines Matching refs:dev
33 int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name) in nfc_fw_download() argument
37 pr_debug("%s do firmware %s\n", dev_name(&dev->dev), firmware_name); in nfc_fw_download()
39 device_lock(&dev->dev); in nfc_fw_download()
41 if (!device_is_registered(&dev->dev)) { in nfc_fw_download()
46 if (dev->dev_up) { in nfc_fw_download()
51 if (!dev->ops->fw_download) { in nfc_fw_download()
56 dev->fw_download_in_progress = true; in nfc_fw_download()
57 rc = dev->ops->fw_download(dev, firmware_name); in nfc_fw_download()
59 dev->fw_download_in_progress = false; in nfc_fw_download()
62 device_unlock(&dev->dev); in nfc_fw_download()
73 int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name, in nfc_fw_download_done() argument
76 dev->fw_download_in_progress = false; in nfc_fw_download_done()
78 return nfc_genl_fw_download_done(dev, firmware_name, result); in nfc_fw_download_done()
89 int nfc_dev_up(struct nfc_dev *dev) in nfc_dev_up() argument
93 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dev_up()
95 device_lock(&dev->dev); in nfc_dev_up()
97 if (dev->rfkill && rfkill_blocked(dev->rfkill)) { in nfc_dev_up()
102 if (!device_is_registered(&dev->dev)) { in nfc_dev_up()
107 if (dev->fw_download_in_progress) { in nfc_dev_up()
112 if (dev->dev_up) { in nfc_dev_up()
117 if (dev->ops->dev_up) in nfc_dev_up()
118 rc = dev->ops->dev_up(dev); in nfc_dev_up()
121 dev->dev_up = true; in nfc_dev_up()
124 if (dev->ops->discover_se && dev->ops->discover_se(dev)) in nfc_dev_up()
128 device_unlock(&dev->dev); in nfc_dev_up()
137 int nfc_dev_down(struct nfc_dev *dev) in nfc_dev_down() argument
141 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dev_down()
143 device_lock(&dev->dev); in nfc_dev_down()
145 if (!device_is_registered(&dev->dev)) { in nfc_dev_down()
150 if (!dev->dev_up) { in nfc_dev_down()
155 if (dev->polling || dev->active_target) { in nfc_dev_down()
160 if (dev->ops->dev_down) in nfc_dev_down()
161 dev->ops->dev_down(dev); in nfc_dev_down()
163 dev->dev_up = false; in nfc_dev_down()
166 device_unlock(&dev->dev); in nfc_dev_down()
172 struct nfc_dev *dev = data; in nfc_rfkill_set_block() local
174 pr_debug("%s blocked %d", dev_name(&dev->dev), blocked); in nfc_rfkill_set_block()
179 nfc_dev_down(dev); in nfc_rfkill_set_block()
197 int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols) in nfc_start_poll() argument
202 dev_name(&dev->dev), im_protocols, tm_protocols); in nfc_start_poll()
207 device_lock(&dev->dev); in nfc_start_poll()
209 if (!device_is_registered(&dev->dev)) { in nfc_start_poll()
214 if (!dev->dev_up) { in nfc_start_poll()
219 if (dev->polling) { in nfc_start_poll()
224 rc = dev->ops->start_poll(dev, im_protocols, tm_protocols); in nfc_start_poll()
226 dev->polling = true; in nfc_start_poll()
227 dev->rf_mode = NFC_RF_NONE; in nfc_start_poll()
231 device_unlock(&dev->dev); in nfc_start_poll()
240 int nfc_stop_poll(struct nfc_dev *dev) in nfc_stop_poll() argument
244 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_stop_poll()
246 device_lock(&dev->dev); in nfc_stop_poll()
248 if (!device_is_registered(&dev->dev)) { in nfc_stop_poll()
253 if (!dev->polling) { in nfc_stop_poll()
258 dev->ops->stop_poll(dev); in nfc_stop_poll()
259 dev->polling = false; in nfc_stop_poll()
260 dev->rf_mode = NFC_RF_NONE; in nfc_stop_poll()
263 device_unlock(&dev->dev); in nfc_stop_poll()
267 static struct nfc_target *nfc_find_target(struct nfc_dev *dev, u32 target_idx) in nfc_find_target() argument
271 for (i = 0; i < dev->n_targets; i++) { in nfc_find_target()
272 if (dev->targets[i].idx == target_idx) in nfc_find_target()
273 return &dev->targets[i]; in nfc_find_target()
279 int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode) in nfc_dep_link_up() argument
286 pr_debug("dev_name=%s comm %d\n", dev_name(&dev->dev), comm_mode); in nfc_dep_link_up()
288 if (!dev->ops->dep_link_up) in nfc_dep_link_up()
291 device_lock(&dev->dev); in nfc_dep_link_up()
293 if (!device_is_registered(&dev->dev)) { in nfc_dep_link_up()
298 if (dev->dep_link_up == true) { in nfc_dep_link_up()
303 gb = nfc_llcp_general_bytes(dev, &gb_len); in nfc_dep_link_up()
309 target = nfc_find_target(dev, target_index); in nfc_dep_link_up()
315 rc = dev->ops->dep_link_up(dev, target, comm_mode, gb, gb_len); in nfc_dep_link_up()
317 dev->active_target = target; in nfc_dep_link_up()
318 dev->rf_mode = NFC_RF_INITIATOR; in nfc_dep_link_up()
322 device_unlock(&dev->dev); in nfc_dep_link_up()
326 int nfc_dep_link_down(struct nfc_dev *dev) in nfc_dep_link_down() argument
330 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dep_link_down()
332 if (!dev->ops->dep_link_down) in nfc_dep_link_down()
335 device_lock(&dev->dev); in nfc_dep_link_down()
337 if (!device_is_registered(&dev->dev)) { in nfc_dep_link_down()
342 if (dev->dep_link_up == false) { in nfc_dep_link_down()
347 rc = dev->ops->dep_link_down(dev); in nfc_dep_link_down()
349 dev->dep_link_up = false; in nfc_dep_link_down()
350 dev->active_target = NULL; in nfc_dep_link_down()
351 dev->rf_mode = NFC_RF_NONE; in nfc_dep_link_down()
352 nfc_llcp_mac_is_down(dev); in nfc_dep_link_down()
353 nfc_genl_dep_link_down_event(dev); in nfc_dep_link_down()
357 device_unlock(&dev->dev); in nfc_dep_link_down()
362 int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx, in nfc_dep_link_is_up() argument
365 dev->dep_link_up = true; in nfc_dep_link_is_up()
367 if (!dev->active_target && rf_mode == NFC_RF_INITIATOR) { in nfc_dep_link_is_up()
370 target = nfc_find_target(dev, target_idx); in nfc_dep_link_is_up()
374 dev->active_target = target; in nfc_dep_link_is_up()
377 dev->polling = false; in nfc_dep_link_is_up()
378 dev->rf_mode = rf_mode; in nfc_dep_link_is_up()
380 nfc_llcp_mac_is_up(dev, target_idx, comm_mode, rf_mode); in nfc_dep_link_is_up()
382 return nfc_genl_dep_link_up_event(dev, target_idx, comm_mode, rf_mode); in nfc_dep_link_is_up()
393 int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol) in nfc_activate_target() argument
399 dev_name(&dev->dev), target_idx, protocol); in nfc_activate_target()
401 device_lock(&dev->dev); in nfc_activate_target()
403 if (!device_is_registered(&dev->dev)) { in nfc_activate_target()
408 if (dev->active_target) { in nfc_activate_target()
413 target = nfc_find_target(dev, target_idx); in nfc_activate_target()
419 rc = dev->ops->activate_target(dev, target, protocol); in nfc_activate_target()
421 dev->active_target = target; in nfc_activate_target()
422 dev->rf_mode = NFC_RF_INITIATOR; in nfc_activate_target()
424 if (dev->ops->check_presence && !dev->shutting_down) in nfc_activate_target()
425 mod_timer(&dev->check_pres_timer, jiffies + in nfc_activate_target()
430 device_unlock(&dev->dev); in nfc_activate_target()
440 int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx, u8 mode) in nfc_deactivate_target() argument
445 dev_name(&dev->dev), target_idx); in nfc_deactivate_target()
447 device_lock(&dev->dev); in nfc_deactivate_target()
449 if (!device_is_registered(&dev->dev)) { in nfc_deactivate_target()
454 if (dev->active_target == NULL) { in nfc_deactivate_target()
459 if (dev->active_target->idx != target_idx) { in nfc_deactivate_target()
464 if (dev->ops->check_presence) in nfc_deactivate_target()
465 del_timer_sync(&dev->check_pres_timer); in nfc_deactivate_target()
467 dev->ops->deactivate_target(dev, dev->active_target, mode); in nfc_deactivate_target()
468 dev->active_target = NULL; in nfc_deactivate_target()
471 device_unlock(&dev->dev); in nfc_deactivate_target()
486 int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb, in nfc_data_exchange() argument
492 dev_name(&dev->dev), target_idx, skb->len); in nfc_data_exchange()
494 device_lock(&dev->dev); in nfc_data_exchange()
496 if (!device_is_registered(&dev->dev)) { in nfc_data_exchange()
502 if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) { in nfc_data_exchange()
503 if (dev->active_target->idx != target_idx) { in nfc_data_exchange()
509 if (dev->ops->check_presence) in nfc_data_exchange()
510 del_timer_sync(&dev->check_pres_timer); in nfc_data_exchange()
512 rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb, in nfc_data_exchange()
515 if (!rc && dev->ops->check_presence && !dev->shutting_down) in nfc_data_exchange()
516 mod_timer(&dev->check_pres_timer, jiffies + in nfc_data_exchange()
518 } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) { in nfc_data_exchange()
519 rc = dev->ops->tm_send(dev, skb); in nfc_data_exchange()
528 device_unlock(&dev->dev); in nfc_data_exchange()
532 struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx) in nfc_find_se() argument
536 list_for_each_entry(se, &dev->secure_elements, list) in nfc_find_se()
544 int nfc_enable_se(struct nfc_dev *dev, u32 se_idx) in nfc_enable_se() argument
549 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_enable_se()
551 device_lock(&dev->dev); in nfc_enable_se()
553 if (!device_is_registered(&dev->dev)) { in nfc_enable_se()
558 if (!dev->dev_up) { in nfc_enable_se()
563 if (dev->polling) { in nfc_enable_se()
568 if (!dev->ops->enable_se || !dev->ops->disable_se) { in nfc_enable_se()
573 se = nfc_find_se(dev, se_idx); in nfc_enable_se()
584 rc = dev->ops->enable_se(dev, se_idx); in nfc_enable_se()
589 device_unlock(&dev->dev); in nfc_enable_se()
593 int nfc_disable_se(struct nfc_dev *dev, u32 se_idx) in nfc_disable_se() argument
598 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_disable_se()
600 device_lock(&dev->dev); in nfc_disable_se()
602 if (!device_is_registered(&dev->dev)) { in nfc_disable_se()
607 if (!dev->dev_up) { in nfc_disable_se()
612 if (!dev->ops->enable_se || !dev->ops->disable_se) { in nfc_disable_se()
617 se = nfc_find_se(dev, se_idx); in nfc_disable_se()
628 rc = dev->ops->disable_se(dev, se_idx); in nfc_disable_se()
633 device_unlock(&dev->dev); in nfc_disable_se()
637 int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len) in nfc_set_remote_general_bytes() argument
639 pr_debug("dev_name=%s gb_len=%d\n", dev_name(&dev->dev), gb_len); in nfc_set_remote_general_bytes()
641 return nfc_llcp_set_remote_gb(dev, gb, gb_len); in nfc_set_remote_general_bytes()
645 u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len) in nfc_get_local_general_bytes() argument
647 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_get_local_general_bytes()
649 return nfc_llcp_general_bytes(dev, gb_len); in nfc_get_local_general_bytes()
653 int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb) in nfc_tm_data_received() argument
656 if (dev->dep_link_up == false) { in nfc_tm_data_received()
661 return nfc_llcp_data_received(dev, skb); in nfc_tm_data_received()
665 int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, in nfc_tm_activated() argument
670 device_lock(&dev->dev); in nfc_tm_activated()
672 dev->polling = false; in nfc_tm_activated()
675 rc = nfc_set_remote_general_bytes(dev, gb, gb_len); in nfc_tm_activated()
680 dev->rf_mode = NFC_RF_TARGET; in nfc_tm_activated()
683 nfc_dep_link_is_up(dev, 0, comm_mode, NFC_RF_TARGET); in nfc_tm_activated()
685 rc = nfc_genl_tm_activated(dev, protocol); in nfc_tm_activated()
688 device_unlock(&dev->dev); in nfc_tm_activated()
694 int nfc_tm_deactivated(struct nfc_dev *dev) in nfc_tm_deactivated() argument
696 dev->dep_link_up = false; in nfc_tm_deactivated()
697 dev->rf_mode = NFC_RF_NONE; in nfc_tm_deactivated()
699 return nfc_genl_tm_deactivated(dev); in nfc_tm_deactivated()
709 struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk, in nfc_alloc_send_skb() argument
717 dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; in nfc_alloc_send_skb()
721 skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); in nfc_alloc_send_skb()
763 int nfc_targets_found(struct nfc_dev *dev, in nfc_targets_found() argument
768 pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets); in nfc_targets_found()
771 targets[i].idx = dev->target_next_idx++; in nfc_targets_found()
773 device_lock(&dev->dev); in nfc_targets_found()
775 if (dev->polling == false) { in nfc_targets_found()
776 device_unlock(&dev->dev); in nfc_targets_found()
780 dev->polling = false; in nfc_targets_found()
782 dev->targets_generation++; in nfc_targets_found()
784 kfree(dev->targets); in nfc_targets_found()
785 dev->targets = NULL; in nfc_targets_found()
788 dev->targets = kmemdup(targets, in nfc_targets_found()
792 if (!dev->targets) { in nfc_targets_found()
793 dev->n_targets = 0; in nfc_targets_found()
794 device_unlock(&dev->dev); in nfc_targets_found()
799 dev->n_targets = n_targets; in nfc_targets_found()
800 device_unlock(&dev->dev); in nfc_targets_found()
802 nfc_genl_targets_found(dev); in nfc_targets_found()
820 int nfc_target_lost(struct nfc_dev *dev, u32 target_idx) in nfc_target_lost() argument
825 pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx); in nfc_target_lost()
827 device_lock(&dev->dev); in nfc_target_lost()
829 for (i = 0; i < dev->n_targets; i++) { in nfc_target_lost()
830 tg = &dev->targets[i]; in nfc_target_lost()
835 if (i == dev->n_targets) { in nfc_target_lost()
836 device_unlock(&dev->dev); in nfc_target_lost()
840 dev->targets_generation++; in nfc_target_lost()
841 dev->n_targets--; in nfc_target_lost()
842 dev->active_target = NULL; in nfc_target_lost()
844 if (dev->n_targets) { in nfc_target_lost()
845 memcpy(&dev->targets[i], &dev->targets[i + 1], in nfc_target_lost()
846 (dev->n_targets - i) * sizeof(struct nfc_target)); in nfc_target_lost()
848 kfree(dev->targets); in nfc_target_lost()
849 dev->targets = NULL; in nfc_target_lost()
852 device_unlock(&dev->dev); in nfc_target_lost()
854 nfc_genl_target_lost(dev, target_idx); in nfc_target_lost()
860 inline void nfc_driver_failure(struct nfc_dev *dev, int err) in nfc_driver_failure() argument
862 nfc_targets_found(dev, NULL, 0); in nfc_driver_failure()
866 int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type) in nfc_add_se() argument
871 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_add_se()
873 se = nfc_find_se(dev, se_idx); in nfc_add_se()
886 list_add(&se->list, &dev->secure_elements); in nfc_add_se()
888 rc = nfc_genl_se_added(dev, se_idx, type); in nfc_add_se()
900 int nfc_remove_se(struct nfc_dev *dev, u32 se_idx) in nfc_remove_se() argument
905 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_remove_se()
907 list_for_each_entry_safe(se, n, &dev->secure_elements, list) in nfc_remove_se()
909 rc = nfc_genl_se_removed(dev, se_idx); in nfc_remove_se()
923 int nfc_se_transaction(struct nfc_dev *dev, u8 se_idx, in nfc_se_transaction() argument
930 device_lock(&dev->dev); in nfc_se_transaction()
937 rc = nfc_genl_se_transaction(dev, se_idx, evt_transaction); in nfc_se_transaction()
939 device_unlock(&dev->dev); in nfc_se_transaction()
944 int nfc_se_connectivity(struct nfc_dev *dev, u8 se_idx) in nfc_se_connectivity() argument
950 device_lock(&dev->dev); in nfc_se_connectivity()
951 rc = nfc_genl_se_connectivity(dev, se_idx); in nfc_se_connectivity()
952 device_unlock(&dev->dev); in nfc_se_connectivity()
959 struct nfc_dev *dev = to_nfc_dev(d); in nfc_release() local
962 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_release()
964 nfc_genl_data_exit(&dev->genl_data); in nfc_release()
965 kfree(dev->targets); in nfc_release()
967 list_for_each_entry_safe(se, n, &dev->secure_elements, list) { in nfc_release()
968 nfc_genl_se_removed(dev, se->idx); in nfc_release()
973 ida_simple_remove(&nfc_index_ida, dev->idx); in nfc_release()
975 kfree(dev); in nfc_release()
980 struct nfc_dev *dev = container_of(work, struct nfc_dev, in nfc_check_pres_work() local
984 device_lock(&dev->dev); in nfc_check_pres_work()
986 if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) { in nfc_check_pres_work()
987 rc = dev->ops->check_presence(dev, dev->active_target); in nfc_check_pres_work()
991 u32 active_target_idx = dev->active_target->idx; in nfc_check_pres_work()
992 device_unlock(&dev->dev); in nfc_check_pres_work()
993 nfc_target_lost(dev, active_target_idx); in nfc_check_pres_work()
997 if (!dev->shutting_down) in nfc_check_pres_work()
998 mod_timer(&dev->check_pres_timer, jiffies + in nfc_check_pres_work()
1003 device_unlock(&dev->dev); in nfc_check_pres_work()
1008 struct nfc_dev *dev = from_timer(dev, t, check_pres_timer); in nfc_check_pres_timeout() local
1010 schedule_work(&dev->check_pres_work); in nfc_check_pres_timeout()
1021 struct nfc_dev *dev = to_nfc_dev(d); in match_idx() local
1024 return dev->idx == *idx; in match_idx()
1048 struct nfc_dev *dev; in nfc_allocate_device() local
1058 dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL); in nfc_allocate_device()
1059 if (!dev) in nfc_allocate_device()
1065 dev->idx = rc; in nfc_allocate_device()
1067 dev->dev.class = &nfc_class; in nfc_allocate_device()
1068 dev_set_name(&dev->dev, "nfc%d", dev->idx); in nfc_allocate_device()
1069 device_initialize(&dev->dev); in nfc_allocate_device()
1071 dev->ops = ops; in nfc_allocate_device()
1072 dev->supported_protocols = supported_protocols; in nfc_allocate_device()
1073 dev->tx_headroom = tx_headroom; in nfc_allocate_device()
1074 dev->tx_tailroom = tx_tailroom; in nfc_allocate_device()
1075 INIT_LIST_HEAD(&dev->secure_elements); in nfc_allocate_device()
1077 nfc_genl_data_init(&dev->genl_data); in nfc_allocate_device()
1079 dev->rf_mode = NFC_RF_NONE; in nfc_allocate_device()
1082 dev->targets_generation = 1; in nfc_allocate_device()
1085 timer_setup(&dev->check_pres_timer, nfc_check_pres_timeout, 0); in nfc_allocate_device()
1086 INIT_WORK(&dev->check_pres_work, nfc_check_pres_work); in nfc_allocate_device()
1089 return dev; in nfc_allocate_device()
1092 kfree(dev); in nfc_allocate_device()
1103 int nfc_register_device(struct nfc_dev *dev) in nfc_register_device() argument
1107 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_register_device()
1111 rc = device_add(&dev->dev); in nfc_register_device()
1117 rc = nfc_llcp_register_device(dev); in nfc_register_device()
1121 rc = nfc_genl_device_added(dev); in nfc_register_device()
1124 dev_name(&dev->dev)); in nfc_register_device()
1126 dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, in nfc_register_device()
1127 RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev); in nfc_register_device()
1128 if (dev->rfkill) { in nfc_register_device()
1129 if (rfkill_register(dev->rfkill) < 0) { in nfc_register_device()
1130 rfkill_destroy(dev->rfkill); in nfc_register_device()
1131 dev->rfkill = NULL; in nfc_register_device()
1144 void nfc_unregister_device(struct nfc_dev *dev) in nfc_unregister_device() argument
1148 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_unregister_device()
1150 if (dev->rfkill) { in nfc_unregister_device()
1151 rfkill_unregister(dev->rfkill); in nfc_unregister_device()
1152 rfkill_destroy(dev->rfkill); in nfc_unregister_device()
1155 if (dev->ops->check_presence) { in nfc_unregister_device()
1156 device_lock(&dev->dev); in nfc_unregister_device()
1157 dev->shutting_down = true; in nfc_unregister_device()
1158 device_unlock(&dev->dev); in nfc_unregister_device()
1159 del_timer_sync(&dev->check_pres_timer); in nfc_unregister_device()
1160 cancel_work_sync(&dev->check_pres_work); in nfc_unregister_device()
1163 rc = nfc_genl_device_removed(dev); in nfc_unregister_device()
1166 "was removed\n", dev_name(&dev->dev)); in nfc_unregister_device()
1168 nfc_llcp_unregister_device(dev); in nfc_unregister_device()
1172 device_del(&dev->dev); in nfc_unregister_device()