Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
nfc
nci_core.h
Go to the documentation of this file.
1
/*
2
* The NFC Controller Interface is the communication protocol between an
3
* NFC Controller (NFCC) and a Device Host (DH).
4
*
5
* Copyright (C) 2011 Texas Instruments, Inc.
6
*
7
* Written by Ilan Elias <
[email protected]
>
8
*
9
* Acknowledgements:
10
* This file is based on hci_core.h, which was written
11
* by Maxim Krasnyansky.
12
*
13
* This program is free software; you can redistribute it and/or modify
14
* it under the terms of the GNU General Public License version 2
15
* as published by the Free Software Foundation
16
*
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
21
*
22
* You should have received a copy of the GNU General Public License
23
* along with this program; if not, write to the Free Software
24
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
*
26
*/
27
28
#ifndef __NCI_CORE_H
29
#define __NCI_CORE_H
30
31
#include <
linux/interrupt.h
>
32
#include <
linux/skbuff.h
>
33
34
#include <net/nfc/nfc.h>
35
#include <
net/nfc/nci.h
>
36
37
/* NCI device flags */
38
enum
nci_flag
{
39
NCI_INIT
,
40
NCI_UP
,
41
NCI_DATA_EXCHANGE
,
42
NCI_DATA_EXCHANGE_TO
,
43
};
44
45
/* NCI device states */
46
enum
nci_state
{
47
NCI_IDLE
,
48
NCI_DISCOVERY
,
49
NCI_W4_ALL_DISCOVERIES
,
50
NCI_W4_HOST_SELECT
,
51
NCI_POLL_ACTIVE
,
52
};
53
54
/* NCI timeouts */
55
#define NCI_RESET_TIMEOUT 5000
56
#define NCI_INIT_TIMEOUT 5000
57
#define NCI_SET_CONFIG_TIMEOUT 5000
58
#define NCI_RF_DISC_TIMEOUT 5000
59
#define NCI_RF_DISC_SELECT_TIMEOUT 5000
60
#define NCI_RF_DEACTIVATE_TIMEOUT 30000
61
#define NCI_CMD_TIMEOUT 5000
62
#define NCI_DATA_TIMEOUT 700
63
64
struct
nci_dev
;
65
66
struct
nci_ops
{
67
int
(*
open
)(
struct
nci_dev
*
ndev
);
68
int
(*
close
)(
struct
nci_dev
*
ndev
);
69
int
(*
send
)(
struct
sk_buff
*
skb
);
70
};
71
72
#define NCI_MAX_SUPPORTED_RF_INTERFACES 4
73
#define NCI_MAX_DISCOVERED_TARGETS 10
74
75
/* NCI Core structures */
76
struct
nci_dev
{
77
struct
nfc_dev
*
nfc_dev
;
78
struct
nci_ops
*
ops
;
79
80
int
tx_headroom
;
81
int
tx_tailroom
;
82
83
atomic_t
state
;
84
unsigned
long
flags
;
85
86
atomic_t
cmd_cnt
;
87
atomic_t
credits_cnt
;
88
89
struct
timer_list
cmd_timer
;
90
struct
timer_list
data_timer
;
91
92
struct
workqueue_struct
*
cmd_wq
;
93
struct
work_struct
cmd_work
;
94
95
struct
workqueue_struct
*
rx_wq
;
96
struct
work_struct
rx_work
;
97
98
struct
workqueue_struct
*
tx_wq
;
99
struct
work_struct
tx_work
;
100
101
struct
sk_buff_head
cmd_q
;
102
struct
sk_buff_head
rx_q
;
103
struct
sk_buff_head
tx_q
;
104
105
struct
mutex
req_lock
;
106
struct
completion
req_completion
;
107
__u32
req_status
;
108
__u32
req_result
;
109
110
void
*
driver_data
;
111
112
__u32
poll_prots
;
113
__u32
target_active_prot
;
114
115
struct
nfc_target
targets
[
NCI_MAX_DISCOVERED_TARGETS
];
116
int
n_targets
;
117
118
/* received during NCI_OP_CORE_RESET_RSP */
119
__u8
nci_ver
;
120
121
/* received during NCI_OP_CORE_INIT_RSP */
122
__u32
nfcc_features
;
123
__u8
num_supported_rf_interfaces
;
124
__u8
supported_rf_interfaces
125
[
NCI_MAX_SUPPORTED_RF_INTERFACES
];
126
__u8
max_logical_connections
;
127
__u16
max_routing_table_size
;
128
__u8
max_ctrl_pkt_payload_len
;
129
__u16
max_size_for_large_params
;
130
__u8
manufact_id
;
131
__u32
manufact_specific_info
;
132
133
/* received during NCI_OP_RF_INTF_ACTIVATED_NTF */
134
__u8
max_data_pkt_payload_size
;
135
__u8
initial_num_credits
;
136
137
/* stored during nci_data_exchange */
138
data_exchange_cb_t
data_exchange_cb
;
139
void
*
data_exchange_cb_context
;
140
struct
sk_buff
*
rx_data_reassembly
;
141
142
/* stored during intf_activated_ntf */
143
__u8
remote_gb
[
NFC_MAX_GT_LEN
];
144
__u8
remote_gb_len
;
145
};
146
147
/* ----- NCI Devices ----- */
148
struct
nci_dev
*
nci_allocate_device
(
struct
nci_ops
*
ops
,
149
__u32
supported_protocols,
150
int
tx_headroom
,
151
int
tx_tailroom
);
152
void
nci_free_device
(
struct
nci_dev
*
ndev
);
153
int
nci_register_device
(
struct
nci_dev
*
ndev
);
154
void
nci_unregister_device
(
struct
nci_dev
*
ndev
);
155
int
nci_recv_frame
(
struct
sk_buff
*
skb
);
156
157
static
inline
struct
sk_buff
*nci_skb_alloc(
struct
nci_dev
*
ndev
,
158
unsigned
int
len
,
159
gfp_t
how)
160
{
161
struct
sk_buff
*
skb
;
162
163
skb = alloc_skb(len + ndev->
tx_headroom
+ ndev->
tx_tailroom
, how);
164
if
(skb)
165
skb_reserve(skb, ndev->
tx_headroom
);
166
167
return
skb
;
168
}
169
170
static
inline
void
nci_set_parent_dev(
struct
nci_dev
*ndev,
struct
device
*
dev
)
171
{
172
nfc_set_parent_dev(ndev->
nfc_dev
, dev);
173
}
174
175
static
inline
void
nci_set_drvdata(
struct
nci_dev
*ndev,
void
*
data
)
176
{
177
ndev->
driver_data
=
data
;
178
}
179
180
static
inline
void
*nci_get_drvdata(
struct
nci_dev
*ndev)
181
{
182
return
ndev->
driver_data
;
183
}
184
185
void
nci_rsp_packet
(
struct
nci_dev
*ndev,
struct
sk_buff
*skb);
186
void
nci_ntf_packet
(
struct
nci_dev
*ndev,
struct
sk_buff
*skb);
187
void
nci_rx_data_packet
(
struct
nci_dev
*ndev,
struct
sk_buff
*skb);
188
int
nci_send_cmd
(
struct
nci_dev
*ndev,
__u16
opcode
,
__u8
plen
,
void
*
payload
);
189
int
nci_send_data
(
struct
nci_dev
*ndev,
__u8
conn_id
,
struct
sk_buff
*skb);
190
void
nci_data_exchange_complete
(
struct
nci_dev
*ndev,
struct
sk_buff
*skb,
191
int
err
);
192
void
nci_clear_target_list
(
struct
nci_dev
*ndev);
193
194
/* ----- NCI requests ----- */
195
#define NCI_REQ_DONE 0
196
#define NCI_REQ_PEND 1
197
#define NCI_REQ_CANCELED 2
198
199
void
nci_req_complete
(
struct
nci_dev
*ndev,
int
result
);
200
201
/* ----- NCI status code ----- */
202
int
nci_to_errno
(
__u8
code
);
203
204
#endif
/* __NCI_CORE_H */
Generated on Thu Jan 10 2013 14:53:14 for Linux Kernel by
1.8.2