diff options
author | Lauro Ramos Venancio <lauro.venancio@openbossa.org> | 2011-07-01 18:31:34 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-05 15:26:57 -0400 |
commit | 4d12b8b129f170d0fc3188de1e51a2a1b0f87730 (patch) | |
tree | e37bbec5da917fee80706516c56fb41fcd03a1b5 /include | |
parent | 3e256b8f8dfa309a80b5dece388d85d9a9801a29 (diff) |
NFC: add nfc generic netlink interface
The NFC generic netlink interface exports the NFC control operations
to the user space.
Signed-off-by: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
Signed-off-by: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nfc.h | 112 | ||||
-rw-r--r-- | include/net/nfc.h | 21 |
2 files changed, 133 insertions, 0 deletions
diff --git a/include/linux/nfc.h b/include/linux/nfc.h new file mode 100644 index 000000000000..1170476d270a --- /dev/null +++ b/include/linux/nfc.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Instituto Nokia de Tecnologia | ||
3 | * | ||
4 | * Authors: | ||
5 | * Lauro Ramos Venancio <lauro.venancio@openbossa.org> | ||
6 | * Aloisio Almeida Jr <aloisio.almeida@openbossa.org> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the | ||
20 | * Free Software Foundation, Inc., | ||
21 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | #ifndef __LINUX_NFC_H | ||
25 | #define __LINUX_NFC_H | ||
26 | |||
27 | #define NFC_GENL_NAME "nfc" | ||
28 | #define NFC_GENL_VERSION 1 | ||
29 | |||
30 | #define NFC_GENL_MCAST_EVENT_NAME "events" | ||
31 | |||
32 | /** | ||
33 | * enum nfc_commands - supported nfc commands | ||
34 | * | ||
35 | * @NFC_CMD_UNSPEC: unspecified command | ||
36 | * | ||
37 | * @NFC_CMD_GET_DEVICE: request information about a device (requires | ||
38 | * %NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices | ||
39 | * @NFC_CMD_START_POLL: start polling for targets using the given protocols | ||
40 | * (requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS) | ||
41 | * @NFC_CMD_STOP_POLL: stop polling for targets (requires | ||
42 | * %NFC_ATTR_DEVICE_INDEX) | ||
43 | * @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires | ||
44 | * %NFC_ATTR_DEVICE_INDEX) | ||
45 | * @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found | ||
46 | * (it sends %NFC_ATTR_DEVICE_INDEX) | ||
47 | * @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred | ||
48 | * (it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and | ||
49 | * %NFC_ATTR_PROTOCOLS) | ||
50 | * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed | ||
51 | * (it sends %NFC_ATTR_DEVICE_INDEX) | ||
52 | */ | ||
53 | enum nfc_commands { | ||
54 | NFC_CMD_UNSPEC, | ||
55 | NFC_CMD_GET_DEVICE, | ||
56 | NFC_CMD_START_POLL, | ||
57 | NFC_CMD_STOP_POLL, | ||
58 | NFC_CMD_GET_TARGET, | ||
59 | NFC_EVENT_TARGETS_FOUND, | ||
60 | NFC_EVENT_DEVICE_ADDED, | ||
61 | NFC_EVENT_DEVICE_REMOVED, | ||
62 | /* private: internal use only */ | ||
63 | __NFC_CMD_AFTER_LAST | ||
64 | }; | ||
65 | #define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1) | ||
66 | |||
67 | /** | ||
68 | * enum nfc_attrs - supported nfc attributes | ||
69 | * | ||
70 | * @NFC_ATTR_UNSPEC: unspecified attribute | ||
71 | * | ||
72 | * @NFC_ATTR_DEVICE_INDEX: index of nfc device | ||
73 | * @NFC_ATTR_DEVICE_NAME: device name, max 8 chars | ||
74 | * @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from | ||
75 | * NFC_PROTO_*_MASK constants | ||
76 | * @NFC_ATTR_TARGET_INDEX: index of the nfc target | ||
77 | * @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID | ||
78 | * @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the | ||
79 | * target is not NFC-Forum compliant) | ||
80 | */ | ||
81 | enum nfc_attrs { | ||
82 | NFC_ATTR_UNSPEC, | ||
83 | NFC_ATTR_DEVICE_INDEX, | ||
84 | NFC_ATTR_DEVICE_NAME, | ||
85 | NFC_ATTR_PROTOCOLS, | ||
86 | NFC_ATTR_TARGET_INDEX, | ||
87 | NFC_ATTR_TARGET_SENS_RES, | ||
88 | NFC_ATTR_TARGET_SEL_RES, | ||
89 | /* private: internal use only */ | ||
90 | __NFC_ATTR_AFTER_LAST | ||
91 | }; | ||
92 | #define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1) | ||
93 | |||
94 | #define NFC_DEVICE_NAME_MAXSIZE 8 | ||
95 | |||
96 | /* NFC protocols */ | ||
97 | #define NFC_PROTO_JEWEL 1 | ||
98 | #define NFC_PROTO_MIFARE 2 | ||
99 | #define NFC_PROTO_FELICA 3 | ||
100 | #define NFC_PROTO_ISO14443 4 | ||
101 | #define NFC_PROTO_NFC_DEP 5 | ||
102 | |||
103 | #define NFC_PROTO_MAX 6 | ||
104 | |||
105 | /* NFC protocols masks used in bitsets */ | ||
106 | #define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL) | ||
107 | #define NFC_PROTO_MIFARE_MASK (1 << NFC_PROTO_MIFARE) | ||
108 | #define NFC_PROTO_FELICA_MASK (1 << NFC_PROTO_FELICA) | ||
109 | #define NFC_PROTO_ISO14443_MASK (1 << NFC_PROTO_ISO14443) | ||
110 | #define NFC_PROTO_NFC_DEP_MASK (1 << NFC_PROTO_NFC_DEP) | ||
111 | |||
112 | #endif /*__LINUX_NFC_H */ | ||
diff --git a/include/net/nfc.h b/include/net/nfc.h index c57b579c8301..cc0130312f70 100644 --- a/include/net/nfc.h +++ b/include/net/nfc.h | |||
@@ -58,10 +58,28 @@ struct nfc_ops { | |||
58 | void *cb_context); | 58 | void *cb_context); |
59 | }; | 59 | }; |
60 | 60 | ||
61 | struct nfc_target { | ||
62 | u32 idx; | ||
63 | u32 supported_protocols; | ||
64 | u16 sens_res; | ||
65 | u8 sel_res; | ||
66 | }; | ||
67 | |||
68 | struct nfc_genl_data { | ||
69 | u32 poll_req_pid; | ||
70 | struct mutex genl_data_mutex; | ||
71 | }; | ||
72 | |||
61 | struct nfc_dev { | 73 | struct nfc_dev { |
62 | unsigned idx; | 74 | unsigned idx; |
75 | unsigned target_idx; | ||
76 | struct nfc_target *targets; | ||
77 | int n_targets; | ||
78 | int targets_generation; | ||
79 | spinlock_t targets_lock; | ||
63 | struct device dev; | 80 | struct device dev; |
64 | bool polling; | 81 | bool polling; |
82 | struct nfc_genl_data genl_data; | ||
65 | u32 supported_protocols; | 83 | u32 supported_protocols; |
66 | 84 | ||
67 | struct nfc_ops *ops; | 85 | struct nfc_ops *ops; |
@@ -132,4 +150,7 @@ static inline const char *nfc_device_name(struct nfc_dev *dev) | |||
132 | 150 | ||
133 | struct sk_buff *nfc_alloc_skb(unsigned int size, gfp_t gfp); | 151 | struct sk_buff *nfc_alloc_skb(unsigned int size, gfp_t gfp); |
134 | 152 | ||
153 | int nfc_targets_found(struct nfc_dev *dev, struct nfc_target *targets, | ||
154 | int ntargets); | ||
155 | |||
135 | #endif /* __NET_NFC_H */ | 156 | #endif /* __NET_NFC_H */ |