/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2012 Intel Corporation. All rights reserved. */ #ifndef __LOCAL_HCI_H #define __LOCAL_HCI_H #include struct gate_pipe_map { u8 gate; u8 pipe; }; struct hcp_message { u8 header; /* type -cmd,evt,rsp- + instruction */ u8 data[]; } __packed; struct hcp_packet { u8 header; /* cbit+pipe */ struct hcp_message message; } __packed; struct hcp_exec_waiter { wait_queue_head_t *wq; bool exec_complete; int exec_result; struct sk_buff *result_skb; }; struct hci_msg { struct list_head msg_l; struct sk_buff_head msg_frags; bool wait_response; data_exchange_cb_t cb; void *cb_context; unsigned long completion_delay; }; struct hci_create_pipe_params { u8 src_gate; u8 dest_host; u8 dest_gate; } __packed; struct hci_create_pipe_resp { u8 src_host; u8 src_gate; u8 dest_host; u8 dest_gate; u8 pipe; } __packed; struct hci_delete_pipe_noti { u8 pipe; } __packed; struct hci_all_pipe_cleared_noti { u8 host; } __packed; #define NFC_HCI_FRAGMENT 0x7f #define HCP_HEADER(type, instr) ((((type) & 0x03) << 6) | ((instr) & 0x3f)) #define HCP_MSG_GET_TYPE(header) ((header & 0xc0) >> 6) #define HCP_MSG_GET_CMD(header) (header & 0x3f) int nfc_hci_hcp_message_tx(struct nfc_hci_dev *hdev, u8 pipe, u8 type, u8 instruction, const u8 *payload, size_t payload_len, data_exchange_cb_t cb, void *cb_context, unsigned long completion_delay); void nfc_hci_hcp_message_rx(struct nfc_hci_dev *hdev, u8 pipe, u8 type, u8 instruction, struct sk_buff *skb); /* HCP headers */ #define NFC_HCI_HCP_PACKET_HEADER_LEN 1 #define NFC_HCI_HCP_MESSAGE_HEADER_LEN 1 #define NFC_HCI_HCP_HEADER_LEN 2 /* HCP types */ #define NFC_HCI_HCP_COMMAND 0x00 #define NFC_HCI_HCP_EVENT 0x01 #define NFC_HCI_HCP_RESPONSE 0x02 /* Generic commands */ #define NFC_HCI_ANY_SET_PARAMETER 0x01 #define NFC_HCI_ANY_GET_PARAMETER 0x02 #define NFC_HCI_ANY_OPEN_PIPE 0x03 #define NFC_HCI_ANY_CLOSE_PIPE 0x04 /* Reader RF commands */ #define NFC_HCI_WR_XCHG_DATA 0x10 /* Admin commands */ #define NFC_HCI_ADM_CREATE_PIPE 0x10 #define NFC_HCI_ADM_DELETE_PIPE 0x11 #define NFC_HCI_ADM_NOTIFY_PIPE_CREATED 0x12 #define NFC_HCI_ADM_NOTIFY_PIPE_DELETED 0x13 #define NFC_HCI_ADM_CLEAR_ALL_PIPE 0x14 #define NFC_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15 /* Generic responses */ #define NFC_HCI_ANY_OK 0x00 #define NFC_HCI_ANY_E_NOT_CONNECTED 0x01 #define NFC_HCI_ANY_E_CMD_PAR_UNKNOWN 0x02 #define NFC_HCI_ANY_E_NOK 0x03 #define NFC_HCI_ANY_E_PIPES_FULL 0x04 #define NFC_HCI_ANY_E_REG_PAR_UNKNOWN 0x05 #define NFC_HCI_ANY_E_PIPE_NOT_OPENED 0x06 #define NFC_HCI_ANY_E_CMD_NOT_SUPPORTED 0x07 #define NFC_HCI_ANY_E_INHIBITED 0x08 #define NFC_HCI_ANY_E_TIMEOUT 0x09 #define NFC_HCI_ANY_E_REG_ACCESS_DENIED 0x0a #define NFC_HCI_ANY_E_PIPE_ACCESS_DENIED 0x0b #endif /* __LOCAL_HCI_H */