Lines Matching +full:rx +full:- +full:status +full:- +full:len
1 // SPDX-License-Identifier: GPL-2.0-only
39 cb = conn_info->data_exchange_cb; in nci_data_exchange_complete()
40 cb_context = conn_info->data_exchange_cb_context; in nci_data_exchange_complete()
42 pr_debug("len %d, err %d\n", skb ? skb->len : 0, err); in nci_data_exchange_complete()
45 timer_delete_sync(&ndev->data_timer); in nci_data_exchange_complete()
46 clear_bit(NCI_DATA_EXCHANGE_TO, &ndev->flags); in nci_data_exchange_complete()
52 pr_err("no rx callback, dropping rx data...\n"); in nci_data_exchange_complete()
59 clear_bit(NCI_DATA_EXCHANGE, &ndev->flags); in nci_data_exchange_complete()
62 /* ----------------- NCI TX Data ----------------- */
70 int plen = skb->len; in nci_push_data_hdr()
73 hdr->conn_id = conn_id; in nci_push_data_hdr()
74 hdr->rfu = 0; in nci_push_data_hdr()
75 hdr->plen = plen; in nci_push_data_hdr()
87 return -EPROTO; in nci_conn_max_data_pkt_payload_size()
89 return conn_info->max_pkt_payload_len; in nci_conn_max_data_pkt_payload_size()
97 int total_len = skb->len; in nci_queue_tx_data_frags()
98 const unsigned char *data = skb->data; in nci_queue_tx_data_frags()
109 rc = -EPROTO; in nci_queue_tx_data_frags()
117 min_t(int, total_len, conn_info->max_pkt_payload_len); in nci_queue_tx_data_frags()
123 rc = -ENOMEM; in nci_queue_tx_data_frags()
139 total_len -= frag_len; in nci_queue_tx_data_frags()
146 spin_lock_irqsave(&ndev->tx_q.lock, flags); in nci_queue_tx_data_frags()
149 __skb_queue_tail(&ndev->tx_q, skb_frag); in nci_queue_tx_data_frags()
151 spin_unlock_irqrestore(&ndev->tx_q.lock, flags); in nci_queue_tx_data_frags()
172 pr_debug("conn_id 0x%x, plen %d\n", conn_id, skb->len); in nci_send_data()
176 rc = -EPROTO; in nci_send_data()
181 if (skb->len <= conn_info->max_pkt_payload_len) { in nci_send_data()
185 skb_queue_tail(&ndev->tx_q, skb); in nci_send_data()
195 ndev->cur_conn_id = conn_id; in nci_send_data()
196 queue_work(ndev->tx_wq, &ndev->tx_work); in nci_send_data()
208 /* ----------------- NCI RX Data ----------------- */
212 __u8 pbf, __u8 conn_id, __u8 status) in nci_add_rx_data_frag() argument
217 if (status) { in nci_add_rx_data_frag()
218 err = status; in nci_add_rx_data_frag()
222 if (ndev->rx_data_reassembly) { in nci_add_rx_data_frag()
223 reassembly_len = ndev->rx_data_reassembly->len; in nci_add_rx_data_frag()
227 pr_err("error adding room for accumulated rx data\n"); in nci_add_rx_data_frag()
232 kfree_skb(ndev->rx_data_reassembly); in nci_add_rx_data_frag()
233 ndev->rx_data_reassembly = NULL; in nci_add_rx_data_frag()
235 err = -ENOMEM; in nci_add_rx_data_frag()
241 ndev->rx_data_reassembly->data, in nci_add_rx_data_frag()
245 kfree_skb(ndev->rx_data_reassembly); in nci_add_rx_data_frag()
246 ndev->rx_data_reassembly = NULL; in nci_add_rx_data_frag()
251 ndev->rx_data_reassembly = skb; in nci_add_rx_data_frag()
256 if (ndev->nfc_dev->rf_mode == NFC_RF_TARGET) { in nci_add_rx_data_frag()
258 err = nfc_tm_data_received(ndev->nfc_dev, skb); in nci_add_rx_data_frag()
266 /* Rx Data packet */
269 __u8 pbf = nci_pbf(skb->data); in nci_rx_data_packet()
270 __u8 status = 0; in nci_rx_data_packet() local
271 __u8 conn_id = nci_conn_id(skb->data); in nci_rx_data_packet()
274 pr_debug("len %d\n", skb->len); in nci_rx_data_packet()
276 pr_debug("NCI RX: MT=data, PBF=%d, conn_id=%d, plen=%d\n", in nci_rx_data_packet()
277 nci_pbf(skb->data), in nci_rx_data_packet()
278 nci_conn_id(skb->data), in nci_rx_data_packet()
279 nci_plen(skb->data)); in nci_rx_data_packet()
281 conn_info = nci_get_conn_info_by_conn_id(ndev, nci_conn_id(skb->data)); in nci_rx_data_packet()
290 if (ndev->target_active_prot == NFC_PROTO_MIFARE || in nci_rx_data_packet()
291 ndev->target_active_prot == NFC_PROTO_JEWEL || in nci_rx_data_packet()
292 ndev->target_active_prot == NFC_PROTO_FELICA || in nci_rx_data_packet()
293 ndev->target_active_prot == NFC_PROTO_ISO15693) { in nci_rx_data_packet()
294 /* frame I/F => remove the status byte */ in nci_rx_data_packet()
295 pr_debug("frame I/F => remove the status byte\n"); in nci_rx_data_packet()
296 status = skb->data[skb->len - 1]; in nci_rx_data_packet()
297 skb_trim(skb, (skb->len - 1)); in nci_rx_data_packet()
300 nci_add_rx_data_frag(ndev, skb, pbf, conn_id, nci_to_errno(status)); in nci_rx_data_packet()