2011-07-01 19:31:33 -03:00
/*
* Copyright ( C ) 2011 Instituto Nokia de Tecnologia
*
* Authors :
* Lauro Ramos Venancio < lauro . venancio @ openbossa . org >
* Aloisio Almeida Jr < aloisio . almeida @ openbossa . org >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2013-12-06 08:56:16 -08:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2011-07-01 19:31:33 -03:00
*/
# ifndef __LOCAL_NFC_H
# define __LOCAL_NFC_H
2011-09-18 11:19:34 +03:00
# include <net/nfc/nfc.h>
2011-07-01 19:31:35 -03:00
# include <net/sock.h>
2011-07-01 19:31:33 -03:00
2015-10-25 22:54:43 +01:00
# define NFC_TARGET_MODE_IDLE 0
# define NFC_TARGET_MODE_SLEEP 1
2011-07-01 19:31:35 -03:00
struct nfc_protocol {
int id ;
struct proto * proto ;
struct module * owner ;
int ( * create ) ( struct net * net , struct socket * sock ,
2015-05-08 21:09:13 -05:00
const struct nfc_protocol * nfc_proto , int kern ) ;
2011-07-01 19:31:35 -03:00
} ;
2011-07-01 19:31:36 -03:00
struct nfc_rawsock {
struct sock sk ;
struct nfc_dev * dev ;
u32 target_idx ;
struct work_struct tx_work ;
bool tx_work_scheduled ;
} ;
2014-05-05 19:43:31 +09:00
struct nfc_sock_list {
struct hlist_head head ;
rwlock_t lock ;
} ;
2011-07-01 19:31:36 -03:00
# define nfc_rawsock(sk) ((struct nfc_rawsock *) sk)
# define to_rawsock_sk(_tx_work) \
( ( struct sock * ) container_of ( _tx_work , struct nfc_rawsock , tx_work ) )
2013-02-15 10:43:06 +01:00
struct nfc_llcp_sdp_tlv ;
2011-12-14 16:43:12 +01:00
void nfc_llcp_mac_is_down ( struct nfc_dev * dev ) ;
void nfc_llcp_mac_is_up ( struct nfc_dev * dev , u32 target_idx ,
u8 comm_mode , u8 rf_mode ) ;
int nfc_llcp_register_device ( struct nfc_dev * dev ) ;
void nfc_llcp_unregister_device ( struct nfc_dev * dev ) ;
int nfc_llcp_set_remote_gb ( struct nfc_dev * dev , u8 * gb , u8 gb_len ) ;
2012-03-05 01:03:50 +01:00
u8 * nfc_llcp_general_bytes ( struct nfc_dev * dev , size_t * general_bytes_len ) ;
2012-05-31 00:05:50 +02:00
int nfc_llcp_data_received ( struct nfc_dev * dev , struct sk_buff * skb ) ;
2012-10-17 14:43:39 +02:00
struct nfc_llcp_local * nfc_llcp_find_local ( struct nfc_dev * dev ) ;
2011-12-14 16:43:12 +01:00
int __init nfc_llcp_init ( void ) ;
void nfc_llcp_exit ( void ) ;
2013-02-15 10:43:06 +01:00
void nfc_llcp_free_sdp_tlv ( struct nfc_llcp_sdp_tlv * sdp ) ;
void nfc_llcp_free_sdp_tlv_list ( struct hlist_head * head ) ;
2011-12-14 16:43:12 +01:00
2011-07-01 19:31:36 -03:00
int __init rawsock_init ( void ) ;
void rawsock_exit ( void ) ;
2011-07-01 19:31:35 -03:00
int __init af_nfc_init ( void ) ;
void af_nfc_exit ( void ) ;
int nfc_proto_register ( const struct nfc_protocol * nfc_proto ) ;
void nfc_proto_unregister ( const struct nfc_protocol * nfc_proto ) ;
2011-07-01 19:31:33 -03:00
extern int nfc_devlist_generation ;
extern struct mutex nfc_devlist_mutex ;
2011-07-01 19:31:34 -03:00
int __init nfc_genl_init ( void ) ;
void nfc_genl_exit ( void ) ;
void nfc_genl_data_init ( struct nfc_genl_data * genl_data ) ;
void nfc_genl_data_exit ( struct nfc_genl_data * genl_data ) ;
int nfc_genl_targets_found ( struct nfc_dev * dev ) ;
2012-04-10 19:43:04 +02:00
int nfc_genl_target_lost ( struct nfc_dev * dev , u32 target_idx ) ;
2011-07-01 19:31:34 -03:00
int nfc_genl_device_added ( struct nfc_dev * dev ) ;
int nfc_genl_device_removed ( struct nfc_dev * dev ) ;
2011-12-14 16:43:09 +01:00
int nfc_genl_dep_link_up_event ( struct nfc_dev * dev , u32 target_idx ,
u8 comm_mode , u8 rf_mode ) ;
int nfc_genl_dep_link_down_event ( struct nfc_dev * dev ) ;
2012-06-01 13:21:13 +02:00
int nfc_genl_tm_activated ( struct nfc_dev * dev , u32 protocol ) ;
int nfc_genl_tm_deactivated ( struct nfc_dev * dev ) ;
2013-02-15 10:43:06 +01:00
int nfc_genl_llc_send_sdres ( struct nfc_dev * dev , struct hlist_head * sdres_list ) ;
2013-05-10 15:47:37 +02:00
int nfc_genl_se_added ( struct nfc_dev * dev , u32 se_idx , u16 type ) ;
int nfc_genl_se_removed ( struct nfc_dev * dev , u32 se_idx ) ;
2015-02-01 22:26:16 +01:00
int nfc_genl_se_transaction ( struct nfc_dev * dev , u8 se_idx ,
struct nfc_evt_transaction * evt_transaction ) ;
2015-12-23 23:45:18 +01:00
int nfc_genl_se_connectivity ( struct nfc_dev * dev , u8 se_idx ) ;
2013-05-10 15:47:37 +02:00
2012-04-15 05:58:06 +00:00
struct nfc_dev * nfc_get_device ( unsigned int idx ) ;
2011-07-01 19:31:33 -03:00
static inline void nfc_put_device ( struct nfc_dev * dev )
{
put_device ( & dev - > dev ) ;
}
static inline void nfc_device_iter_init ( struct class_dev_iter * iter )
{
class_dev_iter_init ( iter , & nfc_class , NULL , NULL ) ;
}
static inline struct nfc_dev * nfc_device_iter_next ( struct class_dev_iter * iter )
{
struct device * d = class_dev_iter_next ( iter ) ;
if ( ! d )
return NULL ;
return to_nfc_dev ( d ) ;
}
static inline void nfc_device_iter_exit ( struct class_dev_iter * iter )
{
class_dev_iter_exit ( iter ) ;
}
2013-07-31 01:19:43 +02:00
int nfc_fw_download ( struct nfc_dev * dev , const char * firmware_name ) ;
2013-07-19 14:57:55 +02:00
int nfc_genl_fw_download_done ( struct nfc_dev * dev , const char * firmware_name ,
u32 result ) ;
2013-04-29 17:13:27 +02:00
2011-09-18 11:19:33 +03:00
int nfc_dev_up ( struct nfc_dev * dev ) ;
int nfc_dev_down ( struct nfc_dev * dev ) ;
2012-05-15 15:57:06 +02:00
int nfc_start_poll ( struct nfc_dev * dev , u32 im_protocols , u32 tm_protocols ) ;
2011-07-01 19:31:33 -03:00
int nfc_stop_poll ( struct nfc_dev * dev ) ;
2012-03-05 01:03:50 +01:00
int nfc_dep_link_up ( struct nfc_dev * dev , int target_idx , u8 comm_mode ) ;
2011-12-14 16:43:09 +01:00
int nfc_dep_link_down ( struct nfc_dev * dev ) ;
2011-07-01 19:31:33 -03:00
int nfc_activate_target ( struct nfc_dev * dev , u32 target_idx , u32 protocol ) ;
2015-10-25 22:54:43 +01:00
int nfc_deactivate_target ( struct nfc_dev * dev , u32 target_idx , u8 mode ) ;
2011-07-01 19:31:33 -03:00
2012-03-05 01:03:53 +01:00
int nfc_data_exchange ( struct nfc_dev * dev , u32 target_idx , struct sk_buff * skb ,
data_exchange_cb_t cb , void * cb_context ) ;
2011-07-01 19:31:33 -03:00
2013-05-10 16:15:32 +02:00
int nfc_enable_se ( struct nfc_dev * dev , u32 se_idx ) ;
int nfc_disable_se ( struct nfc_dev * dev , u32 se_idx ) ;
2011-07-01 19:31:33 -03:00
# endif /* __LOCAL_NFC_H */