|
|
@@ -185,11 +185,16 @@ exit:
|
|
|
|
|
|
static void nci_add_rx_data_frag(struct nci_dev *ndev,
|
|
|
struct sk_buff *skb,
|
|
|
- __u8 pbf)
|
|
|
+ __u8 pbf, __u8 status)
|
|
|
{
|
|
|
int reassembly_len;
|
|
|
int err = 0;
|
|
|
|
|
|
+ if (status) {
|
|
|
+ err = status;
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
+
|
|
|
if (ndev->rx_data_reassembly) {
|
|
|
reassembly_len = ndev->rx_data_reassembly->len;
|
|
|
|
|
|
@@ -241,6 +246,7 @@ exit:
|
|
|
void nci_rx_data_packet(struct nci_dev *ndev, struct sk_buff *skb)
|
|
|
{
|
|
|
__u8 pbf = nci_pbf(skb->data);
|
|
|
+ __u8 status = 0;
|
|
|
|
|
|
pr_debug("len %d\n", skb->len);
|
|
|
|
|
|
@@ -258,8 +264,9 @@ void nci_rx_data_packet(struct nci_dev *ndev, struct sk_buff *skb)
|
|
|
ndev->target_active_prot == NFC_PROTO_ISO15693) {
|
|
|
/* frame I/F => remove the status byte */
|
|
|
pr_debug("frame I/F => remove the status byte\n");
|
|
|
+ status = skb->data[skb->len - 1];
|
|
|
skb_trim(skb, (skb->len - 1));
|
|
|
}
|
|
|
|
|
|
- nci_add_rx_data_frag(ndev, skb, pbf);
|
|
|
+ nci_add_rx_data_frag(ndev, skb, pbf, nci_to_errno(status));
|
|
|
}
|