1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2012 Intel Corporation. All rights reserved. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __LOCAL_HCI_H 7*4882a593Smuzhiyun #define __LOCAL_HCI_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <net/nfc/hci.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct gate_pipe_map { 12*4882a593Smuzhiyun u8 gate; 13*4882a593Smuzhiyun u8 pipe; 14*4882a593Smuzhiyun }; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun struct hcp_message { 17*4882a593Smuzhiyun u8 header; /* type -cmd,evt,rsp- + instruction */ 18*4882a593Smuzhiyun u8 data[]; 19*4882a593Smuzhiyun } __packed; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun struct hcp_packet { 22*4882a593Smuzhiyun u8 header; /* cbit+pipe */ 23*4882a593Smuzhiyun struct hcp_message message; 24*4882a593Smuzhiyun } __packed; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun struct hcp_exec_waiter { 27*4882a593Smuzhiyun wait_queue_head_t *wq; 28*4882a593Smuzhiyun bool exec_complete; 29*4882a593Smuzhiyun int exec_result; 30*4882a593Smuzhiyun struct sk_buff *result_skb; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun struct hci_msg { 34*4882a593Smuzhiyun struct list_head msg_l; 35*4882a593Smuzhiyun struct sk_buff_head msg_frags; 36*4882a593Smuzhiyun bool wait_response; 37*4882a593Smuzhiyun data_exchange_cb_t cb; 38*4882a593Smuzhiyun void *cb_context; 39*4882a593Smuzhiyun unsigned long completion_delay; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct hci_create_pipe_params { 43*4882a593Smuzhiyun u8 src_gate; 44*4882a593Smuzhiyun u8 dest_host; 45*4882a593Smuzhiyun u8 dest_gate; 46*4882a593Smuzhiyun } __packed; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun struct hci_create_pipe_resp { 49*4882a593Smuzhiyun u8 src_host; 50*4882a593Smuzhiyun u8 src_gate; 51*4882a593Smuzhiyun u8 dest_host; 52*4882a593Smuzhiyun u8 dest_gate; 53*4882a593Smuzhiyun u8 pipe; 54*4882a593Smuzhiyun } __packed; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct hci_delete_pipe_noti { 57*4882a593Smuzhiyun u8 pipe; 58*4882a593Smuzhiyun } __packed; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun struct hci_all_pipe_cleared_noti { 61*4882a593Smuzhiyun u8 host; 62*4882a593Smuzhiyun } __packed; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define NFC_HCI_FRAGMENT 0x7f 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define HCP_HEADER(type, instr) ((((type) & 0x03) << 6) | ((instr) & 0x3f)) 67*4882a593Smuzhiyun #define HCP_MSG_GET_TYPE(header) ((header & 0xc0) >> 6) 68*4882a593Smuzhiyun #define HCP_MSG_GET_CMD(header) (header & 0x3f) 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun int nfc_hci_hcp_message_tx(struct nfc_hci_dev *hdev, u8 pipe, 71*4882a593Smuzhiyun u8 type, u8 instruction, 72*4882a593Smuzhiyun const u8 *payload, size_t payload_len, 73*4882a593Smuzhiyun data_exchange_cb_t cb, void *cb_context, 74*4882a593Smuzhiyun unsigned long completion_delay); 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun void nfc_hci_hcp_message_rx(struct nfc_hci_dev *hdev, u8 pipe, u8 type, 77*4882a593Smuzhiyun u8 instruction, struct sk_buff *skb); 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* HCP headers */ 80*4882a593Smuzhiyun #define NFC_HCI_HCP_PACKET_HEADER_LEN 1 81*4882a593Smuzhiyun #define NFC_HCI_HCP_MESSAGE_HEADER_LEN 1 82*4882a593Smuzhiyun #define NFC_HCI_HCP_HEADER_LEN 2 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* HCP types */ 85*4882a593Smuzhiyun #define NFC_HCI_HCP_COMMAND 0x00 86*4882a593Smuzhiyun #define NFC_HCI_HCP_EVENT 0x01 87*4882a593Smuzhiyun #define NFC_HCI_HCP_RESPONSE 0x02 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* Generic commands */ 90*4882a593Smuzhiyun #define NFC_HCI_ANY_SET_PARAMETER 0x01 91*4882a593Smuzhiyun #define NFC_HCI_ANY_GET_PARAMETER 0x02 92*4882a593Smuzhiyun #define NFC_HCI_ANY_OPEN_PIPE 0x03 93*4882a593Smuzhiyun #define NFC_HCI_ANY_CLOSE_PIPE 0x04 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* Reader RF commands */ 96*4882a593Smuzhiyun #define NFC_HCI_WR_XCHG_DATA 0x10 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* Admin commands */ 99*4882a593Smuzhiyun #define NFC_HCI_ADM_CREATE_PIPE 0x10 100*4882a593Smuzhiyun #define NFC_HCI_ADM_DELETE_PIPE 0x11 101*4882a593Smuzhiyun #define NFC_HCI_ADM_NOTIFY_PIPE_CREATED 0x12 102*4882a593Smuzhiyun #define NFC_HCI_ADM_NOTIFY_PIPE_DELETED 0x13 103*4882a593Smuzhiyun #define NFC_HCI_ADM_CLEAR_ALL_PIPE 0x14 104*4882a593Smuzhiyun #define NFC_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* Generic responses */ 107*4882a593Smuzhiyun #define NFC_HCI_ANY_OK 0x00 108*4882a593Smuzhiyun #define NFC_HCI_ANY_E_NOT_CONNECTED 0x01 109*4882a593Smuzhiyun #define NFC_HCI_ANY_E_CMD_PAR_UNKNOWN 0x02 110*4882a593Smuzhiyun #define NFC_HCI_ANY_E_NOK 0x03 111*4882a593Smuzhiyun #define NFC_HCI_ANY_E_PIPES_FULL 0x04 112*4882a593Smuzhiyun #define NFC_HCI_ANY_E_REG_PAR_UNKNOWN 0x05 113*4882a593Smuzhiyun #define NFC_HCI_ANY_E_PIPE_NOT_OPENED 0x06 114*4882a593Smuzhiyun #define NFC_HCI_ANY_E_CMD_NOT_SUPPORTED 0x07 115*4882a593Smuzhiyun #define NFC_HCI_ANY_E_INHIBITED 0x08 116*4882a593Smuzhiyun #define NFC_HCI_ANY_E_TIMEOUT 0x09 117*4882a593Smuzhiyun #define NFC_HCI_ANY_E_REG_ACCESS_DENIED 0x0a 118*4882a593Smuzhiyun #define NFC_HCI_ANY_E_PIPE_ACCESS_DENIED 0x0b 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #endif /* __LOCAL_HCI_H */ 121