Lines Matching refs:ddev

113 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg,
115 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg,
144 static void digital_skb_push_dep_sod(struct nfc_digital_dev *ddev, in digital_skb_push_dep_sod() argument
151 if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A) in digital_skb_push_dep_sod()
155 static int digital_skb_pull_dep_sod(struct nfc_digital_dev *ddev, in digital_skb_pull_dep_sod() argument
163 if (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A) in digital_skb_pull_dep_sod()
176 digital_send_dep_data_prep(struct nfc_digital_dev *ddev, struct sk_buff *skb, in digital_send_dep_data_prep() argument
182 if (skb->len > ddev->remote_payload_max) { in digital_send_dep_data_prep()
185 new_skb = digital_skb_alloc(ddev, ddev->remote_payload_max); in digital_send_dep_data_prep()
187 kfree_skb(ddev->chaining_skb); in digital_send_dep_data_prep()
188 ddev->chaining_skb = NULL; in digital_send_dep_data_prep()
193 skb_reserve(new_skb, ddev->tx_headroom + NFC_HEADER_SIZE + in digital_send_dep_data_prep()
195 memcpy(skb_put(new_skb, ddev->remote_payload_max), skb->data, in digital_send_dep_data_prep()
196 ddev->remote_payload_max); in digital_send_dep_data_prep()
197 skb_pull(skb, ddev->remote_payload_max); in digital_send_dep_data_prep()
199 ddev->chaining_skb = skb; in digital_send_dep_data_prep()
200 ddev->data_exch = data_exch; in digital_send_dep_data_prep()
202 ddev->chaining_skb = NULL; in digital_send_dep_data_prep()
210 digital_recv_dep_data_gather(struct nfc_digital_dev *ddev, u8 pfb, in digital_recv_dep_data_gather() argument
212 int (*send_ack)(struct nfc_digital_dev *ddev, in digital_recv_dep_data_gather() argument
220 if (DIGITAL_NFC_DEP_MI_BIT_SET(pfb) && (!ddev->chaining_skb)) { in digital_recv_dep_data_gather()
221 ddev->chaining_skb = in digital_recv_dep_data_gather()
222 nfc_alloc_recv_skb(8 * ddev->local_payload_max, in digital_recv_dep_data_gather()
224 if (!ddev->chaining_skb) { in digital_recv_dep_data_gather()
230 if (ddev->chaining_skb) { in digital_recv_dep_data_gather()
231 if (resp->len > skb_tailroom(ddev->chaining_skb)) { in digital_recv_dep_data_gather()
232 new_skb = skb_copy_expand(ddev->chaining_skb, in digital_recv_dep_data_gather()
234 ddev->chaining_skb), in digital_recv_dep_data_gather()
235 8 * ddev->local_payload_max, in digital_recv_dep_data_gather()
242 kfree_skb(ddev->chaining_skb); in digital_recv_dep_data_gather()
243 ddev->chaining_skb = new_skb; in digital_recv_dep_data_gather()
246 memcpy(skb_put(ddev->chaining_skb, resp->len), resp->data, in digital_recv_dep_data_gather()
253 rc = send_ack(ddev, data_exch); in digital_recv_dep_data_gather()
260 resp = ddev->chaining_skb; in digital_recv_dep_data_gather()
261 ddev->chaining_skb = NULL; in digital_recv_dep_data_gather()
269 kfree_skb(ddev->chaining_skb); in digital_recv_dep_data_gather()
270 ddev->chaining_skb = NULL; in digital_recv_dep_data_gather()
275 static void digital_in_recv_psl_res(struct nfc_digital_dev *ddev, void *arg, in digital_in_recv_psl_res() argument
288 rc = ddev->skb_check_crc(resp); in digital_in_recv_psl_res()
294 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_in_recv_psl_res()
309 rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, in digital_in_recv_psl_res()
314 rc = digital_in_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING, in digital_in_recv_psl_res()
319 if (!DIGITAL_DRV_CAPS_IN_CRC(ddev) && in digital_in_recv_psl_res()
320 (ddev->curr_rf_tech == NFC_DIGITAL_RF_TECH_106A)) { in digital_in_recv_psl_res()
321 ddev->skb_add_crc = digital_skb_add_crc_f; in digital_in_recv_psl_res()
322 ddev->skb_check_crc = digital_skb_check_crc_f; in digital_in_recv_psl_res()
325 ddev->curr_rf_tech = NFC_DIGITAL_RF_TECH_424F; in digital_in_recv_psl_res()
327 nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE, in digital_in_recv_psl_res()
330 ddev->curr_nfc_dep_pni = 0; in digital_in_recv_psl_res()
336 ddev->curr_protocol = 0; in digital_in_recv_psl_res()
339 static int digital_in_send_psl_req(struct nfc_digital_dev *ddev, in digital_in_send_psl_req() argument
347 skb = digital_skb_alloc(ddev, sizeof(*psl_req)); in digital_in_send_psl_req()
360 payload_size = min(ddev->local_payload_max, ddev->remote_payload_max); in digital_in_send_psl_req()
364 ddev->local_payload_max = payload_size; in digital_in_send_psl_req()
365 ddev->remote_payload_max = payload_size; in digital_in_send_psl_req()
367 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_psl_req()
369 ddev->skb_add_crc(skb); in digital_in_send_psl_req()
371 rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_psl_res, in digital_in_send_psl_req()
379 static void digital_in_recv_atr_res(struct nfc_digital_dev *ddev, void *arg, in digital_in_recv_atr_res() argument
393 rc = ddev->skb_check_crc(resp); in digital_in_recv_atr_res()
399 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_in_recv_atr_res()
415 ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits); in digital_in_recv_atr_res()
417 if (!ddev->remote_payload_max) { in digital_in_recv_atr_res()
422 rc = nfc_set_remote_general_bytes(ddev->nfc_dev, atr_res->gb, gb_len); in digital_in_recv_atr_res()
426 if ((ddev->protocols & NFC_PROTO_FELICA_MASK) && in digital_in_recv_atr_res()
427 (ddev->curr_rf_tech != NFC_DIGITAL_RF_TECH_424F)) { in digital_in_recv_atr_res()
428 rc = digital_in_send_psl_req(ddev, target); in digital_in_recv_atr_res()
433 rc = nfc_dep_link_is_up(ddev->nfc_dev, target->idx, NFC_COMM_ACTIVE, in digital_in_recv_atr_res()
436 ddev->curr_nfc_dep_pni = 0; in digital_in_recv_atr_res()
442 ddev->curr_protocol = 0; in digital_in_recv_atr_res()
445 int digital_in_send_atr_req(struct nfc_digital_dev *ddev, in digital_in_send_atr_req() argument
462 skb = digital_skb_alloc(ddev, size); in digital_in_send_atr_req()
482 ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX; in digital_in_send_atr_req()
483 payload_bits = digital_payload_size_to_bits(ddev->local_payload_max); in digital_in_send_atr_req()
491 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_atr_req()
493 ddev->skb_add_crc(skb); in digital_in_send_atr_req()
495 rc = digital_in_send_cmd(ddev, skb, 500, digital_in_recv_atr_res, in digital_in_send_atr_req()
503 static int digital_in_send_ack(struct nfc_digital_dev *ddev, in digital_in_send_ack() argument
510 skb = digital_skb_alloc(ddev, 1); in digital_in_send_ack()
521 ddev->curr_nfc_dep_pni; in digital_in_send_ack()
523 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_ack()
525 ddev->skb_add_crc(skb); in digital_in_send_ack()
527 ddev->saved_skb = skb_get(skb); in digital_in_send_ack()
528 ddev->saved_skb_len = skb->len; in digital_in_send_ack()
530 rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, in digital_in_send_ack()
534 kfree_skb(ddev->saved_skb); in digital_in_send_ack()
535 ddev->saved_skb = NULL; in digital_in_send_ack()
541 static int digital_in_send_nack(struct nfc_digital_dev *ddev, in digital_in_send_nack() argument
548 skb = digital_skb_alloc(ddev, 1); in digital_in_send_nack()
559 DIGITAL_NFC_DEP_PFB_NACK_BIT | ddev->curr_nfc_dep_pni; in digital_in_send_nack()
561 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_nack()
563 ddev->skb_add_crc(skb); in digital_in_send_nack()
565 rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, in digital_in_send_nack()
573 static int digital_in_send_atn(struct nfc_digital_dev *ddev, in digital_in_send_atn() argument
580 skb = digital_skb_alloc(ddev, 1); in digital_in_send_atn()
592 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_atn()
594 ddev->skb_add_crc(skb); in digital_in_send_atn()
596 rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, in digital_in_send_atn()
604 static int digital_in_send_rtox(struct nfc_digital_dev *ddev, in digital_in_send_rtox() argument
611 skb = digital_skb_alloc(ddev, 1); in digital_in_send_rtox()
626 digital_skb_push_dep_sod(ddev, skb); in digital_in_send_rtox()
628 ddev->skb_add_crc(skb); in digital_in_send_rtox()
630 ddev->saved_skb = skb_get(skb); in digital_in_send_rtox()
631 ddev->saved_skb_len = skb->len; in digital_in_send_rtox()
633 rc = digital_in_send_cmd(ddev, skb, 1500, digital_in_recv_dep_res, in digital_in_send_rtox()
637 kfree_skb(ddev->saved_skb); in digital_in_send_rtox()
638 ddev->saved_skb = NULL; in digital_in_send_rtox()
644 static int digital_in_send_saved_skb(struct nfc_digital_dev *ddev, in digital_in_send_saved_skb() argument
647 skb_get(ddev->saved_skb); in digital_in_send_saved_skb()
648 skb_push(ddev->saved_skb, ddev->saved_skb_len); in digital_in_send_saved_skb()
650 return digital_in_send_cmd(ddev, ddev->saved_skb, 1500, in digital_in_send_saved_skb()
654 static void digital_in_recv_dep_res(struct nfc_digital_dev *ddev, void *arg, in digital_in_recv_dep_res() argument
667 if (((rc != -ETIMEDOUT) || ddev->nack_count) && in digital_in_recv_dep_res()
668 (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) { in digital_in_recv_dep_res()
669 ddev->atn_count = 0; in digital_in_recv_dep_res()
671 rc = digital_in_send_nack(ddev, data_exch); in digital_in_recv_dep_res()
677 (ddev->atn_count++ < DIGITAL_NFC_DEP_N_RETRY_ATN)) { in digital_in_recv_dep_res()
678 ddev->nack_count = 0; in digital_in_recv_dep_res()
680 rc = digital_in_send_atn(ddev, data_exch); in digital_in_recv_dep_res()
690 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_in_recv_dep_res()
696 rc = ddev->skb_check_crc(resp); in digital_in_recv_dep_res()
699 (ddev->nack_count++ < DIGITAL_NFC_DEP_N_RETRY_NACK)) { in digital_in_recv_dep_res()
700 ddev->atn_count = 0; in digital_in_recv_dep_res()
702 rc = digital_in_send_nack(ddev, data_exch); in digital_in_recv_dep_res()
715 ddev->atn_count = 0; in digital_in_recv_dep_res()
716 ddev->nack_count = 0; in digital_in_recv_dep_res()
718 if (resp->len > ddev->local_payload_max) { in digital_in_recv_dep_res()
754 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) { in digital_in_recv_dep_res()
760 ddev->curr_nfc_dep_pni = in digital_in_recv_dep_res()
761 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1); in digital_in_recv_dep_res()
763 kfree_skb(ddev->saved_skb); in digital_in_recv_dep_res()
764 ddev->saved_skb = NULL; in digital_in_recv_dep_res()
766 resp = digital_recv_dep_data_gather(ddev, pfb, resp, in digital_in_recv_dep_res()
786 if (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni) { in digital_in_recv_dep_res()
792 ddev->curr_nfc_dep_pni = in digital_in_recv_dep_res()
793 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1); in digital_in_recv_dep_res()
795 if (ddev->chaining_skb && !DIGITAL_NFC_DEP_NACK_BIT_SET(pfb)) { in digital_in_recv_dep_res()
796 kfree_skb(ddev->saved_skb); in digital_in_recv_dep_res()
797 ddev->saved_skb = NULL; in digital_in_recv_dep_res()
799 rc = digital_in_send_dep_req(ddev, NULL, in digital_in_recv_dep_res()
800 ddev->chaining_skb, in digital_in_recv_dep_res()
801 ddev->data_exch); in digital_in_recv_dep_res()
814 rc = digital_in_send_saved_skb(ddev, data_exch); in digital_in_recv_dep_res()
816 kfree_skb(ddev->saved_skb); in digital_in_recv_dep_res()
823 kfree_skb(ddev->saved_skb); in digital_in_recv_dep_res()
824 ddev->saved_skb = NULL; in digital_in_recv_dep_res()
826 rc = digital_in_send_rtox(ddev, data_exch, resp->data[0]); in digital_in_recv_dep_res()
840 kfree_skb(ddev->chaining_skb); in digital_in_recv_dep_res()
841 ddev->chaining_skb = NULL; in digital_in_recv_dep_res()
843 kfree_skb(ddev->saved_skb); in digital_in_recv_dep_res()
844 ddev->saved_skb = NULL; in digital_in_recv_dep_res()
850 int digital_in_send_dep_req(struct nfc_digital_dev *ddev, in digital_in_send_dep_req() argument
864 dep_req->pfb = ddev->curr_nfc_dep_pni; in digital_in_send_dep_req()
866 ddev->atn_count = 0; in digital_in_send_dep_req()
867 ddev->nack_count = 0; in digital_in_send_dep_req()
869 chaining_skb = ddev->chaining_skb; in digital_in_send_dep_req()
871 tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_req, data_exch); in digital_in_send_dep_req()
875 digital_skb_push_dep_sod(ddev, tmp_skb); in digital_in_send_dep_req()
877 ddev->skb_add_crc(tmp_skb); in digital_in_send_dep_req()
879 ddev->saved_skb = skb_get(tmp_skb); in digital_in_send_dep_req()
880 ddev->saved_skb_len = tmp_skb->len; in digital_in_send_dep_req()
882 rc = digital_in_send_cmd(ddev, tmp_skb, 1500, digital_in_recv_dep_res, in digital_in_send_dep_req()
889 ddev->chaining_skb = NULL; in digital_in_send_dep_req()
891 kfree_skb(ddev->saved_skb); in digital_in_send_dep_req()
892 ddev->saved_skb = NULL; in digital_in_send_dep_req()
898 static void digital_tg_set_rf_tech(struct nfc_digital_dev *ddev, u8 rf_tech) in digital_tg_set_rf_tech() argument
900 ddev->curr_rf_tech = rf_tech; in digital_tg_set_rf_tech()
902 ddev->skb_add_crc = digital_skb_add_crc_none; in digital_tg_set_rf_tech()
903 ddev->skb_check_crc = digital_skb_check_crc_none; in digital_tg_set_rf_tech()
905 if (DIGITAL_DRV_CAPS_TG_CRC(ddev)) in digital_tg_set_rf_tech()
908 switch (ddev->curr_rf_tech) { in digital_tg_set_rf_tech()
910 ddev->skb_add_crc = digital_skb_add_crc_a; in digital_tg_set_rf_tech()
911 ddev->skb_check_crc = digital_skb_check_crc_a; in digital_tg_set_rf_tech()
916 ddev->skb_add_crc = digital_skb_add_crc_f; in digital_tg_set_rf_tech()
917 ddev->skb_check_crc = digital_skb_check_crc_f; in digital_tg_set_rf_tech()
925 static int digital_tg_send_ack(struct nfc_digital_dev *ddev, in digital_tg_send_ack() argument
932 skb = digital_skb_alloc(ddev, 1); in digital_tg_send_ack()
943 ddev->curr_nfc_dep_pni; in digital_tg_send_ack()
945 if (ddev->did) { in digital_tg_send_ack()
948 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did, in digital_tg_send_ack()
949 sizeof(ddev->did)); in digital_tg_send_ack()
952 ddev->curr_nfc_dep_pni = in digital_tg_send_ack()
953 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1); in digital_tg_send_ack()
955 digital_skb_push_dep_sod(ddev, skb); in digital_tg_send_ack()
957 ddev->skb_add_crc(skb); in digital_tg_send_ack()
959 ddev->saved_skb = skb_get(skb); in digital_tg_send_ack()
960 ddev->saved_skb_len = skb->len; in digital_tg_send_ack()
962 rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req, in digital_tg_send_ack()
966 kfree_skb(ddev->saved_skb); in digital_tg_send_ack()
967 ddev->saved_skb = NULL; in digital_tg_send_ack()
973 static int digital_tg_send_atn(struct nfc_digital_dev *ddev) in digital_tg_send_atn() argument
979 skb = digital_skb_alloc(ddev, 1); in digital_tg_send_atn()
991 if (ddev->did) { in digital_tg_send_atn()
994 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did, in digital_tg_send_atn()
995 sizeof(ddev->did)); in digital_tg_send_atn()
998 digital_skb_push_dep_sod(ddev, skb); in digital_tg_send_atn()
1000 ddev->skb_add_crc(skb); in digital_tg_send_atn()
1002 rc = digital_tg_send_cmd(ddev, skb, 1500, digital_tg_recv_dep_req, in digital_tg_send_atn()
1010 static int digital_tg_send_saved_skb(struct nfc_digital_dev *ddev) in digital_tg_send_saved_skb() argument
1012 skb_get(ddev->saved_skb); in digital_tg_send_saved_skb()
1013 skb_push(ddev->saved_skb, ddev->saved_skb_len); in digital_tg_send_saved_skb()
1015 return digital_tg_send_cmd(ddev, ddev->saved_skb, 1500, in digital_tg_send_saved_skb()
1019 static void digital_tg_recv_dep_req(struct nfc_digital_dev *ddev, void *arg, in digital_tg_recv_dep_req() argument
1033 rc = ddev->skb_check_crc(resp); in digital_tg_recv_dep_req()
1039 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_tg_recv_dep_req()
1045 if (resp->len > ddev->local_payload_max) { in digital_tg_recv_dep_req()
1062 if (ddev->did && (ddev->did == resp->data[3])) { in digital_tg_recv_dep_req()
1068 } else if (ddev->did) { in digital_tg_recv_dep_req()
1089 if ((ddev->atn_count && (DIGITAL_NFC_DEP_PFB_PNI(pfb - 1) != in digital_tg_recv_dep_req()
1090 ddev->curr_nfc_dep_pni)) || in digital_tg_recv_dep_req()
1091 (DIGITAL_NFC_DEP_PFB_PNI(pfb) != ddev->curr_nfc_dep_pni)) { in digital_tg_recv_dep_req()
1097 if (ddev->atn_count) { in digital_tg_recv_dep_req()
1098 ddev->atn_count = 0; in digital_tg_recv_dep_req()
1100 rc = digital_tg_send_saved_skb(ddev); in digital_tg_recv_dep_req()
1107 kfree_skb(ddev->saved_skb); in digital_tg_recv_dep_req()
1108 ddev->saved_skb = NULL; in digital_tg_recv_dep_req()
1110 resp = digital_recv_dep_data_gather(ddev, pfb, resp, in digital_tg_recv_dep_req()
1129 if ((ddev->atn_count && in digital_tg_recv_dep_req()
1131 ddev->curr_nfc_dep_pni)) || in digital_tg_recv_dep_req()
1133 ddev->curr_nfc_dep_pni) || in digital_tg_recv_dep_req()
1134 !ddev->chaining_skb || !ddev->saved_skb) { in digital_tg_recv_dep_req()
1139 if (ddev->atn_count) { in digital_tg_recv_dep_req()
1140 ddev->atn_count = 0; in digital_tg_recv_dep_req()
1142 rc = digital_tg_send_saved_skb(ddev); in digital_tg_recv_dep_req()
1149 kfree_skb(ddev->saved_skb); in digital_tg_recv_dep_req()
1150 ddev->saved_skb = NULL; in digital_tg_recv_dep_req()
1152 rc = digital_tg_send_dep_res(ddev, ddev->chaining_skb); in digital_tg_recv_dep_req()
1157 ddev->curr_nfc_dep_pni) || in digital_tg_recv_dep_req()
1158 !ddev->saved_skb) { in digital_tg_recv_dep_req()
1163 ddev->atn_count = 0; in digital_tg_recv_dep_req()
1165 rc = digital_tg_send_saved_skb(ddev); in digital_tg_recv_dep_req()
1167 kfree_skb(ddev->saved_skb); in digital_tg_recv_dep_req()
1179 rc = digital_tg_send_atn(ddev); in digital_tg_recv_dep_req()
1183 ddev->atn_count++; in digital_tg_recv_dep_req()
1189 rc = nfc_tm_data_received(ddev->nfc_dev, resp); in digital_tg_recv_dep_req()
1192 kfree_skb(ddev->chaining_skb); in digital_tg_recv_dep_req()
1193 ddev->chaining_skb = NULL; in digital_tg_recv_dep_req()
1195 ddev->atn_count = 0; in digital_tg_recv_dep_req()
1197 kfree_skb(ddev->saved_skb); in digital_tg_recv_dep_req()
1198 ddev->saved_skb = NULL; in digital_tg_recv_dep_req()
1204 int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb) in digital_tg_send_dep_res() argument
1216 dep_res->pfb = ddev->curr_nfc_dep_pni; in digital_tg_send_dep_res()
1218 if (ddev->did) { in digital_tg_send_dep_res()
1221 memcpy(skb_put(skb, sizeof(ddev->did)), &ddev->did, in digital_tg_send_dep_res()
1222 sizeof(ddev->did)); in digital_tg_send_dep_res()
1225 ddev->curr_nfc_dep_pni = in digital_tg_send_dep_res()
1226 DIGITAL_NFC_DEP_PFB_PNI(ddev->curr_nfc_dep_pni + 1); in digital_tg_send_dep_res()
1228 chaining_skb = ddev->chaining_skb; in digital_tg_send_dep_res()
1230 tmp_skb = digital_send_dep_data_prep(ddev, skb, dep_res, NULL); in digital_tg_send_dep_res()
1234 digital_skb_push_dep_sod(ddev, tmp_skb); in digital_tg_send_dep_res()
1236 ddev->skb_add_crc(tmp_skb); in digital_tg_send_dep_res()
1238 ddev->saved_skb = skb_get(tmp_skb); in digital_tg_send_dep_res()
1239 ddev->saved_skb_len = tmp_skb->len; in digital_tg_send_dep_res()
1241 rc = digital_tg_send_cmd(ddev, tmp_skb, 1500, digital_tg_recv_dep_req, in digital_tg_send_dep_res()
1248 ddev->chaining_skb = NULL; in digital_tg_send_dep_res()
1250 kfree_skb(ddev->saved_skb); in digital_tg_send_dep_res()
1251 ddev->saved_skb = NULL; in digital_tg_send_dep_res()
1257 static void digital_tg_send_psl_res_complete(struct nfc_digital_dev *ddev, in digital_tg_send_psl_res_complete() argument
1265 digital_tg_set_rf_tech(ddev, rf_tech); in digital_tg_send_psl_res_complete()
1267 digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH, rf_tech); in digital_tg_send_psl_res_complete()
1269 digital_tg_listen(ddev, 1500, digital_tg_recv_dep_req, NULL); in digital_tg_send_psl_res_complete()
1274 static int digital_tg_send_psl_res(struct nfc_digital_dev *ddev, u8 did, in digital_tg_send_psl_res() argument
1281 skb = digital_skb_alloc(ddev, sizeof(struct digital_psl_res)); in digital_tg_send_psl_res()
1293 digital_skb_push_dep_sod(ddev, skb); in digital_tg_send_psl_res()
1295 ddev->skb_add_crc(skb); in digital_tg_send_psl_res()
1297 ddev->curr_nfc_dep_pni = 0; in digital_tg_send_psl_res()
1299 rc = digital_tg_send_cmd(ddev, skb, 0, digital_tg_send_psl_res_complete, in digital_tg_send_psl_res()
1307 static void digital_tg_recv_psl_req(struct nfc_digital_dev *ddev, void *arg, in digital_tg_recv_psl_req() argument
1321 rc = ddev->skb_check_crc(resp); in digital_tg_recv_psl_req()
1327 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_tg_recv_psl_req()
1361 if (!payload_size || (payload_size > min(ddev->local_payload_max, in digital_tg_recv_psl_req()
1362 ddev->remote_payload_max))) { in digital_tg_recv_psl_req()
1367 ddev->local_payload_max = payload_size; in digital_tg_recv_psl_req()
1368 ddev->remote_payload_max = payload_size; in digital_tg_recv_psl_req()
1370 rc = digital_tg_send_psl_res(ddev, psl_req->did, rf_tech); in digital_tg_recv_psl_req()
1376 static void digital_tg_send_atr_res_complete(struct nfc_digital_dev *ddev, in digital_tg_send_atr_res_complete() argument
1382 digital_poll_next_tech(ddev); in digital_tg_send_atr_res_complete()
1390 ddev->atn_count = 0; in digital_tg_send_atr_res_complete()
1393 digital_tg_recv_psl_req(ddev, arg, resp); in digital_tg_send_atr_res_complete()
1395 digital_tg_recv_dep_req(ddev, arg, resp); in digital_tg_send_atr_res_complete()
1398 static int digital_tg_send_atr_res(struct nfc_digital_dev *ddev, in digital_tg_send_atr_res() argument
1407 gb = nfc_get_local_general_bytes(ddev->nfc_dev, &gb_len); in digital_tg_send_atr_res()
1411 skb = digital_skb_alloc(ddev, sizeof(struct digital_atr_res) + gb_len); in digital_tg_send_atr_res()
1425 ddev->local_payload_max = DIGITAL_PAYLOAD_SIZE_MAX; in digital_tg_send_atr_res()
1426 payload_bits = digital_payload_size_to_bits(ddev->local_payload_max); in digital_tg_send_atr_res()
1436 digital_skb_push_dep_sod(ddev, skb); in digital_tg_send_atr_res()
1438 ddev->skb_add_crc(skb); in digital_tg_send_atr_res()
1440 ddev->curr_nfc_dep_pni = 0; in digital_tg_send_atr_res()
1442 rc = digital_tg_send_cmd(ddev, skb, 999, in digital_tg_send_atr_res()
1450 void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg, in digital_tg_recv_atr_req() argument
1471 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_106A); in digital_tg_recv_atr_req()
1474 digital_tg_set_rf_tech(ddev, NFC_DIGITAL_RF_TECH_212F); in digital_tg_recv_atr_req()
1482 ddev->curr_protocol = NFC_PROTO_NFC_DEP_MASK; in digital_tg_recv_atr_req()
1484 rc = ddev->skb_check_crc(resp); in digital_tg_recv_atr_req()
1490 rc = digital_skb_pull_dep_sod(ddev, resp); in digital_tg_recv_atr_req()
1506 ddev->remote_payload_max = digital_payload_bits_to_size(payload_bits); in digital_tg_recv_atr_req()
1508 if (!ddev->remote_payload_max) { in digital_tg_recv_atr_req()
1513 ddev->did = atr_req->did; in digital_tg_recv_atr_req()
1515 rc = digital_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING, in digital_tg_recv_atr_req()
1520 rc = digital_tg_send_atr_res(ddev, atr_req); in digital_tg_recv_atr_req()
1526 poll_tech_count = ddev->poll_tech_count; in digital_tg_recv_atr_req()
1527 ddev->poll_tech_count = 0; in digital_tg_recv_atr_req()
1529 rc = nfc_tm_activated(ddev->nfc_dev, NFC_PROTO_NFC_DEP_MASK, in digital_tg_recv_atr_req()
1532 ddev->poll_tech_count = poll_tech_count; in digital_tg_recv_atr_req()
1539 digital_poll_next_tech(ddev); in digital_tg_recv_atr_req()