hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* 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 <net/nfc/hci.h>
 
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 */