blob: 553c7d171fd1112b6c4906b566aa66a760bb81dc [file] [log] [blame]
Michael Thalmeier9815c7c2016-03-25 15:46:53 +01001/*
2 * Driver for NXP PN533 NFC Chip
3 *
4 * Copyright (C) 2011 Instituto Nokia de Tecnologia
5 * Copyright (C) 2012-2013 Tieto Poland
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
19 */
20
21#define PN533_DEVICE_STD 0x1
22#define PN533_DEVICE_PASORI 0x2
23#define PN533_DEVICE_ACR122U 0x3
Michael Thalmeierdd7bedc2016-03-25 15:46:54 +010024#define PN533_DEVICE_PN532 0x4
Michael Thalmeier9815c7c2016-03-25 15:46:53 +010025
26#define PN533_ALL_PROTOCOLS (NFC_PROTO_JEWEL_MASK | NFC_PROTO_MIFARE_MASK |\
27 NFC_PROTO_FELICA_MASK | NFC_PROTO_ISO14443_MASK |\
28 NFC_PROTO_NFC_DEP_MASK |\
29 NFC_PROTO_ISO14443_B_MASK)
30
31#define PN533_NO_TYPE_B_PROTOCOLS (NFC_PROTO_JEWEL_MASK | \
32 NFC_PROTO_MIFARE_MASK | \
33 NFC_PROTO_FELICA_MASK | \
34 NFC_PROTO_ISO14443_MASK | \
35 NFC_PROTO_NFC_DEP_MASK)
36
37/* Standard pn533 frame definitions (standard and extended)*/
38#define PN533_STD_FRAME_HEADER_LEN (sizeof(struct pn533_std_frame) \
39 + 2) /* data[0] TFI, data[1] CC */
40#define PN533_STD_FRAME_TAIL_LEN 2 /* data[len] DCS, data[len + 1] postamble*/
41
42#define PN533_EXT_FRAME_HEADER_LEN (sizeof(struct pn533_ext_frame) \
43 + 2) /* data[0] TFI, data[1] CC */
44
45#define PN533_CMD_DATAEXCH_HEAD_LEN 1
46#define PN533_CMD_DATAEXCH_DATA_MAXLEN 262
47#define PN533_CMD_DATAFRAME_MAXLEN 240 /* max data length (send) */
48
49/*
50 * Max extended frame payload len, excluding TFI and CC
51 * which are already in PN533_FRAME_HEADER_LEN.
52 */
53#define PN533_STD_FRAME_MAX_PAYLOAD_LEN 263
54
55
56/* Preamble (1), SoPC (2), ACK Code (2), Postamble (1) */
57#define PN533_STD_FRAME_ACK_SIZE 6
58#define PN533_STD_FRAME_CHECKSUM(f) (f->data[f->datalen])
59#define PN533_STD_FRAME_POSTAMBLE(f) (f->data[f->datalen + 1])
60/* Half start code (3), LEN (4) should be 0xffff for extended frame */
61#define PN533_STD_IS_EXTENDED(hdr) ((hdr)->datalen == 0xFF \
62 && (hdr)->datalen_checksum == 0xFF)
63#define PN533_EXT_FRAME_CHECKSUM(f) (f->data[be16_to_cpu(f->datalen)])
64
65/* start of frame */
66#define PN533_STD_FRAME_SOF 0x00FF
67
68/* standard frame identifier: in/out/error */
69#define PN533_STD_FRAME_IDENTIFIER(f) (f->data[0]) /* TFI */
70#define PN533_STD_FRAME_DIR_OUT 0xD4
71#define PN533_STD_FRAME_DIR_IN 0xD5
72
73/* PN533 Commands */
74#define PN533_FRAME_CMD(f) (f->data[1])
75
76#define PN533_CMD_GET_FIRMWARE_VERSION 0x02
Michael Thalmeierdd7bedc2016-03-25 15:46:54 +010077#define PN533_CMD_SAM_CONFIGURATION 0x14
Michael Thalmeier9815c7c2016-03-25 15:46:53 +010078#define PN533_CMD_RF_CONFIGURATION 0x32
79#define PN533_CMD_IN_DATA_EXCHANGE 0x40
80#define PN533_CMD_IN_COMM_THRU 0x42
81#define PN533_CMD_IN_LIST_PASSIVE_TARGET 0x4A
82#define PN533_CMD_IN_ATR 0x50
83#define PN533_CMD_IN_RELEASE 0x52
84#define PN533_CMD_IN_JUMP_FOR_DEP 0x56
85
86#define PN533_CMD_TG_INIT_AS_TARGET 0x8c
87#define PN533_CMD_TG_GET_DATA 0x86
88#define PN533_CMD_TG_SET_DATA 0x8e
89#define PN533_CMD_TG_SET_META_DATA 0x94
90#define PN533_CMD_UNDEF 0xff
91
92#define PN533_CMD_RESPONSE(cmd) (cmd + 1)
93
94/* PN533 Return codes */
95#define PN533_CMD_RET_MASK 0x3F
96#define PN533_CMD_MI_MASK 0x40
97#define PN533_CMD_RET_SUCCESS 0x00
98
99
100enum pn533_protocol_type {
101 PN533_PROTO_REQ_ACK_RESP = 0,
102 PN533_PROTO_REQ_RESP
103};
104
105/* Poll modulations */
106enum {
107 PN533_POLL_MOD_106KBPS_A,
108 PN533_POLL_MOD_212KBPS_FELICA,
109 PN533_POLL_MOD_424KBPS_FELICA,
110 PN533_POLL_MOD_106KBPS_JEWEL,
111 PN533_POLL_MOD_847KBPS_B,
112 PN533_LISTEN_MOD,
113
114 __PN533_POLL_MOD_AFTER_LAST,
115};
116#define PN533_POLL_MOD_MAX (__PN533_POLL_MOD_AFTER_LAST - 1)
117
118struct pn533_std_frame {
119 u8 preamble;
120 __be16 start_frame;
121 u8 datalen;
122 u8 datalen_checksum;
123 u8 data[];
124} __packed;
125
126struct pn533_ext_frame { /* Extended Information frame */
127 u8 preamble;
128 __be16 start_frame;
129 __be16 eif_flag; /* fixed to 0xFFFF */
130 __be16 datalen;
131 u8 datalen_checksum;
132 u8 data[];
133} __packed;
134
135struct pn533 {
136 struct nfc_dev *nfc_dev;
137 u32 device_type;
138 enum pn533_protocol_type protocol_type;
139
140 struct sk_buff_head resp_q;
141 struct sk_buff_head fragment_skb;
142
143 struct workqueue_struct *wq;
144 struct work_struct cmd_work;
145 struct work_struct cmd_complete_work;
146 struct delayed_work poll_work;
147 struct work_struct mi_rx_work;
148 struct work_struct mi_tx_work;
149 struct work_struct mi_tm_rx_work;
150 struct work_struct mi_tm_tx_work;
151 struct work_struct tg_work;
152 struct work_struct rf_work;
153
154 struct list_head cmd_queue;
155 struct pn533_cmd *cmd;
156 u8 cmd_pending;
157 struct mutex cmd_lock; /* protects cmd queue */
158
159 void *cmd_complete_mi_arg;
160 void *cmd_complete_dep_arg;
161
162 struct pn533_poll_modulations *poll_mod_active[PN533_POLL_MOD_MAX + 1];
163 u8 poll_mod_count;
164 u8 poll_mod_curr;
165 u8 poll_dep;
166 u32 poll_protocols;
167 u32 listen_protocols;
168 struct timer_list listen_timer;
169 int cancel_listen;
170
171 u8 *gb;
172 size_t gb_len;
173
174 u8 tgt_available_prots;
175 u8 tgt_active_prot;
176 u8 tgt_mode;
177
178 struct pn533_frame_ops *ops;
179
180 struct device *dev;
181 void *phy;
182 struct pn533_phy_ops *phy_ops;
183};
184
185typedef int (*pn533_send_async_complete_t) (struct pn533 *dev, void *arg,
186 struct sk_buff *resp);
187
188struct pn533_cmd {
189 struct list_head queue;
190 u8 code;
191 int status;
192 struct sk_buff *req;
193 struct sk_buff *resp;
194 pn533_send_async_complete_t complete_cb;
195 void *complete_cb_context;
196};
197
198
199struct pn533_frame_ops {
200 void (*tx_frame_init)(void *frame, u8 cmd_code);
201 void (*tx_frame_finish)(void *frame);
202 void (*tx_update_payload_len)(void *frame, int len);
203 int tx_header_len;
204 int tx_tail_len;
205
206 bool (*rx_is_frame_valid)(void *frame, struct pn533 *dev);
207 bool (*rx_frame_is_ack)(void *frame);
208 int (*rx_frame_size)(void *frame);
209 int rx_header_len;
210 int rx_tail_len;
211
212 int max_payload_len;
213 u8 (*get_cmd_code)(void *frame);
214};
215
216
217struct pn533_phy_ops {
218 int (*send_frame)(struct pn533 *priv,
219 struct sk_buff *out);
220 int (*send_ack)(struct pn533 *dev, gfp_t flags);
221 void (*abort_cmd)(struct pn533 *priv, gfp_t flags);
222};
223
224
225struct pn533 *pn533_register_device(u32 device_type,
226 u32 protocols,
227 enum pn533_protocol_type protocol_type,
228 void *phy,
229 struct pn533_phy_ops *phy_ops,
230 struct pn533_frame_ops *fops,
Michael Thalmeierb16931b2016-04-21 16:43:50 +0200231 struct device *dev,
232 struct device *parent);
Michael Thalmeier9815c7c2016-03-25 15:46:53 +0100233
234void pn533_unregister_device(struct pn533 *priv);
235void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status);
236
237bool pn533_rx_frame_is_cmd_response(struct pn533 *dev, void *frame);
238bool pn533_rx_frame_is_ack(void *_frame);