|
@@ -183,6 +183,36 @@ free_msg:
|
|
|
return -EMSGSIZE;
|
|
|
}
|
|
|
|
|
|
+int nfc_genl_target_lost(struct nfc_dev *dev, u32 target_idx)
|
|
|
+{
|
|
|
+ struct sk_buff *msg;
|
|
|
+ void *hdr;
|
|
|
+
|
|
|
+ msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
|
|
|
+ if (!msg)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ hdr = genlmsg_put(msg, 0, 0, &nfc_genl_family, 0,
|
|
|
+ NFC_EVENT_TARGET_LOST);
|
|
|
+ if (!hdr)
|
|
|
+ goto free_msg;
|
|
|
+
|
|
|
+ NLA_PUT_STRING(msg, NFC_ATTR_DEVICE_NAME, nfc_device_name(dev));
|
|
|
+ NLA_PUT_U32(msg, NFC_ATTR_TARGET_INDEX, target_idx);
|
|
|
+
|
|
|
+ genlmsg_end(msg, hdr);
|
|
|
+
|
|
|
+ genlmsg_multicast(msg, 0, nfc_genl_event_mcgrp.id, GFP_KERNEL);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+nla_put_failure:
|
|
|
+ genlmsg_cancel(msg, hdr);
|
|
|
+free_msg:
|
|
|
+ nlmsg_free(msg);
|
|
|
+ return -EMSGSIZE;
|
|
|
+}
|
|
|
+
|
|
|
int nfc_genl_device_added(struct nfc_dev *dev)
|
|
|
{
|
|
|
struct sk_buff *msg;
|