xref: /kernel/linux/linux-6.6/net/nfc/hci/hci.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2012  Intel Corporation. All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __LOCAL_HCI_H
762306a36Sopenharmony_ci#define __LOCAL_HCI_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <net/nfc/hci.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct gate_pipe_map {
1262306a36Sopenharmony_ci	u8 gate;
1362306a36Sopenharmony_ci	u8 pipe;
1462306a36Sopenharmony_ci};
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistruct hcp_message {
1762306a36Sopenharmony_ci	u8 header;		/* type -cmd,evt,rsp- + instruction */
1862306a36Sopenharmony_ci	u8 data[];
1962306a36Sopenharmony_ci} __packed;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistruct hcp_packet {
2262306a36Sopenharmony_ci	u8 header;		/* cbit+pipe */
2362306a36Sopenharmony_ci	struct hcp_message message;
2462306a36Sopenharmony_ci} __packed;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct hcp_exec_waiter {
2762306a36Sopenharmony_ci	wait_queue_head_t *wq;
2862306a36Sopenharmony_ci	bool exec_complete;
2962306a36Sopenharmony_ci	int exec_result;
3062306a36Sopenharmony_ci	struct sk_buff *result_skb;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct hci_msg {
3462306a36Sopenharmony_ci	struct list_head msg_l;
3562306a36Sopenharmony_ci	struct sk_buff_head msg_frags;
3662306a36Sopenharmony_ci	bool wait_response;
3762306a36Sopenharmony_ci	data_exchange_cb_t cb;
3862306a36Sopenharmony_ci	void *cb_context;
3962306a36Sopenharmony_ci	unsigned long completion_delay;
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistruct hci_create_pipe_params {
4362306a36Sopenharmony_ci	u8 src_gate;
4462306a36Sopenharmony_ci	u8 dest_host;
4562306a36Sopenharmony_ci	u8 dest_gate;
4662306a36Sopenharmony_ci} __packed;
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistruct hci_create_pipe_resp {
4962306a36Sopenharmony_ci	u8 src_host;
5062306a36Sopenharmony_ci	u8 src_gate;
5162306a36Sopenharmony_ci	u8 dest_host;
5262306a36Sopenharmony_ci	u8 dest_gate;
5362306a36Sopenharmony_ci	u8 pipe;
5462306a36Sopenharmony_ci} __packed;
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistruct hci_delete_pipe_noti {
5762306a36Sopenharmony_ci	u8 pipe;
5862306a36Sopenharmony_ci} __packed;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct hci_all_pipe_cleared_noti {
6162306a36Sopenharmony_ci	u8 host;
6262306a36Sopenharmony_ci} __packed;
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define NFC_HCI_FRAGMENT	0x7f
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci#define HCP_HEADER(type, instr) ((((type) & 0x03) << 6) | ((instr) & 0x3f))
6762306a36Sopenharmony_ci#define HCP_MSG_GET_TYPE(header) ((header & 0xc0) >> 6)
6862306a36Sopenharmony_ci#define HCP_MSG_GET_CMD(header) (header & 0x3f)
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciint nfc_hci_hcp_message_tx(struct nfc_hci_dev *hdev, u8 pipe,
7162306a36Sopenharmony_ci			   u8 type, u8 instruction,
7262306a36Sopenharmony_ci			   const u8 *payload, size_t payload_len,
7362306a36Sopenharmony_ci			   data_exchange_cb_t cb, void *cb_context,
7462306a36Sopenharmony_ci			   unsigned long completion_delay);
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_civoid nfc_hci_hcp_message_rx(struct nfc_hci_dev *hdev, u8 pipe, u8 type,
7762306a36Sopenharmony_ci			    u8 instruction, struct sk_buff *skb);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/* HCP headers */
8062306a36Sopenharmony_ci#define NFC_HCI_HCP_PACKET_HEADER_LEN	1
8162306a36Sopenharmony_ci#define NFC_HCI_HCP_MESSAGE_HEADER_LEN	1
8262306a36Sopenharmony_ci#define NFC_HCI_HCP_HEADER_LEN		2
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci/* HCP types */
8562306a36Sopenharmony_ci#define NFC_HCI_HCP_COMMAND	0x00
8662306a36Sopenharmony_ci#define NFC_HCI_HCP_EVENT	0x01
8762306a36Sopenharmony_ci#define NFC_HCI_HCP_RESPONSE	0x02
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci/* Generic commands */
9062306a36Sopenharmony_ci#define NFC_HCI_ANY_SET_PARAMETER	0x01
9162306a36Sopenharmony_ci#define NFC_HCI_ANY_GET_PARAMETER	0x02
9262306a36Sopenharmony_ci#define NFC_HCI_ANY_OPEN_PIPE		0x03
9362306a36Sopenharmony_ci#define NFC_HCI_ANY_CLOSE_PIPE		0x04
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci/* Reader RF commands */
9662306a36Sopenharmony_ci#define NFC_HCI_WR_XCHG_DATA		0x10
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci/* Admin commands */
9962306a36Sopenharmony_ci#define NFC_HCI_ADM_CREATE_PIPE			0x10
10062306a36Sopenharmony_ci#define NFC_HCI_ADM_DELETE_PIPE			0x11
10162306a36Sopenharmony_ci#define NFC_HCI_ADM_NOTIFY_PIPE_CREATED		0x12
10262306a36Sopenharmony_ci#define NFC_HCI_ADM_NOTIFY_PIPE_DELETED		0x13
10362306a36Sopenharmony_ci#define NFC_HCI_ADM_CLEAR_ALL_PIPE		0x14
10462306a36Sopenharmony_ci#define NFC_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED	0x15
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci/* Generic responses */
10762306a36Sopenharmony_ci#define NFC_HCI_ANY_OK				0x00
10862306a36Sopenharmony_ci#define NFC_HCI_ANY_E_NOT_CONNECTED		0x01
10962306a36Sopenharmony_ci#define NFC_HCI_ANY_E_CMD_PAR_UNKNOWN		0x02
11062306a36Sopenharmony_ci#define NFC_HCI_ANY_E_NOK			0x03
11162306a36Sopenharmony_ci#define NFC_HCI_ANY_E_PIPES_FULL		0x04
11262306a36Sopenharmony_ci#define NFC_HCI_ANY_E_REG_PAR_UNKNOWN		0x05
11362306a36Sopenharmony_ci#define NFC_HCI_ANY_E_PIPE_NOT_OPENED		0x06
11462306a36Sopenharmony_ci#define NFC_HCI_ANY_E_CMD_NOT_SUPPORTED		0x07
11562306a36Sopenharmony_ci#define NFC_HCI_ANY_E_INHIBITED			0x08
11662306a36Sopenharmony_ci#define NFC_HCI_ANY_E_TIMEOUT			0x09
11762306a36Sopenharmony_ci#define NFC_HCI_ANY_E_REG_ACCESS_DENIED		0x0a
11862306a36Sopenharmony_ci#define NFC_HCI_ANY_E_PIPE_ACCESS_DENIED	0x0b
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci#endif /* __LOCAL_HCI_H */
121