NFC: Remove the rf mode parameter from the DEP link up routine
When calling nfc_dep_link_up, we implicitely are in initiator mode. Which means we also can provide the general bytes as a function argument, as all drivers will eventually request them. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
9dda50f4c9
commit
47807d3dbb
@ -1340,21 +1340,15 @@ static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int pn533_dep_link_up(struct nfc_dev *nfc_dev, int target_idx,
|
static int pn533_dep_link_up(struct nfc_dev *nfc_dev, int target_idx,
|
||||||
u8 comm_mode, u8 rf_mode)
|
u8 comm_mode, u8* gb, size_t gb_len)
|
||||||
{
|
{
|
||||||
struct pn533 *dev = nfc_get_drvdata(nfc_dev);
|
struct pn533 *dev = nfc_get_drvdata(nfc_dev);
|
||||||
struct pn533_cmd_jump_dep *cmd;
|
struct pn533_cmd_jump_dep *cmd;
|
||||||
u8 cmd_len, local_gt_len, *local_gt;
|
u8 cmd_len;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
nfc_dev_dbg(&dev->interface->dev, "%s", __func__);
|
nfc_dev_dbg(&dev->interface->dev, "%s", __func__);
|
||||||
|
|
||||||
if (rf_mode == NFC_RF_TARGET) {
|
|
||||||
nfc_dev_err(&dev->interface->dev, "Target mode not supported");
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (dev->poll_mod_count) {
|
if (dev->poll_mod_count) {
|
||||||
nfc_dev_err(&dev->interface->dev,
|
nfc_dev_err(&dev->interface->dev,
|
||||||
"Cannot bring the DEP link up while polling");
|
"Cannot bring the DEP link up while polling");
|
||||||
@ -1367,11 +1361,7 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, int target_idx,
|
|||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
local_gt = nfc_get_local_general_bytes(dev->nfc_dev, &local_gt_len);
|
cmd_len = sizeof(struct pn533_cmd_jump_dep) + gb_len;
|
||||||
if (local_gt_len > NFC_MAX_GT_LEN)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
cmd_len = sizeof(struct pn533_cmd_jump_dep) + local_gt_len;
|
|
||||||
cmd = kzalloc(cmd_len, GFP_KERNEL);
|
cmd = kzalloc(cmd_len, GFP_KERNEL);
|
||||||
if (cmd == NULL)
|
if (cmd == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -1380,9 +1370,9 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, int target_idx,
|
|||||||
|
|
||||||
cmd->active = !comm_mode;
|
cmd->active = !comm_mode;
|
||||||
cmd->baud = 0;
|
cmd->baud = 0;
|
||||||
if (local_gt != NULL) {
|
if (gb != NULL && gb_len > 0) {
|
||||||
cmd->next = 4; /* We have some Gi */
|
cmd->next = 4; /* We have some Gi */
|
||||||
memcpy(cmd->gt, local_gt, local_gt_len);
|
memcpy(cmd->gt, gb, gb_len);
|
||||||
} else {
|
} else {
|
||||||
cmd->next = 0;
|
cmd->next = 0;
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,8 @@ struct nfc_ops {
|
|||||||
int (*dev_down)(struct nfc_dev *dev);
|
int (*dev_down)(struct nfc_dev *dev);
|
||||||
int (*start_poll)(struct nfc_dev *dev, u32 protocols);
|
int (*start_poll)(struct nfc_dev *dev, u32 protocols);
|
||||||
void (*stop_poll)(struct nfc_dev *dev);
|
void (*stop_poll)(struct nfc_dev *dev);
|
||||||
int (*dep_link_up)(struct nfc_dev *dev, int target_idx,
|
int (*dep_link_up)(struct nfc_dev *dev, int target_idx, u8 comm_mode,
|
||||||
u8 comm_mode, u8 rf_mode);
|
u8 *gb, size_t gb_len);
|
||||||
int (*dep_link_down)(struct nfc_dev *dev);
|
int (*dep_link_down)(struct nfc_dev *dev);
|
||||||
int (*activate_target)(struct nfc_dev *dev, u32 target_idx,
|
int (*activate_target)(struct nfc_dev *dev, u32 target_idx,
|
||||||
u32 protocol);
|
u32 protocol);
|
||||||
@ -179,8 +179,6 @@ struct sk_buff *nfc_alloc_recv_skb(unsigned int size, gfp_t gfp);
|
|||||||
int nfc_set_remote_general_bytes(struct nfc_dev *dev,
|
int nfc_set_remote_general_bytes(struct nfc_dev *dev,
|
||||||
u8 *gt, u8 gt_len);
|
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);
|
||||||
|
|
||||||
|
@ -181,13 +181,13 @@ error:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nfc_dep_link_up(struct nfc_dev *dev, int target_index,
|
int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode)
|
||||||
u8 comm_mode, u8 rf_mode)
|
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
u8 *gb;
|
||||||
|
size_t gb_len;
|
||||||
|
|
||||||
pr_debug("dev_name=%s comm:%d rf:%d\n",
|
pr_debug("dev_name=%s comm %d\n", dev_name(&dev->dev), comm_mode);
|
||||||
dev_name(&dev->dev), comm_mode, rf_mode);
|
|
||||||
|
|
||||||
if (!dev->ops->dep_link_up)
|
if (!dev->ops->dep_link_up)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
@ -204,7 +204,13 @@ int nfc_dep_link_up(struct nfc_dev *dev, int target_index,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = dev->ops->dep_link_up(dev, target_index, comm_mode, rf_mode);
|
gb = nfc_llcp_general_bytes(dev, &gb_len);
|
||||||
|
if (gb_len > NFC_MAX_GT_LEN) {
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = dev->ops->dep_link_up(dev, target_index, comm_mode, gb, gb_len);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
device_unlock(&dev->dev);
|
device_unlock(&dev->dev);
|
||||||
@ -367,12 +373,6 @@ int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nfc_set_remote_general_bytes);
|
EXPORT_SYMBOL(nfc_set_remote_general_bytes);
|
||||||
|
|
||||||
u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, u8 *gt_len)
|
|
||||||
{
|
|
||||||
return nfc_llcp_general_bytes(dev, gt_len);
|
|
||||||
}
|
|
||||||
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
|
||||||
*
|
*
|
||||||
|
@ -281,7 +281,7 @@ void nfc_llcp_put_ssap(struct nfc_llcp_local *local, u8 ssap)
|
|||||||
mutex_unlock(&local->sdp_lock);
|
mutex_unlock(&local->sdp_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, u8 *general_bytes_len)
|
u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len)
|
||||||
{
|
{
|
||||||
struct nfc_llcp_local *local;
|
struct nfc_llcp_local *local;
|
||||||
|
|
||||||
|
@ -542,13 +542,12 @@ static int nfc_genl_dep_link_up(struct sk_buff *skb, struct genl_info *info)
|
|||||||
struct nfc_dev *dev;
|
struct nfc_dev *dev;
|
||||||
int rc, tgt_idx;
|
int rc, tgt_idx;
|
||||||
u32 idx;
|
u32 idx;
|
||||||
u8 comm, rf;
|
u8 comm;
|
||||||
|
|
||||||
pr_debug("DEP link up\n");
|
pr_debug("DEP link up\n");
|
||||||
|
|
||||||
if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
|
if (!info->attrs[NFC_ATTR_DEVICE_INDEX] ||
|
||||||
!info->attrs[NFC_ATTR_COMM_MODE] ||
|
!info->attrs[NFC_ATTR_COMM_MODE])
|
||||||
!info->attrs[NFC_ATTR_RF_MODE])
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
|
idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
|
||||||
@ -558,19 +557,15 @@ static int nfc_genl_dep_link_up(struct sk_buff *skb, struct genl_info *info)
|
|||||||
tgt_idx = nla_get_u32(info->attrs[NFC_ATTR_TARGET_INDEX]);
|
tgt_idx = nla_get_u32(info->attrs[NFC_ATTR_TARGET_INDEX]);
|
||||||
|
|
||||||
comm = nla_get_u8(info->attrs[NFC_ATTR_COMM_MODE]);
|
comm = nla_get_u8(info->attrs[NFC_ATTR_COMM_MODE]);
|
||||||
rf = nla_get_u8(info->attrs[NFC_ATTR_RF_MODE]);
|
|
||||||
|
|
||||||
if (comm != NFC_COMM_ACTIVE && comm != NFC_COMM_PASSIVE)
|
if (comm != NFC_COMM_ACTIVE && comm != NFC_COMM_PASSIVE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (rf != NFC_RF_INITIATOR && comm != NFC_RF_TARGET)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
dev = nfc_get_device(idx);
|
dev = nfc_get_device(idx);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
rc = nfc_dep_link_up(dev, tgt_idx, comm, rf);
|
rc = nfc_dep_link_up(dev, tgt_idx, comm);
|
||||||
|
|
||||||
nfc_put_device(dev);
|
nfc_put_device(dev);
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
|
|||||||
int nfc_llcp_register_device(struct nfc_dev *dev);
|
int nfc_llcp_register_device(struct nfc_dev *dev);
|
||||||
void nfc_llcp_unregister_device(struct nfc_dev *dev);
|
void nfc_llcp_unregister_device(struct nfc_dev *dev);
|
||||||
int nfc_llcp_set_remote_gb(struct nfc_dev *dev, u8 *gb, u8 gb_len);
|
int nfc_llcp_set_remote_gb(struct nfc_dev *dev, u8 *gb, u8 gb_len);
|
||||||
u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, u8 *general_bytes_len);
|
u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len);
|
||||||
int __init nfc_llcp_init(void);
|
int __init nfc_llcp_init(void);
|
||||||
void nfc_llcp_exit(void);
|
void nfc_llcp_exit(void);
|
||||||
|
|
||||||
@ -160,8 +160,7 @@ int nfc_start_poll(struct nfc_dev *dev, u32 protocols);
|
|||||||
|
|
||||||
int nfc_stop_poll(struct nfc_dev *dev);
|
int nfc_stop_poll(struct nfc_dev *dev);
|
||||||
|
|
||||||
int nfc_dep_link_up(struct nfc_dev *dev, int target_idx,
|
int nfc_dep_link_up(struct nfc_dev *dev, int target_idx, u8 comm_mode);
|
||||||
u8 comm_mode, u8 rf_mode);
|
|
||||||
|
|
||||||
int nfc_dep_link_down(struct nfc_dev *dev);
|
int nfc_dep_link_down(struct nfc_dev *dev);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user