NFC: Add target mode activation netlink event
Userspace gets a netlink event upon target mode activation. The LLCP layer is also signaled when we get an ATR_REQ in order to get the remote general bytes. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
@@ -260,6 +260,10 @@ struct pn533_cmd_jump_dep_response {
|
||||
#define PN533_INIT_TARGET_PASSIVE 0x1
|
||||
#define PN533_INIT_TARGET_DEP 0x2
|
||||
|
||||
#define PN533_INIT_TARGET_RESP_FRAME_MASK 0x3
|
||||
#define PN533_INIT_TARGET_RESP_ACTIVE 0x1
|
||||
#define PN533_INIT_TARGET_RESP_DEP 0x4
|
||||
|
||||
struct pn533_cmd_init_target {
|
||||
u8 mode;
|
||||
u8 mifare[6];
|
||||
@@ -1128,10 +1132,13 @@ static int pn533_init_target_frame(struct pn533_frame *frame,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ATR_REQ_GB_OFFSET 17
|
||||
static int pn533_init_target_complete(struct pn533 *dev, void *arg,
|
||||
u8 *params, int params_len)
|
||||
{
|
||||
struct pn533_cmd_init_target_response *resp;
|
||||
u8 frame, comm_mode = NFC_COMM_PASSIVE, *gb;
|
||||
size_t gb_len;
|
||||
|
||||
nfc_dev_dbg(&dev->interface->dev, "%s", __func__);
|
||||
|
||||
@@ -1143,11 +1150,27 @@ static int pn533_init_target_complete(struct pn533 *dev, void *arg,
|
||||
return params_len;
|
||||
}
|
||||
|
||||
if (params_len < ATR_REQ_GB_OFFSET + 1)
|
||||
return -EINVAL;
|
||||
|
||||
resp = (struct pn533_cmd_init_target_response *) params;
|
||||
|
||||
nfc_dev_dbg(&dev->interface->dev, "Target mode 0x%x\n", resp->mode);
|
||||
nfc_dev_dbg(&dev->interface->dev, "Target mode 0x%x param len %d\n",
|
||||
resp->mode, params_len);
|
||||
|
||||
return 0;
|
||||
frame = resp->mode & PN533_INIT_TARGET_RESP_FRAME_MASK;
|
||||
if (frame == PN533_INIT_TARGET_RESP_ACTIVE)
|
||||
comm_mode = NFC_COMM_ACTIVE;
|
||||
|
||||
/* Again, only DEP */
|
||||
if ((resp->mode & PN533_INIT_TARGET_RESP_DEP) == 0)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
gb = resp->cmd + ATR_REQ_GB_OFFSET;
|
||||
gb_len = params_len - (ATR_REQ_GB_OFFSET + 1);
|
||||
|
||||
return nfc_tm_activated(dev->nfc_dev, NFC_PROTO_NFC_DEP_MASK,
|
||||
comm_mode, gb, gb_len);
|
||||
}
|
||||
|
||||
static int pn533_init_target(struct nfc_dev *nfc_dev, u32 protocols)
|
||||
|
Reference in New Issue
Block a user