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