Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 759afb8d authored by Christophe Ricard's avatar Christophe Ricard Committed by Samuel Ortiz
Browse files

NFC: nci: Add nci_prop_cmd allowing to send proprietary nci cmd



Handle allowing to send proprietary nci commands anywhere in the nci
state machine.

Signed-off-by: default avatarChristophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent c39daeee
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -275,6 +275,8 @@ int nci_request(struct nci_dev *ndev,
		void (*req)(struct nci_dev *ndev,
			    unsigned long opt),
		unsigned long opt, __u32 timeout);
int nci_prop_cmd(struct nci_dev *ndev, __u8 oid, size_t len, __u8 *payload);

int nci_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
int nci_set_config(struct nci_dev *ndev, __u8 id, size_t len, __u8 *val);

+26 −0
Original line number Diff line number Diff line
@@ -324,6 +324,32 @@ static void nci_rf_deactivate_req(struct nci_dev *ndev, unsigned long opt)
		     sizeof(struct nci_rf_deactivate_cmd), &cmd);
}

struct nci_prop_cmd_param {
	__u16 opcode;
	size_t len;
	__u8 *payload;
};

static void nci_prop_cmd_req(struct nci_dev *ndev, unsigned long opt)
{
	struct nci_prop_cmd_param *param = (struct nci_prop_cmd_param *)opt;

	nci_send_cmd(ndev, param->opcode, param->len, param->payload);
}

int nci_prop_cmd(struct nci_dev *ndev, __u8 oid, size_t len, __u8 *payload)
{
	struct nci_prop_cmd_param param;

	param.opcode = nci_opcode_pack(NCI_GID_PROPRIETARY, oid);
	param.len = len;
	param.payload = payload;

	return __nci_request(ndev, nci_prop_cmd_req, (unsigned long)&param,
			     msecs_to_jiffies(NCI_CMD_TIMEOUT));
}
EXPORT_SYMBOL(nci_prop_cmd);

static int nci_open_device(struct nci_dev *ndev)
{
	int rc = 0;