Lines Matching refs:ddev

47 struct sk_buff *digital_skb_alloc(struct nfc_digital_dev *ddev,  in digital_skb_alloc()  argument
52 skb = alloc_skb(len + ddev->tx_headroom + ddev->tx_tailroom, in digital_skb_alloc()
55 skb_reserve(skb, ddev->tx_headroom); in digital_skb_alloc()
105 static inline void digital_switch_rf(struct nfc_digital_dev *ddev, bool on) in digital_switch_rf() argument
107 ddev->ops->switch_rf(ddev, on); in digital_switch_rf()
110 static inline void digital_abort_cmd(struct nfc_digital_dev *ddev) in digital_abort_cmd() argument
112 ddev->ops->abort_cmd(ddev); in digital_abort_cmd()
118 struct nfc_digital_dev *ddev = container_of(work, in digital_wq_cmd_complete() local
122 mutex_lock(&ddev->cmd_lock); in digital_wq_cmd_complete()
124 cmd = list_first_entry_or_null(&ddev->cmd_queue, struct digital_cmd, in digital_wq_cmd_complete()
127 mutex_unlock(&ddev->cmd_lock); in digital_wq_cmd_complete()
133 mutex_unlock(&ddev->cmd_lock); in digital_wq_cmd_complete()
139 cmd->cmd_cb(ddev, cmd->cb_context, cmd->resp); in digital_wq_cmd_complete()
144 schedule_work(&ddev->cmd_work); in digital_wq_cmd_complete()
147 static void digital_send_cmd_complete(struct nfc_digital_dev *ddev, in digital_send_cmd_complete() argument
154 schedule_work(&ddev->cmd_complete_work); in digital_send_cmd_complete()
162 struct nfc_digital_dev *ddev = container_of(work, in digital_wq_cmd() local
166 mutex_lock(&ddev->cmd_lock); in digital_wq_cmd()
168 cmd = list_first_entry_or_null(&ddev->cmd_queue, struct digital_cmd, in digital_wq_cmd()
171 mutex_unlock(&ddev->cmd_lock); in digital_wq_cmd()
175 mutex_unlock(&ddev->cmd_lock); in digital_wq_cmd()
183 rc = ddev->ops->in_send_cmd(ddev, cmd->req, cmd->timeout, in digital_wq_cmd()
188 rc = ddev->ops->tg_send_cmd(ddev, cmd->req, cmd->timeout, in digital_wq_cmd()
193 rc = ddev->ops->tg_listen(ddev, cmd->timeout, in digital_wq_cmd()
200 rc = ddev->ops->tg_listen_mdaa(ddev, params, cmd->timeout, in digital_wq_cmd()
205 rc = ddev->ops->tg_listen_md(ddev, cmd->timeout, in digital_wq_cmd()
219 mutex_lock(&ddev->cmd_lock); in digital_wq_cmd()
221 mutex_unlock(&ddev->cmd_lock); in digital_wq_cmd()
227 schedule_work(&ddev->cmd_work); in digital_wq_cmd()
230 int digital_send_cmd(struct nfc_digital_dev *ddev, u8 cmd_type, in digital_send_cmd() argument
249 mutex_lock(&ddev->cmd_lock); in digital_send_cmd()
250 list_add_tail(&cmd->queue, &ddev->cmd_queue); in digital_send_cmd()
251 mutex_unlock(&ddev->cmd_lock); in digital_send_cmd()
253 schedule_work(&ddev->cmd_work); in digital_send_cmd()
258 int digital_in_configure_hw(struct nfc_digital_dev *ddev, int type, int param) in digital_in_configure_hw() argument
262 rc = ddev->ops->in_configure_hw(ddev, type, param); in digital_in_configure_hw()
269 int digital_tg_configure_hw(struct nfc_digital_dev *ddev, int type, int param) in digital_tg_configure_hw() argument
273 rc = ddev->ops->tg_configure_hw(ddev, type, param); in digital_tg_configure_hw()
280 static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech) in digital_tg_listen_mdaa() argument
297 return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params, in digital_tg_listen_mdaa()
301 static int digital_tg_listen_md(struct nfc_digital_dev *ddev, u8 rf_tech) in digital_tg_listen_md() argument
303 return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MD, NULL, NULL, 500, in digital_tg_listen_md()
307 int digital_target_found(struct nfc_digital_dev *ddev, in digital_target_found() argument
317 rf_tech = ddev->poll_techs[ddev->poll_tech_index].rf_tech; in digital_target_found()
375 ddev->curr_rf_tech = rf_tech; in digital_target_found()
377 if (DIGITAL_DRV_CAPS_IN_CRC(ddev)) { in digital_target_found()
378 ddev->skb_add_crc = digital_skb_add_crc_none; in digital_target_found()
379 ddev->skb_check_crc = digital_skb_check_crc_none; in digital_target_found()
381 ddev->skb_add_crc = add_crc; in digital_target_found()
382 ddev->skb_check_crc = check_crc; in digital_target_found()
385 rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING, framing); in digital_target_found()
391 poll_tech_count = ddev->poll_tech_count; in digital_target_found()
392 ddev->poll_tech_count = 0; in digital_target_found()
394 rc = nfc_targets_found(ddev->nfc_dev, target, 1); in digital_target_found()
396 ddev->poll_tech_count = poll_tech_count; in digital_target_found()
403 void digital_poll_next_tech(struct nfc_digital_dev *ddev) in digital_poll_next_tech() argument
407 digital_switch_rf(ddev, 0); in digital_poll_next_tech()
409 mutex_lock(&ddev->poll_lock); in digital_poll_next_tech()
411 if (!ddev->poll_tech_count) { in digital_poll_next_tech()
412 mutex_unlock(&ddev->poll_lock); in digital_poll_next_tech()
417 ddev->poll_tech_index = rand_mod % ddev->poll_tech_count; in digital_poll_next_tech()
419 mutex_unlock(&ddev->poll_lock); in digital_poll_next_tech()
421 schedule_work(&ddev->poll_work); in digital_poll_next_tech()
428 struct nfc_digital_dev *ddev = container_of(work, in digital_wq_poll() local
431 mutex_lock(&ddev->poll_lock); in digital_wq_poll()
433 if (!ddev->poll_tech_count) { in digital_wq_poll()
434 mutex_unlock(&ddev->poll_lock); in digital_wq_poll()
438 poll_tech = &ddev->poll_techs[ddev->poll_tech_index]; in digital_wq_poll()
440 mutex_unlock(&ddev->poll_lock); in digital_wq_poll()
442 rc = poll_tech->poll_func(ddev, poll_tech->rf_tech); in digital_wq_poll()
444 digital_poll_next_tech(ddev); in digital_wq_poll()
447 static void digital_add_poll_tech(struct nfc_digital_dev *ddev, u8 rf_tech, in digital_add_poll_tech() argument
452 if (ddev->poll_tech_count >= NFC_DIGITAL_POLL_MODE_COUNT_MAX) in digital_add_poll_tech()
455 poll_tech = &ddev->poll_techs[ddev->poll_tech_count++]; in digital_add_poll_tech()
473 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_start_poll() local
477 tm_protocols, ddev->protocols); in digital_start_poll()
479 matching_im_protocols = ddev->protocols & im_protocols; in digital_start_poll()
480 matching_tm_protocols = ddev->protocols & tm_protocols; in digital_start_poll()
487 if (ddev->poll_tech_count) { in digital_start_poll()
492 if (ddev->curr_protocol) { in digital_start_poll()
497 ddev->poll_tech_count = 0; in digital_start_poll()
498 ddev->poll_tech_index = 0; in digital_start_poll()
501 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_106A, in digital_start_poll()
505 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_106B, in digital_start_poll()
509 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_212F, in digital_start_poll()
512 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_424F, in digital_start_poll()
517 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_ISO15693, in digital_start_poll()
521 if (ddev->ops->tg_listen_mdaa) { in digital_start_poll()
522 digital_add_poll_tech(ddev, 0, in digital_start_poll()
524 } else if (ddev->ops->tg_listen_md) { in digital_start_poll()
525 digital_add_poll_tech(ddev, 0, in digital_start_poll()
528 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_106A, in digital_start_poll()
531 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_212F, in digital_start_poll()
534 digital_add_poll_tech(ddev, NFC_DIGITAL_RF_TECH_424F, in digital_start_poll()
539 if (!ddev->poll_tech_count) { in digital_start_poll()
545 schedule_work(&ddev->poll_work); in digital_start_poll()
552 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_stop_poll() local
554 mutex_lock(&ddev->poll_lock); in digital_stop_poll()
556 if (!ddev->poll_tech_count) { in digital_stop_poll()
558 mutex_unlock(&ddev->poll_lock); in digital_stop_poll()
562 ddev->poll_tech_count = 0; in digital_stop_poll()
564 mutex_unlock(&ddev->poll_lock); in digital_stop_poll()
566 cancel_work_sync(&ddev->poll_work); in digital_stop_poll()
568 digital_abort_cmd(ddev); in digital_stop_poll()
573 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_dev_up() local
575 digital_switch_rf(ddev, 1); in digital_dev_up()
582 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_dev_down() local
584 digital_switch_rf(ddev, 0); in digital_dev_down()
593 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_dep_link_up() local
596 rc = digital_in_send_atr_req(ddev, target, comm_mode, gb, gb_len); in digital_dep_link_up()
599 ddev->curr_protocol = NFC_PROTO_NFC_DEP; in digital_dep_link_up()
606 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_dep_link_down() local
608 ddev->curr_protocol = 0; in digital_dep_link_down()
616 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_activate_target() local
618 if (ddev->poll_tech_count) { in digital_activate_target()
623 if (ddev->curr_protocol) { in digital_activate_target()
628 ddev->curr_protocol = protocol; in digital_activate_target()
637 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_deactivate_target() local
639 if (!ddev->curr_protocol) { in digital_deactivate_target()
644 ddev->curr_protocol = 0; in digital_deactivate_target()
649 struct nfc_digital_dev *ddev = nfc_get_drvdata(dev); in digital_tg_send() local
651 return digital_tg_send_dep_res(ddev, skb); in digital_tg_send()
654 static void digital_in_send_complete(struct nfc_digital_dev *ddev, void *arg, in digital_in_send_complete() argument
666 if (ddev->curr_protocol == NFC_PROTO_MIFARE) { in digital_in_send_complete()
672 if ((ddev->curr_protocol == NFC_PROTO_ISO14443) || in digital_in_send_complete()
673 (ddev->curr_protocol == NFC_PROTO_ISO14443_B)) { in digital_in_send_complete()
674 rc = digital_in_iso_dep_pull_sod(ddev, resp); in digital_in_send_complete()
679 rc = ddev->skb_check_crc(resp); in digital_in_send_complete()
696 struct nfc_digital_dev *ddev = nfc_get_drvdata(nfc_dev); in digital_in_send() local
709 if (ddev->curr_protocol == NFC_PROTO_NFC_DEP) { in digital_in_send()
710 rc = digital_in_send_dep_req(ddev, target, skb, data_exch); in digital_in_send()
714 if ((ddev->curr_protocol == NFC_PROTO_ISO14443) || in digital_in_send()
715 (ddev->curr_protocol == NFC_PROTO_ISO14443_B)) { in digital_in_send()
716 rc = digital_in_iso_dep_push_sod(ddev, skb); in digital_in_send()
721 ddev->skb_add_crc(skb); in digital_in_send()
723 rc = digital_in_send_cmd(ddev, skb, 500, digital_in_send_complete, in digital_in_send()
751 struct nfc_digital_dev *ddev; in nfc_digital_allocate_device() local
758 ddev = kzalloc(sizeof(struct nfc_digital_dev), GFP_KERNEL); in nfc_digital_allocate_device()
759 if (!ddev) in nfc_digital_allocate_device()
762 ddev->driver_capabilities = driver_capabilities; in nfc_digital_allocate_device()
763 ddev->ops = ops; in nfc_digital_allocate_device()
765 mutex_init(&ddev->cmd_lock); in nfc_digital_allocate_device()
766 INIT_LIST_HEAD(&ddev->cmd_queue); in nfc_digital_allocate_device()
768 INIT_WORK(&ddev->cmd_work, digital_wq_cmd); in nfc_digital_allocate_device()
769 INIT_WORK(&ddev->cmd_complete_work, digital_wq_cmd_complete); in nfc_digital_allocate_device()
771 mutex_init(&ddev->poll_lock); in nfc_digital_allocate_device()
772 INIT_WORK(&ddev->poll_work, digital_wq_poll); in nfc_digital_allocate_device()
775 ddev->protocols |= NFC_PROTO_JEWEL_MASK; in nfc_digital_allocate_device()
777 ddev->protocols |= NFC_PROTO_MIFARE_MASK; in nfc_digital_allocate_device()
779 ddev->protocols |= NFC_PROTO_FELICA_MASK; in nfc_digital_allocate_device()
781 ddev->protocols |= NFC_PROTO_NFC_DEP_MASK; in nfc_digital_allocate_device()
783 ddev->protocols |= NFC_PROTO_ISO15693_MASK; in nfc_digital_allocate_device()
785 ddev->protocols |= NFC_PROTO_ISO14443_MASK; in nfc_digital_allocate_device()
787 ddev->protocols |= NFC_PROTO_ISO14443_B_MASK; in nfc_digital_allocate_device()
789 ddev->tx_headroom = tx_headroom + DIGITAL_MAX_HEADER_LEN; in nfc_digital_allocate_device()
790 ddev->tx_tailroom = tx_tailroom + DIGITAL_CRC_LEN; in nfc_digital_allocate_device()
792 ddev->nfc_dev = nfc_allocate_device(&digital_nfc_ops, ddev->protocols, in nfc_digital_allocate_device()
793 ddev->tx_headroom, in nfc_digital_allocate_device()
794 ddev->tx_tailroom); in nfc_digital_allocate_device()
795 if (!ddev->nfc_dev) { in nfc_digital_allocate_device()
800 nfc_set_drvdata(ddev->nfc_dev, ddev); in nfc_digital_allocate_device()
802 return ddev; in nfc_digital_allocate_device()
805 kfree(ddev); in nfc_digital_allocate_device()
811 void nfc_digital_free_device(struct nfc_digital_dev *ddev) in nfc_digital_free_device() argument
813 nfc_free_device(ddev->nfc_dev); in nfc_digital_free_device()
814 kfree(ddev); in nfc_digital_free_device()
818 int nfc_digital_register_device(struct nfc_digital_dev *ddev) in nfc_digital_register_device() argument
820 return nfc_register_device(ddev->nfc_dev); in nfc_digital_register_device()
824 void nfc_digital_unregister_device(struct nfc_digital_dev *ddev) in nfc_digital_unregister_device() argument
828 nfc_unregister_device(ddev->nfc_dev); in nfc_digital_unregister_device()
830 mutex_lock(&ddev->poll_lock); in nfc_digital_unregister_device()
831 ddev->poll_tech_count = 0; in nfc_digital_unregister_device()
832 mutex_unlock(&ddev->poll_lock); in nfc_digital_unregister_device()
834 cancel_work_sync(&ddev->poll_work); in nfc_digital_unregister_device()
835 cancel_work_sync(&ddev->cmd_work); in nfc_digital_unregister_device()
836 cancel_work_sync(&ddev->cmd_complete_work); in nfc_digital_unregister_device()
838 list_for_each_entry_safe(cmd, n, &ddev->cmd_queue, queue) { in nfc_digital_unregister_device()