diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2013-04-26 05:49:40 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-04-26 06:37:28 -0400 |
commit | 30cc4587659e1c9b1bfade8b2a757d91e04758ab (patch) | |
tree | 93a7ada48f9581851cdce979f09bcd0c3d4dd3d9 /net/nfc/llcp/llcp.h | |
parent | b006ed545cbadf1ebd4683719554742d20dbcede (diff) |
NFC: Move LLCP code to the NFC top level diirectory
And stop making it optional. LLCP is a fundamental part of the NFC
specifications and making it optional does not make much sense.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc/llcp/llcp.h')
-rw-r--r-- | net/nfc/llcp/llcp.h | 267 |
1 files changed, 0 insertions, 267 deletions
diff --git a/net/nfc/llcp/llcp.h b/net/nfc/llcp/llcp.h deleted file mode 100644 index ff8c434f7df8..000000000000 --- a/net/nfc/llcp/llcp.h +++ /dev/null | |||
@@ -1,267 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the | ||
16 | * Free Software Foundation, Inc., | ||
17 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | */ | ||
19 | |||
20 | enum llcp_state { | ||
21 | LLCP_CONNECTED = 1, /* wait_for_packet() wants that */ | ||
22 | LLCP_CLOSED, | ||
23 | LLCP_BOUND, | ||
24 | LLCP_LISTEN, | ||
25 | }; | ||
26 | |||
27 | #define LLCP_DEFAULT_LTO 100 | ||
28 | #define LLCP_DEFAULT_RW 1 | ||
29 | #define LLCP_DEFAULT_MIU 128 | ||
30 | |||
31 | #define LLCP_MAX_LTO 0xff | ||
32 | #define LLCP_MAX_RW 15 | ||
33 | #define LLCP_MAX_MIUX 0x7ff | ||
34 | #define LLCP_MAX_MIU (LLCP_MAX_MIUX + 128) | ||
35 | |||
36 | #define LLCP_WKS_NUM_SAP 16 | ||
37 | #define LLCP_SDP_NUM_SAP 16 | ||
38 | #define LLCP_LOCAL_NUM_SAP 32 | ||
39 | #define LLCP_LOCAL_SAP_OFFSET (LLCP_WKS_NUM_SAP + LLCP_SDP_NUM_SAP) | ||
40 | #define LLCP_MAX_SAP (LLCP_WKS_NUM_SAP + LLCP_SDP_NUM_SAP + LLCP_LOCAL_NUM_SAP) | ||
41 | #define LLCP_SDP_UNBOUND (LLCP_MAX_SAP + 1) | ||
42 | |||
43 | struct nfc_llcp_sock; | ||
44 | |||
45 | struct llcp_sock_list { | ||
46 | struct hlist_head head; | ||
47 | rwlock_t lock; | ||
48 | }; | ||
49 | |||
50 | struct nfc_llcp_sdp_tlv { | ||
51 | u8 *tlv; | ||
52 | u8 tlv_len; | ||
53 | |||
54 | char *uri; | ||
55 | u8 tid; | ||
56 | u8 sap; | ||
57 | |||
58 | unsigned long time; | ||
59 | |||
60 | struct hlist_node node; | ||
61 | }; | ||
62 | |||
63 | struct nfc_llcp_local { | ||
64 | struct list_head list; | ||
65 | struct nfc_dev *dev; | ||
66 | |||
67 | struct kref ref; | ||
68 | |||
69 | struct mutex sdp_lock; | ||
70 | |||
71 | struct timer_list link_timer; | ||
72 | struct sk_buff_head tx_queue; | ||
73 | struct work_struct tx_work; | ||
74 | struct work_struct rx_work; | ||
75 | struct sk_buff *rx_pending; | ||
76 | struct work_struct timeout_work; | ||
77 | |||
78 | u32 target_idx; | ||
79 | u8 rf_mode; | ||
80 | u8 comm_mode; | ||
81 | u8 lto; | ||
82 | u8 rw; | ||
83 | __be16 miux; | ||
84 | unsigned long local_wks; /* Well known services */ | ||
85 | unsigned long local_sdp; /* Local services */ | ||
86 | unsigned long local_sap; /* Local SAPs, not available for discovery */ | ||
87 | atomic_t local_sdp_cnt[LLCP_SDP_NUM_SAP]; | ||
88 | |||
89 | /* local */ | ||
90 | u8 gb[NFC_MAX_GT_LEN]; | ||
91 | u8 gb_len; | ||
92 | |||
93 | /* remote */ | ||
94 | u8 remote_gb[NFC_MAX_GT_LEN]; | ||
95 | u8 remote_gb_len; | ||
96 | |||
97 | u8 remote_version; | ||
98 | u16 remote_miu; | ||
99 | u16 remote_lto; | ||
100 | u8 remote_opt; | ||
101 | u16 remote_wks; | ||
102 | |||
103 | struct mutex sdreq_lock; | ||
104 | struct hlist_head pending_sdreqs; | ||
105 | struct timer_list sdreq_timer; | ||
106 | struct work_struct sdreq_timeout_work; | ||
107 | u8 sdreq_next_tid; | ||
108 | |||
109 | /* sockets array */ | ||
110 | struct llcp_sock_list sockets; | ||
111 | struct llcp_sock_list connecting_sockets; | ||
112 | struct llcp_sock_list raw_sockets; | ||
113 | }; | ||
114 | |||
115 | struct nfc_llcp_sock { | ||
116 | struct sock sk; | ||
117 | struct nfc_dev *dev; | ||
118 | struct nfc_llcp_local *local; | ||
119 | u32 target_idx; | ||
120 | u32 nfc_protocol; | ||
121 | |||
122 | /* Link parameters */ | ||
123 | u8 ssap; | ||
124 | u8 dsap; | ||
125 | char *service_name; | ||
126 | size_t service_name_len; | ||
127 | u8 rw; | ||
128 | __be16 miux; | ||
129 | |||
130 | |||
131 | /* Remote link parameters */ | ||
132 | u8 remote_rw; | ||
133 | u16 remote_miu; | ||
134 | |||
135 | /* Link variables */ | ||
136 | u8 send_n; | ||
137 | u8 send_ack_n; | ||
138 | u8 recv_n; | ||
139 | u8 recv_ack_n; | ||
140 | |||
141 | /* Is the remote peer ready to receive */ | ||
142 | u8 remote_ready; | ||
143 | |||
144 | /* Reserved source SAP */ | ||
145 | u8 reserved_ssap; | ||
146 | |||
147 | struct sk_buff_head tx_queue; | ||
148 | struct sk_buff_head tx_pending_queue; | ||
149 | |||
150 | struct list_head accept_queue; | ||
151 | struct sock *parent; | ||
152 | }; | ||
153 | |||
154 | struct nfc_llcp_ui_cb { | ||
155 | __u8 dsap; | ||
156 | __u8 ssap; | ||
157 | }; | ||
158 | |||
159 | #define nfc_llcp_ui_skb_cb(__skb) ((struct nfc_llcp_ui_cb *)&((__skb)->cb[0])) | ||
160 | |||
161 | #define nfc_llcp_sock(sk) ((struct nfc_llcp_sock *) (sk)) | ||
162 | #define nfc_llcp_dev(sk) (nfc_llcp_sock((sk))->dev) | ||
163 | |||
164 | #define LLCP_HEADER_SIZE 2 | ||
165 | #define LLCP_SEQUENCE_SIZE 1 | ||
166 | #define LLCP_AGF_PDU_HEADER_SIZE 2 | ||
167 | |||
168 | /* LLCP versions: 1.1 is 1.0 plus SDP */ | ||
169 | #define LLCP_VERSION_10 0x10 | ||
170 | #define LLCP_VERSION_11 0x11 | ||
171 | |||
172 | /* LLCP PDU types */ | ||
173 | #define LLCP_PDU_SYMM 0x0 | ||
174 | #define LLCP_PDU_PAX 0x1 | ||
175 | #define LLCP_PDU_AGF 0x2 | ||
176 | #define LLCP_PDU_UI 0x3 | ||
177 | #define LLCP_PDU_CONNECT 0x4 | ||
178 | #define LLCP_PDU_DISC 0x5 | ||
179 | #define LLCP_PDU_CC 0x6 | ||
180 | #define LLCP_PDU_DM 0x7 | ||
181 | #define LLCP_PDU_FRMR 0x8 | ||
182 | #define LLCP_PDU_SNL 0x9 | ||
183 | #define LLCP_PDU_I 0xc | ||
184 | #define LLCP_PDU_RR 0xd | ||
185 | #define LLCP_PDU_RNR 0xe | ||
186 | |||
187 | /* Parameters TLV types */ | ||
188 | #define LLCP_TLV_VERSION 0x1 | ||
189 | #define LLCP_TLV_MIUX 0x2 | ||
190 | #define LLCP_TLV_WKS 0x3 | ||
191 | #define LLCP_TLV_LTO 0x4 | ||
192 | #define LLCP_TLV_RW 0x5 | ||
193 | #define LLCP_TLV_SN 0x6 | ||
194 | #define LLCP_TLV_OPT 0x7 | ||
195 | #define LLCP_TLV_SDREQ 0x8 | ||
196 | #define LLCP_TLV_SDRES 0x9 | ||
197 | #define LLCP_TLV_MAX 0xa | ||
198 | |||
199 | /* Well known LLCP SAP */ | ||
200 | #define LLCP_SAP_SDP 0x1 | ||
201 | #define LLCP_SAP_IP 0x2 | ||
202 | #define LLCP_SAP_OBEX 0x3 | ||
203 | #define LLCP_SAP_SNEP 0x4 | ||
204 | #define LLCP_SAP_MAX 0xff | ||
205 | |||
206 | /* Disconnection reason code */ | ||
207 | #define LLCP_DM_DISC 0x00 | ||
208 | #define LLCP_DM_NOCONN 0x01 | ||
209 | #define LLCP_DM_NOBOUND 0x02 | ||
210 | #define LLCP_DM_REJ 0x03 | ||
211 | |||
212 | |||
213 | void nfc_llcp_sock_link(struct llcp_sock_list *l, struct sock *s); | ||
214 | void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *s); | ||
215 | void nfc_llcp_socket_remote_param_init(struct nfc_llcp_sock *sock); | ||
216 | struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); | ||
217 | struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local); | ||
218 | int nfc_llcp_local_put(struct nfc_llcp_local *local); | ||
219 | u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local, | ||
220 | struct nfc_llcp_sock *sock); | ||
221 | u8 nfc_llcp_get_local_ssap(struct nfc_llcp_local *local); | ||
222 | void nfc_llcp_put_ssap(struct nfc_llcp_local *local, u8 ssap); | ||
223 | int nfc_llcp_queue_i_frames(struct nfc_llcp_sock *sock); | ||
224 | void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local, | ||
225 | struct sk_buff *skb, u8 direction); | ||
226 | |||
227 | /* Sock API */ | ||
228 | struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp); | ||
229 | void nfc_llcp_sock_free(struct nfc_llcp_sock *sock); | ||
230 | void nfc_llcp_accept_unlink(struct sock *sk); | ||
231 | void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk); | ||
232 | struct sock *nfc_llcp_accept_dequeue(struct sock *sk, struct socket *newsock); | ||
233 | |||
234 | /* TLV API */ | ||
235 | int nfc_llcp_parse_gb_tlv(struct nfc_llcp_local *local, | ||
236 | u8 *tlv_array, u16 tlv_array_len); | ||
237 | int nfc_llcp_parse_connection_tlv(struct nfc_llcp_sock *sock, | ||
238 | u8 *tlv_array, u16 tlv_array_len); | ||
239 | |||
240 | /* Commands API */ | ||
241 | void nfc_llcp_recv(void *data, struct sk_buff *skb, int err); | ||
242 | u8 *nfc_llcp_build_tlv(u8 type, u8 *value, u8 value_length, u8 *tlv_length); | ||
243 | struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdres_tlv(u8 tid, u8 sap); | ||
244 | struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdreq_tlv(u8 tid, char *uri, | ||
245 | size_t uri_len); | ||
246 | void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp); | ||
247 | void nfc_llcp_free_sdp_tlv_list(struct hlist_head *sdp_head); | ||
248 | void nfc_llcp_recv(void *data, struct sk_buff *skb, int err); | ||
249 | int nfc_llcp_disconnect(struct nfc_llcp_sock *sock); | ||
250 | int nfc_llcp_send_symm(struct nfc_dev *dev); | ||
251 | int nfc_llcp_send_connect(struct nfc_llcp_sock *sock); | ||
252 | int nfc_llcp_send_cc(struct nfc_llcp_sock *sock); | ||
253 | int nfc_llcp_send_snl_sdres(struct nfc_llcp_local *local, | ||
254 | struct hlist_head *tlv_list, size_t tlvs_len); | ||
255 | int nfc_llcp_send_snl_sdreq(struct nfc_llcp_local *local, | ||
256 | struct hlist_head *tlv_list, size_t tlvs_len); | ||
257 | int nfc_llcp_send_dm(struct nfc_llcp_local *local, u8 ssap, u8 dsap, u8 reason); | ||
258 | int nfc_llcp_send_disconnect(struct nfc_llcp_sock *sock); | ||
259 | int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock, | ||
260 | struct msghdr *msg, size_t len); | ||
261 | int nfc_llcp_send_ui_frame(struct nfc_llcp_sock *sock, u8 ssap, u8 dsap, | ||
262 | struct msghdr *msg, size_t len); | ||
263 | int nfc_llcp_send_rr(struct nfc_llcp_sock *sock); | ||
264 | |||
265 | /* Socket API */ | ||
266 | int __init nfc_llcp_sock_init(void); | ||
267 | void nfc_llcp_sock_exit(void); | ||