xref: /OK3568_Linux_fs/kernel/net/nfc/nfc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2011 Instituto Nokia de Tecnologia
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Authors:
6*4882a593Smuzhiyun  *    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
7*4882a593Smuzhiyun  *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __LOCAL_NFC_H
11*4882a593Smuzhiyun #define __LOCAL_NFC_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <net/nfc/nfc.h>
14*4882a593Smuzhiyun #include <net/sock.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #define NFC_TARGET_MODE_IDLE 0
17*4882a593Smuzhiyun #define NFC_TARGET_MODE_SLEEP 1
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun struct nfc_protocol {
20*4882a593Smuzhiyun 	int id;
21*4882a593Smuzhiyun 	struct proto *proto;
22*4882a593Smuzhiyun 	struct module *owner;
23*4882a593Smuzhiyun 	int (*create)(struct net *net, struct socket *sock,
24*4882a593Smuzhiyun 		      const struct nfc_protocol *nfc_proto, int kern);
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun struct nfc_rawsock {
28*4882a593Smuzhiyun 	struct sock sk;
29*4882a593Smuzhiyun 	struct nfc_dev *dev;
30*4882a593Smuzhiyun 	u32 target_idx;
31*4882a593Smuzhiyun 	struct work_struct tx_work;
32*4882a593Smuzhiyun 	bool tx_work_scheduled;
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun struct nfc_sock_list {
36*4882a593Smuzhiyun 	struct hlist_head head;
37*4882a593Smuzhiyun 	rwlock_t          lock;
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define nfc_rawsock(sk) ((struct nfc_rawsock *) sk)
41*4882a593Smuzhiyun #define to_rawsock_sk(_tx_work) \
42*4882a593Smuzhiyun 	((struct sock *) container_of(_tx_work, struct nfc_rawsock, tx_work))
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct nfc_llcp_sdp_tlv;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun void nfc_llcp_mac_is_down(struct nfc_dev *dev);
47*4882a593Smuzhiyun void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,
48*4882a593Smuzhiyun 			u8 comm_mode, u8 rf_mode);
49*4882a593Smuzhiyun int nfc_llcp_register_device(struct nfc_dev *dev);
50*4882a593Smuzhiyun void nfc_llcp_unregister_device(struct nfc_dev *dev);
51*4882a593Smuzhiyun int nfc_llcp_set_remote_gb(struct nfc_dev *dev, u8 *gb, u8 gb_len);
52*4882a593Smuzhiyun u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len);
53*4882a593Smuzhiyun int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb);
54*4882a593Smuzhiyun struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev);
55*4882a593Smuzhiyun int __init nfc_llcp_init(void);
56*4882a593Smuzhiyun void nfc_llcp_exit(void);
57*4882a593Smuzhiyun void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp);
58*4882a593Smuzhiyun void nfc_llcp_free_sdp_tlv_list(struct hlist_head *head);
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun int __init rawsock_init(void);
61*4882a593Smuzhiyun void rawsock_exit(void);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun int __init af_nfc_init(void);
64*4882a593Smuzhiyun void af_nfc_exit(void);
65*4882a593Smuzhiyun int nfc_proto_register(const struct nfc_protocol *nfc_proto);
66*4882a593Smuzhiyun void nfc_proto_unregister(const struct nfc_protocol *nfc_proto);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun extern int nfc_devlist_generation;
69*4882a593Smuzhiyun extern struct mutex nfc_devlist_mutex;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun int __init nfc_genl_init(void);
72*4882a593Smuzhiyun void nfc_genl_exit(void);
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun void nfc_genl_data_init(struct nfc_genl_data *genl_data);
75*4882a593Smuzhiyun void nfc_genl_data_exit(struct nfc_genl_data *genl_data);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun int nfc_genl_targets_found(struct nfc_dev *dev);
78*4882a593Smuzhiyun int nfc_genl_target_lost(struct nfc_dev *dev, u32 target_idx);
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun int nfc_genl_device_added(struct nfc_dev *dev);
81*4882a593Smuzhiyun int nfc_genl_device_removed(struct nfc_dev *dev);
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun int nfc_genl_dep_link_up_event(struct nfc_dev *dev, u32 target_idx,
84*4882a593Smuzhiyun 			       u8 comm_mode, u8 rf_mode);
85*4882a593Smuzhiyun int nfc_genl_dep_link_down_event(struct nfc_dev *dev);
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun int nfc_genl_tm_activated(struct nfc_dev *dev, u32 protocol);
88*4882a593Smuzhiyun int nfc_genl_tm_deactivated(struct nfc_dev *dev);
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun int nfc_genl_llc_send_sdres(struct nfc_dev *dev, struct hlist_head *sdres_list);
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun int nfc_genl_se_added(struct nfc_dev *dev, u32 se_idx, u16 type);
93*4882a593Smuzhiyun int nfc_genl_se_removed(struct nfc_dev *dev, u32 se_idx);
94*4882a593Smuzhiyun int nfc_genl_se_transaction(struct nfc_dev *dev, u8 se_idx,
95*4882a593Smuzhiyun 			    struct nfc_evt_transaction *evt_transaction);
96*4882a593Smuzhiyun int nfc_genl_se_connectivity(struct nfc_dev *dev, u8 se_idx);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun struct nfc_dev *nfc_get_device(unsigned int idx);
99*4882a593Smuzhiyun 
nfc_put_device(struct nfc_dev * dev)100*4882a593Smuzhiyun static inline void nfc_put_device(struct nfc_dev *dev)
101*4882a593Smuzhiyun {
102*4882a593Smuzhiyun 	put_device(&dev->dev);
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun 
nfc_device_iter_init(struct class_dev_iter * iter)105*4882a593Smuzhiyun static inline void nfc_device_iter_init(struct class_dev_iter *iter)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun 	class_dev_iter_init(iter, &nfc_class, NULL, NULL);
108*4882a593Smuzhiyun }
109*4882a593Smuzhiyun 
nfc_device_iter_next(struct class_dev_iter * iter)110*4882a593Smuzhiyun static inline struct nfc_dev *nfc_device_iter_next(struct class_dev_iter *iter)
111*4882a593Smuzhiyun {
112*4882a593Smuzhiyun 	struct device *d = class_dev_iter_next(iter);
113*4882a593Smuzhiyun 	if (!d)
114*4882a593Smuzhiyun 		return NULL;
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun 	return to_nfc_dev(d);
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun 
nfc_device_iter_exit(struct class_dev_iter * iter)119*4882a593Smuzhiyun static inline void nfc_device_iter_exit(struct class_dev_iter *iter)
120*4882a593Smuzhiyun {
121*4882a593Smuzhiyun 	class_dev_iter_exit(iter);
122*4882a593Smuzhiyun }
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name);
125*4882a593Smuzhiyun int nfc_genl_fw_download_done(struct nfc_dev *dev, const char *firmware_name,
126*4882a593Smuzhiyun 			      u32 result);
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun int nfc_dev_up(struct nfc_dev *dev);
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun int nfc_dev_down(struct nfc_dev *dev);
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun int nfc_stop_poll(struct nfc_dev *dev);
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun int nfc_dep_link_up(struct nfc_dev *dev, int target_idx, u8 comm_mode);
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun int nfc_dep_link_down(struct nfc_dev *dev);
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol);
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx, u8 mode);
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb,
145*4882a593Smuzhiyun 		      data_exchange_cb_t cb, void *cb_context);
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun int nfc_enable_se(struct nfc_dev *dev, u32 se_idx);
148*4882a593Smuzhiyun int nfc_disable_se(struct nfc_dev *dev, u32 se_idx);
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #endif /* __LOCAL_NFC_H */
151