xref: /openbmc/linux/include/net/nfc/nci.h (revision 6a2968aaf50c7a22fced77a5e24aa636281efca8)
1*6a2968aaSIlan Elias /*
2*6a2968aaSIlan Elias  *  The NFC Controller Interface is the communication protocol between an
3*6a2968aaSIlan Elias  *  NFC Controller (NFCC) and a Device Host (DH).
4*6a2968aaSIlan Elias  *
5*6a2968aaSIlan Elias  *  Copyright (C) 2011 Texas Instruments, Inc.
6*6a2968aaSIlan Elias  *
7*6a2968aaSIlan Elias  *  Written by Ilan Elias <ilane@ti.com>
8*6a2968aaSIlan Elias  *
9*6a2968aaSIlan Elias  *  Acknowledgements:
10*6a2968aaSIlan Elias  *  This file is based on hci.h, which was written
11*6a2968aaSIlan Elias  *  by Maxim Krasnyansky.
12*6a2968aaSIlan Elias  *
13*6a2968aaSIlan Elias  *  This program is free software; you can redistribute it and/or modify
14*6a2968aaSIlan Elias  *  it under the terms of the GNU General Public License version 2
15*6a2968aaSIlan Elias  *  as published by the Free Software Foundation
16*6a2968aaSIlan Elias  *
17*6a2968aaSIlan Elias  *  This program is distributed in the hope that it will be useful,
18*6a2968aaSIlan Elias  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
19*6a2968aaSIlan Elias  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20*6a2968aaSIlan Elias  *  GNU General Public License for more details.
21*6a2968aaSIlan Elias  *
22*6a2968aaSIlan Elias  *  You should have received a copy of the GNU General Public License
23*6a2968aaSIlan Elias  *  along with this program; if not, write to the Free Software
24*6a2968aaSIlan Elias  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25*6a2968aaSIlan Elias  *
26*6a2968aaSIlan Elias  */
27*6a2968aaSIlan Elias 
28*6a2968aaSIlan Elias #ifndef __NCI_H
29*6a2968aaSIlan Elias #define __NCI_H
30*6a2968aaSIlan Elias 
31*6a2968aaSIlan Elias /* NCI constants */
32*6a2968aaSIlan Elias #define NCI_MAX_NUM_MAPPING_CONFIGS				10
33*6a2968aaSIlan Elias #define NCI_MAX_NUM_RF_CONFIGS					10
34*6a2968aaSIlan Elias #define NCI_MAX_NUM_CONN					10
35*6a2968aaSIlan Elias 
36*6a2968aaSIlan Elias /* NCI Status Codes */
37*6a2968aaSIlan Elias #define	NCI_STATUS_OK						0x00
38*6a2968aaSIlan Elias #define	NCI_STATUS_REJECTED					0x01
39*6a2968aaSIlan Elias #define	NCI_STATUS_MESSAGE_CORRUPTED				0x02
40*6a2968aaSIlan Elias #define	NCI_STATUS_BUFFER_FULL					0x03
41*6a2968aaSIlan Elias #define	NCI_STATUS_FAILED					0x04
42*6a2968aaSIlan Elias #define	NCI_STATUS_NOT_INITIALIZED				0x05
43*6a2968aaSIlan Elias #define	NCI_STATUS_SYNTAX_ERROR					0x06
44*6a2968aaSIlan Elias #define	NCI_STATUS_SEMANTIC_ERROR				0x07
45*6a2968aaSIlan Elias #define	NCI_STATUS_UNKNOWN_GID					0x08
46*6a2968aaSIlan Elias #define	NCI_STATUS_UNKNOWN_OID					0x09
47*6a2968aaSIlan Elias #define	NCI_STATUS_INVALID_PARAM				0x0a
48*6a2968aaSIlan Elias #define	NCI_STATUS_MESSAGE_SIZE_EXCEEDED			0x0b
49*6a2968aaSIlan Elias /* Discovery Specific Status Codes */
50*6a2968aaSIlan Elias #define	NCI_STATUS_DISCOVERY_ALREADY_STARTED			0xa0
51*6a2968aaSIlan Elias #define	NCI_STATUS_DISCOVERY_TARGET_ACTIVATION_FAILED		0xa1
52*6a2968aaSIlan Elias /* RF Interface Specific Status Codes */
53*6a2968aaSIlan Elias #define	NCI_STATUS_RF_TRANSMISSION_ERROR			0xb0
54*6a2968aaSIlan Elias #define	NCI_STATUS_RF_PROTOCOL_ERROR				0xb1
55*6a2968aaSIlan Elias #define	NCI_STATUS_RF_TIMEOUT_ERROR				0xb2
56*6a2968aaSIlan Elias #define	NCI_STATUS_RF_LINK_LOSS_ERROR				0xb3
57*6a2968aaSIlan Elias /* NFCEE Interface Specific Status Codes */
58*6a2968aaSIlan Elias #define	NCI_STATUS_MAX_ACTIVE_NFCEE_INTERFACES_REACHED		0xc0
59*6a2968aaSIlan Elias #define	NCI_STATUS_NFCEE_INTERFACE_ACTIVATION_FAILED		0xc1
60*6a2968aaSIlan Elias #define	NCI_STATUS_NFCEE_TRANSMISSION_ERROR			0xc2
61*6a2968aaSIlan Elias #define	NCI_STATUS_NFCEE_PROTOCOL_ERROR				0xc3
62*6a2968aaSIlan Elias #define NCI_STATUS_NFCEE_TIMEOUT_ERROR				0xc4
63*6a2968aaSIlan Elias 
64*6a2968aaSIlan Elias /* NCI RF Technology and Mode */
65*6a2968aaSIlan Elias #define NCI_NFC_A_PASSIVE_POLL_MODE				0x00
66*6a2968aaSIlan Elias #define NCI_NFC_B_PASSIVE_POLL_MODE				0x01
67*6a2968aaSIlan Elias #define NCI_NFC_F_PASSIVE_POLL_MODE				0x02
68*6a2968aaSIlan Elias #define NCI_NFC_A_ACTIVE_POLL_MODE				0x03
69*6a2968aaSIlan Elias #define NCI_NFC_F_ACTIVE_POLL_MODE				0x05
70*6a2968aaSIlan Elias #define NCI_NFC_A_PASSIVE_LISTEN_MODE				0x80
71*6a2968aaSIlan Elias #define NCI_NFC_B_PASSIVE_LISTEN_MODE				0x81
72*6a2968aaSIlan Elias #define NCI_NFC_F_PASSIVE_LISTEN_MODE				0x82
73*6a2968aaSIlan Elias #define NCI_NFC_A_ACTIVE_LISTEN_MODE				0x83
74*6a2968aaSIlan Elias #define NCI_NFC_F_ACTIVE_LISTEN_MODE				0x85
75*6a2968aaSIlan Elias 
76*6a2968aaSIlan Elias /* NCI RF Protocols */
77*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_UNKNOWN					0x00
78*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_T1T					0x01
79*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_T2T					0x02
80*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_T3T					0x03
81*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_ISO_DEP					0x04
82*6a2968aaSIlan Elias #define NCI_RF_PROTOCOL_NFC_DEP					0x05
83*6a2968aaSIlan Elias 
84*6a2968aaSIlan Elias /* NCI RF Interfaces */
85*6a2968aaSIlan Elias #define NCI_RF_INTERFACE_RFU					0x00
86*6a2968aaSIlan Elias #define	NCI_RF_INTERFACE_FRAME					0x01
87*6a2968aaSIlan Elias #define	NCI_RF_INTERFACE_ISO_DEP				0x02
88*6a2968aaSIlan Elias #define	NCI_RF_INTERFACE_NFC_DEP				0x03
89*6a2968aaSIlan Elias 
90*6a2968aaSIlan Elias /* NCI RF_DISCOVER_MAP_CMD modes */
91*6a2968aaSIlan Elias #define NCI_DISC_MAP_MODE_POLL					0x01
92*6a2968aaSIlan Elias #define NCI_DISC_MAP_MODE_LISTEN				0x02
93*6a2968aaSIlan Elias #define NCI_DISC_MAP_MODE_BOTH					0x03
94*6a2968aaSIlan Elias 
95*6a2968aaSIlan Elias /* NCI Discovery Types */
96*6a2968aaSIlan Elias #define NCI_DISCOVERY_TYPE_POLL_A_PASSIVE			0x00
97*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_POLL_B_PASSIVE			0x01
98*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_POLL_F_PASSIVE			0x02
99*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_POLL_A_ACTIVE			0x03
100*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_POLL_F_ACTIVE			0x05
101*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_WAKEUP_A_PASSIVE			0x06
102*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_WAKEUP_B_PASSIVE			0x07
103*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_WAKEUP_A_ACTIVE			0x09
104*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_LISTEN_A_PASSIVE			0x80
105*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_LISTEN_B_PASSIVE			0x81
106*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_LISTEN_F_PASSIVE			0x82
107*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE			0x83
108*6a2968aaSIlan Elias #define	NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE			0x85
109*6a2968aaSIlan Elias 
110*6a2968aaSIlan Elias /* NCI Deactivation Type */
111*6a2968aaSIlan Elias #define	NCI_DEACTIVATE_TYPE_IDLE_MODE				0x00
112*6a2968aaSIlan Elias #define	NCI_DEACTIVATE_TYPE_SLEEP_MODE				0x01
113*6a2968aaSIlan Elias #define	NCI_DEACTIVATE_TYPE_SLEEP_AF_MODE			0x02
114*6a2968aaSIlan Elias #define	NCI_DEACTIVATE_TYPE_RF_LINK_LOSS			0x03
115*6a2968aaSIlan Elias #define	NCI_DEACTIVATE_TYPE_DISCOVERY_ERROR			0x04
116*6a2968aaSIlan Elias 
117*6a2968aaSIlan Elias /* Message Type (MT) */
118*6a2968aaSIlan Elias #define NCI_MT_DATA_PKT						0x00
119*6a2968aaSIlan Elias #define NCI_MT_CMD_PKT						0x01
120*6a2968aaSIlan Elias #define NCI_MT_RSP_PKT						0x02
121*6a2968aaSIlan Elias #define NCI_MT_NTF_PKT						0x03
122*6a2968aaSIlan Elias 
123*6a2968aaSIlan Elias #define nci_mt(hdr)			(((hdr)[0]>>5)&0x07)
124*6a2968aaSIlan Elias #define nci_mt_set(hdr, mt)		((hdr)[0] |= (__u8)(((mt)&0x07)<<5))
125*6a2968aaSIlan Elias 
126*6a2968aaSIlan Elias /* Packet Boundary Flag (PBF) */
127*6a2968aaSIlan Elias #define NCI_PBF_LAST						0x00
128*6a2968aaSIlan Elias #define NCI_PBF_CONT						0x01
129*6a2968aaSIlan Elias 
130*6a2968aaSIlan Elias #define nci_pbf(hdr)			(__u8)(((hdr)[0]>>4)&0x01)
131*6a2968aaSIlan Elias #define nci_pbf_set(hdr, pbf)		((hdr)[0] |= (__u8)(((pbf)&0x01)<<4))
132*6a2968aaSIlan Elias 
133*6a2968aaSIlan Elias /* Control Opcode manipulation */
134*6a2968aaSIlan Elias #define nci_opcode_pack(gid, oid)	(__u16)((((__u16)((gid)&0x0f))<<8)|\
135*6a2968aaSIlan Elias 					((__u16)((oid)&0x3f)))
136*6a2968aaSIlan Elias #define nci_opcode(hdr)			nci_opcode_pack(hdr[0], hdr[1])
137*6a2968aaSIlan Elias #define nci_opcode_gid(op)		(__u8)(((op)&0x0f00)>>8)
138*6a2968aaSIlan Elias #define nci_opcode_oid(op)		(__u8)((op)&0x003f)
139*6a2968aaSIlan Elias 
140*6a2968aaSIlan Elias /* Payload Length */
141*6a2968aaSIlan Elias #define nci_plen(hdr)			(__u8)((hdr)[2])
142*6a2968aaSIlan Elias 
143*6a2968aaSIlan Elias /* Connection ID */
144*6a2968aaSIlan Elias #define nci_conn_id(hdr)		(__u8)(((hdr)[0])&0x0f)
145*6a2968aaSIlan Elias 
146*6a2968aaSIlan Elias /* GID values */
147*6a2968aaSIlan Elias #define	NCI_GID_CORE						0x0
148*6a2968aaSIlan Elias #define	NCI_GID_RF_MGMT						0x1
149*6a2968aaSIlan Elias #define	NCI_GID_NFCEE_MGMT					0x2
150*6a2968aaSIlan Elias #define	NCI_GID_PROPRIETARY					0xf
151*6a2968aaSIlan Elias 
152*6a2968aaSIlan Elias /* ---- NCI Packet structures ---- */
153*6a2968aaSIlan Elias #define NCI_CTRL_HDR_SIZE					3
154*6a2968aaSIlan Elias #define NCI_DATA_HDR_SIZE					3
155*6a2968aaSIlan Elias 
156*6a2968aaSIlan Elias struct nci_ctrl_hdr {
157*6a2968aaSIlan Elias 	__u8	gid;		/* MT & PBF & GID */
158*6a2968aaSIlan Elias 	__u8	oid;
159*6a2968aaSIlan Elias 	__u8	plen;
160*6a2968aaSIlan Elias } __packed;
161*6a2968aaSIlan Elias 
162*6a2968aaSIlan Elias struct nci_data_hdr {
163*6a2968aaSIlan Elias 	__u8	conn_id;	/* MT & PBF & ConnID */
164*6a2968aaSIlan Elias 	__u8	rfu;
165*6a2968aaSIlan Elias 	__u8	plen;
166*6a2968aaSIlan Elias } __packed;
167*6a2968aaSIlan Elias 
168*6a2968aaSIlan Elias /* ------------------------ */
169*6a2968aaSIlan Elias /* -----  NCI Commands ---- */
170*6a2968aaSIlan Elias /* ------------------------ */
171*6a2968aaSIlan Elias #define NCI_OP_CORE_RESET_CMD		nci_opcode_pack(NCI_GID_CORE, 0x00)
172*6a2968aaSIlan Elias 
173*6a2968aaSIlan Elias #define NCI_OP_CORE_INIT_CMD		nci_opcode_pack(NCI_GID_CORE, 0x01)
174*6a2968aaSIlan Elias 
175*6a2968aaSIlan Elias #define NCI_OP_CORE_SET_CONFIG_CMD	nci_opcode_pack(NCI_GID_CORE, 0x02)
176*6a2968aaSIlan Elias 
177*6a2968aaSIlan Elias #define NCI_OP_CORE_CONN_CREATE_CMD	nci_opcode_pack(NCI_GID_CORE, 0x04)
178*6a2968aaSIlan Elias struct nci_core_conn_create_cmd {
179*6a2968aaSIlan Elias 	__u8	target_handle;
180*6a2968aaSIlan Elias 	__u8	num_target_specific_params;
181*6a2968aaSIlan Elias } __packed;
182*6a2968aaSIlan Elias 
183*6a2968aaSIlan Elias #define NCI_OP_CORE_CONN_CLOSE_CMD	nci_opcode_pack(NCI_GID_CORE, 0x06)
184*6a2968aaSIlan Elias 
185*6a2968aaSIlan Elias #define NCI_OP_RF_DISCOVER_MAP_CMD	nci_opcode_pack(NCI_GID_RF_MGMT, 0x00)
186*6a2968aaSIlan Elias struct disc_map_config {
187*6a2968aaSIlan Elias 	__u8	rf_protocol;
188*6a2968aaSIlan Elias 	__u8	mode;
189*6a2968aaSIlan Elias 	__u8	rf_interface_type;
190*6a2968aaSIlan Elias } __packed;
191*6a2968aaSIlan Elias 
192*6a2968aaSIlan Elias struct nci_rf_disc_map_cmd {
193*6a2968aaSIlan Elias 	__u8				num_mapping_configs;
194*6a2968aaSIlan Elias 	struct disc_map_config		mapping_configs
195*6a2968aaSIlan Elias 					[NCI_MAX_NUM_MAPPING_CONFIGS];
196*6a2968aaSIlan Elias } __packed;
197*6a2968aaSIlan Elias 
198*6a2968aaSIlan Elias #define NCI_OP_RF_DISCOVER_CMD		nci_opcode_pack(NCI_GID_RF_MGMT, 0x03)
199*6a2968aaSIlan Elias struct disc_config {
200*6a2968aaSIlan Elias 	__u8	type;
201*6a2968aaSIlan Elias 	__u8	frequency;
202*6a2968aaSIlan Elias } __packed;
203*6a2968aaSIlan Elias 
204*6a2968aaSIlan Elias struct nci_rf_disc_cmd {
205*6a2968aaSIlan Elias 	__u8				num_disc_configs;
206*6a2968aaSIlan Elias 	struct disc_config		disc_configs[NCI_MAX_NUM_RF_CONFIGS];
207*6a2968aaSIlan Elias } __packed;
208*6a2968aaSIlan Elias 
209*6a2968aaSIlan Elias #define NCI_OP_RF_DEACTIVATE_CMD	nci_opcode_pack(NCI_GID_RF_MGMT, 0x06)
210*6a2968aaSIlan Elias struct nci_rf_deactivate_cmd {
211*6a2968aaSIlan Elias 	__u8	type;
212*6a2968aaSIlan Elias } __packed;
213*6a2968aaSIlan Elias 
214*6a2968aaSIlan Elias /* ----------------------- */
215*6a2968aaSIlan Elias /* ---- NCI Responses ---- */
216*6a2968aaSIlan Elias /* ----------------------- */
217*6a2968aaSIlan Elias #define NCI_OP_CORE_RESET_RSP		nci_opcode_pack(NCI_GID_CORE, 0x00)
218*6a2968aaSIlan Elias struct nci_core_reset_rsp {
219*6a2968aaSIlan Elias 	__u8	status;
220*6a2968aaSIlan Elias 	__u8	nci_ver;
221*6a2968aaSIlan Elias } __packed;
222*6a2968aaSIlan Elias 
223*6a2968aaSIlan Elias #define NCI_OP_CORE_INIT_RSP		nci_opcode_pack(NCI_GID_CORE, 0x01)
224*6a2968aaSIlan Elias struct nci_core_init_rsp_1 {
225*6a2968aaSIlan Elias 	__u8	status;
226*6a2968aaSIlan Elias 	__le32	nfcc_features;
227*6a2968aaSIlan Elias 	__u8	num_supported_rf_interfaces;
228*6a2968aaSIlan Elias 	__u8	supported_rf_interfaces[0];	/* variable size array */
229*6a2968aaSIlan Elias 	/* continuted in nci_core_init_rsp_2 */
230*6a2968aaSIlan Elias } __packed;
231*6a2968aaSIlan Elias 
232*6a2968aaSIlan Elias struct nci_core_init_rsp_2 {
233*6a2968aaSIlan Elias 	__u8	max_logical_connections;
234*6a2968aaSIlan Elias 	__le16	max_routing_table_size;
235*6a2968aaSIlan Elias 	__u8	max_control_packet_payload_length;
236*6a2968aaSIlan Elias 	__le16	rf_sending_buffer_size;
237*6a2968aaSIlan Elias 	__le16	rf_receiving_buffer_size;
238*6a2968aaSIlan Elias 	__le16	manufacturer_id;
239*6a2968aaSIlan Elias } __packed;
240*6a2968aaSIlan Elias 
241*6a2968aaSIlan Elias #define NCI_OP_CORE_SET_CONFIG_RSP	nci_opcode_pack(NCI_GID_CORE, 0x02)
242*6a2968aaSIlan Elias 
243*6a2968aaSIlan Elias #define NCI_OP_CORE_CONN_CREATE_RSP	nci_opcode_pack(NCI_GID_CORE, 0x04)
244*6a2968aaSIlan Elias struct nci_core_conn_create_rsp {
245*6a2968aaSIlan Elias 	__u8	status;
246*6a2968aaSIlan Elias 	__u8	max_pkt_payload_size;
247*6a2968aaSIlan Elias 	__u8	initial_num_credits;
248*6a2968aaSIlan Elias 	__u8	conn_id;
249*6a2968aaSIlan Elias } __packed;
250*6a2968aaSIlan Elias 
251*6a2968aaSIlan Elias #define NCI_OP_CORE_CONN_CLOSE_RSP	nci_opcode_pack(NCI_GID_CORE, 0x06)
252*6a2968aaSIlan Elias 
253*6a2968aaSIlan Elias #define NCI_OP_RF_DISCOVER_MAP_RSP	nci_opcode_pack(NCI_GID_RF_MGMT, 0x00)
254*6a2968aaSIlan Elias 
255*6a2968aaSIlan Elias #define NCI_OP_RF_DISCOVER_RSP		nci_opcode_pack(NCI_GID_RF_MGMT, 0x03)
256*6a2968aaSIlan Elias 
257*6a2968aaSIlan Elias #define NCI_OP_RF_DEACTIVATE_RSP	nci_opcode_pack(NCI_GID_RF_MGMT, 0x06)
258*6a2968aaSIlan Elias 
259*6a2968aaSIlan Elias /* --------------------------- */
260*6a2968aaSIlan Elias /* ---- NCI Notifications ---- */
261*6a2968aaSIlan Elias /* --------------------------- */
262*6a2968aaSIlan Elias #define NCI_OP_CORE_CONN_CREDITS_NTF	nci_opcode_pack(NCI_GID_CORE, 0x07)
263*6a2968aaSIlan Elias struct conn_credit_entry {
264*6a2968aaSIlan Elias 	__u8	conn_id;
265*6a2968aaSIlan Elias 	__u8	credits;
266*6a2968aaSIlan Elias } __packed;
267*6a2968aaSIlan Elias 
268*6a2968aaSIlan Elias struct nci_core_conn_credit_ntf {
269*6a2968aaSIlan Elias 	__u8				num_entries;
270*6a2968aaSIlan Elias 	struct conn_credit_entry	conn_entries[NCI_MAX_NUM_CONN];
271*6a2968aaSIlan Elias } __packed;
272*6a2968aaSIlan Elias 
273*6a2968aaSIlan Elias #define NCI_OP_RF_FIELD_INFO_NTF	nci_opcode_pack(NCI_GID_CORE, 0x08)
274*6a2968aaSIlan Elias struct nci_rf_field_info_ntf {
275*6a2968aaSIlan Elias 	__u8	rf_field_status;
276*6a2968aaSIlan Elias } __packed;
277*6a2968aaSIlan Elias 
278*6a2968aaSIlan Elias #define NCI_OP_RF_ACTIVATE_NTF		nci_opcode_pack(NCI_GID_RF_MGMT, 0x05)
279*6a2968aaSIlan Elias struct rf_tech_specific_params_nfca_poll {
280*6a2968aaSIlan Elias 	__u16	sens_res;
281*6a2968aaSIlan Elias 	__u8	nfcid1_len;	/* 0, 4, 7, or 10 Bytes */
282*6a2968aaSIlan Elias 	__u8	nfcid1[10];
283*6a2968aaSIlan Elias 	__u8	sel_res_len;	/* 0 or 1 Bytes */
284*6a2968aaSIlan Elias 	__u8	sel_res;
285*6a2968aaSIlan Elias } __packed;
286*6a2968aaSIlan Elias 
287*6a2968aaSIlan Elias struct activation_params_nfca_poll_iso_dep {
288*6a2968aaSIlan Elias 	__u8	rats_res_len;
289*6a2968aaSIlan Elias 	__u8	rats_res[20];
290*6a2968aaSIlan Elias };
291*6a2968aaSIlan Elias 
292*6a2968aaSIlan Elias struct nci_rf_activate_ntf {
293*6a2968aaSIlan Elias 	__u8	target_handle;
294*6a2968aaSIlan Elias 	__u8	rf_protocol;
295*6a2968aaSIlan Elias 	__u8	rf_tech_and_mode;
296*6a2968aaSIlan Elias 	__u8	rf_tech_specific_params_len;
297*6a2968aaSIlan Elias 
298*6a2968aaSIlan Elias 	union {
299*6a2968aaSIlan Elias 		struct rf_tech_specific_params_nfca_poll nfca_poll;
300*6a2968aaSIlan Elias 	} rf_tech_specific_params;
301*6a2968aaSIlan Elias 
302*6a2968aaSIlan Elias 	__u8	rf_interface_type;
303*6a2968aaSIlan Elias 	__u8	activation_params_len;
304*6a2968aaSIlan Elias 
305*6a2968aaSIlan Elias 	union {
306*6a2968aaSIlan Elias 		struct activation_params_nfca_poll_iso_dep nfca_poll_iso_dep;
307*6a2968aaSIlan Elias 	} activation_params;
308*6a2968aaSIlan Elias 
309*6a2968aaSIlan Elias } __packed;
310*6a2968aaSIlan Elias 
311*6a2968aaSIlan Elias #define NCI_OP_RF_DEACTIVATE_NTF	nci_opcode_pack(NCI_GID_RF_MGMT, 0x06)
312*6a2968aaSIlan Elias 
313*6a2968aaSIlan Elias #endif /* __NCI_H */
314