Commit 541d920b authored by Samuel Ortiz's avatar Samuel Ortiz Committed by John W. Linville

NFC: Set and get DEP general bytes

Without an API for setting and getting the local and remote general bytes,
drivers won't be able to properly establish a DEP link.
This API also allows them to propagate the remote general bytes they get
from the DEP link establishment up to the LLCP layer.
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1ed28f61
...@@ -1121,6 +1121,7 @@ static int pn533_activate_target_nfcdep(struct pn533 *dev) ...@@ -1121,6 +1121,7 @@ static int pn533_activate_target_nfcdep(struct pn533 *dev)
{ {
struct pn533_cmd_activate_param param; struct pn533_cmd_activate_param param;
struct pn533_cmd_activate_response *resp; struct pn533_cmd_activate_response *resp;
u16 gt_len;
int rc; int rc;
nfc_dev_dbg(&dev->interface->dev, "%s", __func__); nfc_dev_dbg(&dev->interface->dev, "%s", __func__);
...@@ -1146,7 +1147,11 @@ static int pn533_activate_target_nfcdep(struct pn533 *dev) ...@@ -1146,7 +1147,11 @@ static int pn533_activate_target_nfcdep(struct pn533 *dev)
if (rc != PN533_CMD_RET_SUCCESS) if (rc != PN533_CMD_RET_SUCCESS)
return -EIO; return -EIO;
return 0; /* ATR_RES general bytes are located at offset 16 */
gt_len = PN533_FRAME_CMD_PARAMS_LEN(dev->in_frame) - 16;
rc = nfc_set_remote_general_bytes(dev->nfc_dev, resp->gt, gt_len);
return rc;
} }
static int pn533_activate_target(struct nfc_dev *nfc_dev, u32 target_idx, static int pn533_activate_target(struct nfc_dev *nfc_dev, u32 target_idx,
......
...@@ -170,6 +170,11 @@ struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk, ...@@ -170,6 +170,11 @@ struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk,
unsigned int *err); unsigned int *err);
struct sk_buff *nfc_alloc_recv_skb(unsigned int size, gfp_t gfp); struct sk_buff *nfc_alloc_recv_skb(unsigned int size, gfp_t gfp);
int nfc_set_remote_general_bytes(struct nfc_dev *dev,
u8 *gt, u8 gt_len);
u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, u8 *gt_len);
int nfc_targets_found(struct nfc_dev *dev, struct nfc_target *targets, int nfc_targets_found(struct nfc_dev *dev, struct nfc_target *targets,
int ntargets); int ntargets);
......
...@@ -352,6 +352,24 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, ...@@ -352,6 +352,24 @@ int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx,
return rc; return rc;
} }
int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len)
{
pr_debug("dev_name=%s gb_len=%d\n",
dev_name(&dev->dev), gb_len);
if (gb_len > NFC_MAX_GT_LEN)
return -EINVAL;
return 0;
}
EXPORT_SYMBOL(nfc_set_remote_general_bytes);
u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, u8 *gt_len)
{
return NULL;
}
EXPORT_SYMBOL(nfc_get_local_general_bytes);
/** /**
* nfc_alloc_send_skb - allocate a skb for data exchange responses * nfc_alloc_send_skb - allocate a skb for data exchange responses
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment