NFC: xmit from hci ops must return 0 or negative

xmit callback provided by a driver encapsulates upper layers
data and sends it to the hardware. So, HCI does not know the
exact amount of data being sent and thus can't handle partially
sent frames properly.

Therefore, the driver must return 0 for completely sent frame or
negative for failure.

Signed-off-by: Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>
Acked-by: Eric Lapuyade <eric.lapuyade@intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Waldemar Rymarkiewicz 2012-09-20 08:59:10 +02:00 committed by Samuel Ortiz
parent 5adf54de97
commit 96e324024b
2 changed files with 11 additions and 2 deletions

View File

@ -235,8 +235,12 @@ static int pn544_hci_i2c_write(struct i2c_client *client, u8 *buf, int len)
r = i2c_master_send(client, buf, len); r = i2c_master_send(client, buf, len);
} }
if (r >= 0 && r != len) if (r >= 0) {
r = -EREMOTEIO; if (r != len)
return -EREMOTEIO;
else
return 0;
}
return r; return r;
} }

View File

@ -30,6 +30,11 @@ struct nfc_hci_ops {
int (*open) (struct nfc_hci_dev *hdev); int (*open) (struct nfc_hci_dev *hdev);
void (*close) (struct nfc_hci_dev *hdev); void (*close) (struct nfc_hci_dev *hdev);
int (*hci_ready) (struct nfc_hci_dev *hdev); int (*hci_ready) (struct nfc_hci_dev *hdev);
/*
* xmit must always send the complete buffer before
* returning. Returned result must be 0 for success
* or negative for failure.
*/
int (*xmit) (struct nfc_hci_dev *hdev, struct sk_buff *skb); int (*xmit) (struct nfc_hci_dev *hdev, struct sk_buff *skb);
int (*start_poll) (struct nfc_hci_dev *hdev, int (*start_poll) (struct nfc_hci_dev *hdev,
u32 im_protocols, u32 tm_protocols); u32 im_protocols, u32 tm_protocols);