Lines Matching refs:dev

45 int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name)  in nfc_fw_download()  argument
49 pr_debug("%s do firmware %s\n", dev_name(&dev->dev), firmware_name); in nfc_fw_download()
51 device_lock(&dev->dev); in nfc_fw_download()
53 if (!device_is_registered(&dev->dev)) { in nfc_fw_download()
58 if (dev->dev_up) { in nfc_fw_download()
63 if (!dev->ops->fw_download) { in nfc_fw_download()
68 dev->fw_download_in_progress = true; in nfc_fw_download()
69 rc = dev->ops->fw_download(dev, firmware_name); in nfc_fw_download()
71 dev->fw_download_in_progress = false; in nfc_fw_download()
74 device_unlock(&dev->dev); in nfc_fw_download()
85 int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name, in nfc_fw_download_done() argument
88 dev->fw_download_in_progress = false; in nfc_fw_download_done()
90 return nfc_genl_fw_download_done(dev, firmware_name, result); in nfc_fw_download_done()
101 int nfc_dev_up(struct nfc_dev *dev) in nfc_dev_up() argument
105 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dev_up()
107 device_lock(&dev->dev); in nfc_dev_up()
109 if (dev->rfkill && rfkill_blocked(dev->rfkill)) { in nfc_dev_up()
114 if (!device_is_registered(&dev->dev)) { in nfc_dev_up()
119 if (dev->fw_download_in_progress) { in nfc_dev_up()
124 if (dev->dev_up) { in nfc_dev_up()
129 if (dev->ops->dev_up) in nfc_dev_up()
130 rc = dev->ops->dev_up(dev); in nfc_dev_up()
133 dev->dev_up = true; in nfc_dev_up()
136 if (dev->ops->discover_se && dev->ops->discover_se(dev)) in nfc_dev_up()
140 device_unlock(&dev->dev); in nfc_dev_up()
149 int nfc_dev_down(struct nfc_dev *dev) in nfc_dev_down() argument
153 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dev_down()
155 device_lock(&dev->dev); in nfc_dev_down()
157 if (!device_is_registered(&dev->dev)) { in nfc_dev_down()
162 if (!dev->dev_up) { in nfc_dev_down()
167 if (dev->polling || dev->active_target) { in nfc_dev_down()
172 if (dev->ops->dev_down) in nfc_dev_down()
173 dev->ops->dev_down(dev); in nfc_dev_down()
175 dev->dev_up = false; in nfc_dev_down()
178 device_unlock(&dev->dev); in nfc_dev_down()
184 struct nfc_dev *dev = data; in nfc_rfkill_set_block() local
186 pr_debug("%s blocked %d", dev_name(&dev->dev), blocked); in nfc_rfkill_set_block()
191 nfc_dev_down(dev); in nfc_rfkill_set_block()
209 int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols) in nfc_start_poll() argument
214 dev_name(&dev->dev), im_protocols, tm_protocols); in nfc_start_poll()
219 device_lock(&dev->dev); in nfc_start_poll()
221 if (!device_is_registered(&dev->dev)) { in nfc_start_poll()
226 if (!dev->dev_up) { in nfc_start_poll()
231 if (dev->polling) { in nfc_start_poll()
236 rc = dev->ops->start_poll(dev, im_protocols, tm_protocols); in nfc_start_poll()
238 dev->polling = true; in nfc_start_poll()
239 dev->rf_mode = NFC_RF_NONE; in nfc_start_poll()
243 device_unlock(&dev->dev); in nfc_start_poll()
252 int nfc_stop_poll(struct nfc_dev *dev) in nfc_stop_poll() argument
256 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_stop_poll()
258 device_lock(&dev->dev); in nfc_stop_poll()
260 if (!device_is_registered(&dev->dev)) { in nfc_stop_poll()
265 if (!dev->polling) { in nfc_stop_poll()
270 dev->ops->stop_poll(dev); in nfc_stop_poll()
271 dev->polling = false; in nfc_stop_poll()
272 dev->rf_mode = NFC_RF_NONE; in nfc_stop_poll()
275 device_unlock(&dev->dev); in nfc_stop_poll()
279 static struct nfc_target *nfc_find_target(struct nfc_dev *dev, u32 target_idx) in nfc_find_target() argument
283 for (i = 0; i < dev->n_targets; i++) { in nfc_find_target()
284 if (dev->targets[i].idx == target_idx) in nfc_find_target()
285 return &dev->targets[i]; in nfc_find_target()
291 int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode) in nfc_dep_link_up() argument
298 pr_debug("dev_name=%s comm %d\n", dev_name(&dev->dev), comm_mode); in nfc_dep_link_up()
300 if (!dev->ops->dep_link_up) in nfc_dep_link_up()
303 device_lock(&dev->dev); in nfc_dep_link_up()
305 if (!device_is_registered(&dev->dev)) { in nfc_dep_link_up()
310 if (dev->dep_link_up == true) { in nfc_dep_link_up()
315 gb = nfc_llcp_general_bytes(dev, &gb_len); in nfc_dep_link_up()
321 target = nfc_find_target(dev, target_index); in nfc_dep_link_up()
327 rc = dev->ops->dep_link_up(dev, target, comm_mode, gb, gb_len); in nfc_dep_link_up()
329 dev->active_target = target; in nfc_dep_link_up()
330 dev->rf_mode = NFC_RF_INITIATOR; in nfc_dep_link_up()
334 device_unlock(&dev->dev); in nfc_dep_link_up()
338 int nfc_dep_link_down(struct nfc_dev *dev) in nfc_dep_link_down() argument
342 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_dep_link_down()
344 if (!dev->ops->dep_link_down) in nfc_dep_link_down()
347 device_lock(&dev->dev); in nfc_dep_link_down()
349 if (!device_is_registered(&dev->dev)) { in nfc_dep_link_down()
354 if (dev->dep_link_up == false) { in nfc_dep_link_down()
359 rc = dev->ops->dep_link_down(dev); in nfc_dep_link_down()
361 dev->dep_link_up = false; in nfc_dep_link_down()
362 dev->active_target = NULL; in nfc_dep_link_down()
363 dev->rf_mode = NFC_RF_NONE; in nfc_dep_link_down()
364 nfc_llcp_mac_is_down(dev); in nfc_dep_link_down()
365 nfc_genl_dep_link_down_event(dev); in nfc_dep_link_down()
369 device_unlock(&dev->dev); in nfc_dep_link_down()
374 int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx, in nfc_dep_link_is_up() argument
377 dev->dep_link_up = true; in nfc_dep_link_is_up()
379 if (!dev->active_target && rf_mode == NFC_RF_INITIATOR) { in nfc_dep_link_is_up()
382 target = nfc_find_target(dev, target_idx); in nfc_dep_link_is_up()
386 dev->active_target = target; in nfc_dep_link_is_up()
389 dev->polling = false; in nfc_dep_link_is_up()
390 dev->rf_mode = rf_mode; in nfc_dep_link_is_up()
392 nfc_llcp_mac_is_up(dev, target_idx, comm_mode, rf_mode); in nfc_dep_link_is_up()
394 return nfc_genl_dep_link_up_event(dev, target_idx, comm_mode, rf_mode); in nfc_dep_link_is_up()
405 int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol) in nfc_activate_target() argument
411 dev_name(&dev->dev), target_idx, protocol); in nfc_activate_target()
413 device_lock(&dev->dev); in nfc_activate_target()
415 if (!device_is_registered(&dev->dev)) { in nfc_activate_target()
420 if (dev->active_target) { in nfc_activate_target()
425 target = nfc_find_target(dev, target_idx); in nfc_activate_target()
431 rc = dev->ops->activate_target(dev, target, protocol); in nfc_activate_target()
433 dev->active_target = target; in nfc_activate_target()
434 dev->rf_mode = NFC_RF_INITIATOR; in nfc_activate_target()
436 if (dev->ops->check_presence && !dev->shutting_down) in nfc_activate_target()
437 mod_timer(&dev->check_pres_timer, jiffies + in nfc_activate_target()
442 device_unlock(&dev->dev); in nfc_activate_target()
452 int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx, u8 mode) in nfc_deactivate_target() argument
457 dev_name(&dev->dev), target_idx); in nfc_deactivate_target()
459 device_lock(&dev->dev); in nfc_deactivate_target()
461 if (!device_is_registered(&dev->dev)) { in nfc_deactivate_target()
466 if (dev->active_target == NULL) { in nfc_deactivate_target()
471 if (dev->active_target->idx != target_idx) { in nfc_deactivate_target()
476 if (dev->ops->check_presence) in nfc_deactivate_target()
477 del_timer_sync(&dev->check_pres_timer); in nfc_deactivate_target()
479 dev->ops->deactivate_target(dev, dev->active_target, mode); in nfc_deactivate_target()
480 dev->active_target = NULL; in nfc_deactivate_target()
483 device_unlock(&dev->dev); in nfc_deactivate_target()
498 int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb, in nfc_data_exchange() argument
504 dev_name(&dev->dev), target_idx, skb->len); in nfc_data_exchange()
506 device_lock(&dev->dev); in nfc_data_exchange()
508 if (!device_is_registered(&dev->dev)) { in nfc_data_exchange()
514 if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) { in nfc_data_exchange()
515 if (dev->active_target->idx != target_idx) { in nfc_data_exchange()
521 if (dev->ops->check_presence) in nfc_data_exchange()
522 del_timer_sync(&dev->check_pres_timer); in nfc_data_exchange()
524 rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb, in nfc_data_exchange()
527 if (!rc && dev->ops->check_presence && !dev->shutting_down) in nfc_data_exchange()
528 mod_timer(&dev->check_pres_timer, jiffies + in nfc_data_exchange()
530 } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) { in nfc_data_exchange()
531 rc = dev->ops->tm_send(dev, skb); in nfc_data_exchange()
540 device_unlock(&dev->dev); in nfc_data_exchange()
544 struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx) in nfc_find_se() argument
548 list_for_each_entry(se, &dev->secure_elements, list) in nfc_find_se()
556 int nfc_enable_se(struct nfc_dev *dev, u32 se_idx) in nfc_enable_se() argument
561 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_enable_se()
563 device_lock(&dev->dev); in nfc_enable_se()
565 if (!device_is_registered(&dev->dev)) { in nfc_enable_se()
570 if (!dev->dev_up) { in nfc_enable_se()
575 if (dev->polling) { in nfc_enable_se()
580 if (!dev->ops->enable_se || !dev->ops->disable_se) { in nfc_enable_se()
585 se = nfc_find_se(dev, se_idx); in nfc_enable_se()
596 rc = dev->ops->enable_se(dev, se_idx); in nfc_enable_se()
601 device_unlock(&dev->dev); in nfc_enable_se()
605 int nfc_disable_se(struct nfc_dev *dev, u32 se_idx) in nfc_disable_se() argument
610 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_disable_se()
612 device_lock(&dev->dev); in nfc_disable_se()
614 if (!device_is_registered(&dev->dev)) { in nfc_disable_se()
619 if (!dev->dev_up) { in nfc_disable_se()
624 if (!dev->ops->enable_se || !dev->ops->disable_se) { in nfc_disable_se()
629 se = nfc_find_se(dev, se_idx); in nfc_disable_se()
640 rc = dev->ops->disable_se(dev, se_idx); in nfc_disable_se()
645 device_unlock(&dev->dev); in nfc_disable_se()
649 int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len) in nfc_set_remote_general_bytes() argument
651 pr_debug("dev_name=%s gb_len=%d\n", dev_name(&dev->dev), gb_len); in nfc_set_remote_general_bytes()
653 return nfc_llcp_set_remote_gb(dev, gb, gb_len); in nfc_set_remote_general_bytes()
657 u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len) in nfc_get_local_general_bytes() argument
659 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_get_local_general_bytes()
661 return nfc_llcp_general_bytes(dev, gb_len); in nfc_get_local_general_bytes()
665 int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb) in nfc_tm_data_received() argument
668 if (dev->dep_link_up == false) { in nfc_tm_data_received()
673 return nfc_llcp_data_received(dev, skb); in nfc_tm_data_received()
677 int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, in nfc_tm_activated() argument
682 device_lock(&dev->dev); in nfc_tm_activated()
684 dev->polling = false; in nfc_tm_activated()
687 rc = nfc_set_remote_general_bytes(dev, gb, gb_len); in nfc_tm_activated()
692 dev->rf_mode = NFC_RF_TARGET; in nfc_tm_activated()
695 nfc_dep_link_is_up(dev, 0, comm_mode, NFC_RF_TARGET); in nfc_tm_activated()
697 rc = nfc_genl_tm_activated(dev, protocol); in nfc_tm_activated()
700 device_unlock(&dev->dev); in nfc_tm_activated()
706 int nfc_tm_deactivated(struct nfc_dev *dev) in nfc_tm_deactivated() argument
708 dev->dep_link_up = false; in nfc_tm_deactivated()
709 dev->rf_mode = NFC_RF_NONE; in nfc_tm_deactivated()
711 return nfc_genl_tm_deactivated(dev); in nfc_tm_deactivated()
721 struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk, in nfc_alloc_send_skb() argument
729 dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; in nfc_alloc_send_skb()
733 skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); in nfc_alloc_send_skb()
775 int nfc_targets_found(struct nfc_dev *dev, in nfc_targets_found() argument
780 pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets); in nfc_targets_found()
783 targets[i].idx = dev->target_next_idx++; in nfc_targets_found()
785 device_lock(&dev->dev); in nfc_targets_found()
787 if (dev->polling == false) { in nfc_targets_found()
788 device_unlock(&dev->dev); in nfc_targets_found()
792 dev->polling = false; in nfc_targets_found()
794 dev->targets_generation++; in nfc_targets_found()
796 kfree(dev->targets); in nfc_targets_found()
797 dev->targets = NULL; in nfc_targets_found()
800 dev->targets = kmemdup(targets, in nfc_targets_found()
804 if (!dev->targets) { in nfc_targets_found()
805 dev->n_targets = 0; in nfc_targets_found()
806 device_unlock(&dev->dev); in nfc_targets_found()
811 dev->n_targets = n_targets; in nfc_targets_found()
812 device_unlock(&dev->dev); in nfc_targets_found()
814 nfc_genl_targets_found(dev); in nfc_targets_found()
832 int nfc_target_lost(struct nfc_dev *dev, u32 target_idx) in nfc_target_lost() argument
837 pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx); in nfc_target_lost()
839 device_lock(&dev->dev); in nfc_target_lost()
841 for (i = 0; i < dev->n_targets; i++) { in nfc_target_lost()
842 tg = &dev->targets[i]; in nfc_target_lost()
847 if (i == dev->n_targets) { in nfc_target_lost()
848 device_unlock(&dev->dev); in nfc_target_lost()
852 dev->targets_generation++; in nfc_target_lost()
853 dev->n_targets--; in nfc_target_lost()
854 dev->active_target = NULL; in nfc_target_lost()
856 if (dev->n_targets) { in nfc_target_lost()
857 memcpy(&dev->targets[i], &dev->targets[i + 1], in nfc_target_lost()
858 (dev->n_targets - i) * sizeof(struct nfc_target)); in nfc_target_lost()
860 kfree(dev->targets); in nfc_target_lost()
861 dev->targets = NULL; in nfc_target_lost()
864 device_unlock(&dev->dev); in nfc_target_lost()
866 nfc_genl_target_lost(dev, target_idx); in nfc_target_lost()
872 inline void nfc_driver_failure(struct nfc_dev *dev, int err) in nfc_driver_failure() argument
874 nfc_targets_found(dev, NULL, 0); in nfc_driver_failure()
878 int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type) in nfc_add_se() argument
883 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_add_se()
885 se = nfc_find_se(dev, se_idx); in nfc_add_se()
898 list_add(&se->list, &dev->secure_elements); in nfc_add_se()
900 rc = nfc_genl_se_added(dev, se_idx, type); in nfc_add_se()
912 int nfc_remove_se(struct nfc_dev *dev, u32 se_idx) in nfc_remove_se() argument
917 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); in nfc_remove_se()
919 list_for_each_entry_safe(se, n, &dev->secure_elements, list) in nfc_remove_se()
921 rc = nfc_genl_se_removed(dev, se_idx); in nfc_remove_se()
935 int nfc_se_transaction(struct nfc_dev *dev, u8 se_idx, in nfc_se_transaction() argument
942 device_lock(&dev->dev); in nfc_se_transaction()
949 rc = nfc_genl_se_transaction(dev, se_idx, evt_transaction); in nfc_se_transaction()
951 device_unlock(&dev->dev); in nfc_se_transaction()
958 struct nfc_dev *dev = to_nfc_dev(d); in nfc_release() local
961 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_release()
963 nfc_genl_data_exit(&dev->genl_data); in nfc_release()
964 kfree(dev->targets); in nfc_release()
966 list_for_each_entry_safe(se, n, &dev->secure_elements, list) { in nfc_release()
967 nfc_genl_se_removed(dev, se->idx); in nfc_release()
972 kfree(dev); in nfc_release()
977 struct nfc_dev *dev = container_of(work, struct nfc_dev, in nfc_check_pres_work() local
981 device_lock(&dev->dev); in nfc_check_pres_work()
983 if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) { in nfc_check_pres_work()
984 rc = dev->ops->check_presence(dev, dev->active_target); in nfc_check_pres_work()
988 u32 active_target_idx = dev->active_target->idx; in nfc_check_pres_work()
989 device_unlock(&dev->dev); in nfc_check_pres_work()
990 nfc_target_lost(dev, active_target_idx); in nfc_check_pres_work()
994 if (!dev->shutting_down) in nfc_check_pres_work()
995 mod_timer(&dev->check_pres_timer, jiffies + in nfc_check_pres_work()
1000 device_unlock(&dev->dev); in nfc_check_pres_work()
1005 struct nfc_dev *dev = (struct nfc_dev *)data; in nfc_check_pres_timeout() local
1007 schedule_work(&dev->check_pres_work); in nfc_check_pres_timeout()
1018 struct nfc_dev *dev = to_nfc_dev(d); in match_idx() local
1021 return dev->idx == *idx; in match_idx()
1045 struct nfc_dev *dev; in nfc_allocate_device() local
1054 dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL); in nfc_allocate_device()
1055 if (!dev) in nfc_allocate_device()
1058 dev->ops = ops; in nfc_allocate_device()
1059 dev->supported_protocols = supported_protocols; in nfc_allocate_device()
1060 dev->tx_headroom = tx_headroom; in nfc_allocate_device()
1061 dev->tx_tailroom = tx_tailroom; in nfc_allocate_device()
1062 INIT_LIST_HEAD(&dev->secure_elements); in nfc_allocate_device()
1064 nfc_genl_data_init(&dev->genl_data); in nfc_allocate_device()
1066 dev->rf_mode = NFC_RF_NONE; in nfc_allocate_device()
1069 dev->targets_generation = 1; in nfc_allocate_device()
1072 init_timer(&dev->check_pres_timer); in nfc_allocate_device()
1073 dev->check_pres_timer.data = (unsigned long)dev; in nfc_allocate_device()
1074 dev->check_pres_timer.function = nfc_check_pres_timeout; in nfc_allocate_device()
1076 INIT_WORK(&dev->check_pres_work, nfc_check_pres_work); in nfc_allocate_device()
1079 return dev; in nfc_allocate_device()
1088 int nfc_register_device(struct nfc_dev *dev) in nfc_register_device() argument
1092 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_register_device()
1094 dev->idx = ida_simple_get(&nfc_index_ida, 0, 0, GFP_KERNEL); in nfc_register_device()
1095 if (dev->idx < 0) in nfc_register_device()
1096 return dev->idx; in nfc_register_device()
1098 dev->dev.class = &nfc_class; in nfc_register_device()
1099 dev_set_name(&dev->dev, "nfc%d", dev->idx); in nfc_register_device()
1100 device_initialize(&dev->dev); in nfc_register_device()
1104 rc = device_add(&dev->dev); in nfc_register_device()
1110 rc = nfc_llcp_register_device(dev); in nfc_register_device()
1114 rc = nfc_genl_device_added(dev); in nfc_register_device()
1117 dev_name(&dev->dev)); in nfc_register_device()
1119 dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, in nfc_register_device()
1120 RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev); in nfc_register_device()
1121 if (dev->rfkill) { in nfc_register_device()
1122 if (rfkill_register(dev->rfkill) < 0) { in nfc_register_device()
1123 rfkill_destroy(dev->rfkill); in nfc_register_device()
1124 dev->rfkill = NULL; in nfc_register_device()
1137 void nfc_unregister_device(struct nfc_dev *dev) in nfc_unregister_device() argument
1141 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); in nfc_unregister_device()
1143 id = dev->idx; in nfc_unregister_device()
1145 if (dev->rfkill) { in nfc_unregister_device()
1146 rfkill_unregister(dev->rfkill); in nfc_unregister_device()
1147 rfkill_destroy(dev->rfkill); in nfc_unregister_device()
1150 if (dev->ops->check_presence) { in nfc_unregister_device()
1151 device_lock(&dev->dev); in nfc_unregister_device()
1152 dev->shutting_down = true; in nfc_unregister_device()
1153 device_unlock(&dev->dev); in nfc_unregister_device()
1154 del_timer_sync(&dev->check_pres_timer); in nfc_unregister_device()
1155 cancel_work_sync(&dev->check_pres_work); in nfc_unregister_device()
1158 rc = nfc_genl_device_removed(dev); in nfc_unregister_device()
1161 "was removed\n", dev_name(&dev->dev)); in nfc_unregister_device()
1163 nfc_llcp_unregister_device(dev); in nfc_unregister_device()
1167 device_del(&dev->dev); in nfc_unregister_device()