2011-07-02 02:31:33 +04: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 20:56:16 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2011-07-02 02:31:33 +04:00
*/
# ifndef __LOCAL_NFC_H
# define __LOCAL_NFC_H
2011-09-18 12:19:34 +04:00
# include <net/nfc/nfc.h>
2011-07-02 02:31:35 +04:00
# include <net/sock.h>
2011-07-02 02:31:33 +04:00
2015-10-26 00:54:43 +03:00
# define NFC_TARGET_MODE_IDLE 0
# define NFC_TARGET_MODE_SLEEP 1
2011-07-02 02:31:35 +04:00
struct nfc_protocol {
int id ;
struct proto * proto ;
struct module * owner ;
int ( * create ) ( struct net * net , struct socket * sock ,
2015-05-09 05:09:13 +03:00
const struct nfc_protocol * nfc_proto , int kern ) ;
2011-07-02 02:31:35 +04:00
} ;
2011-07-02 02:31:36 +04: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 14:43:31 +04:00
struct nfc_sock_list {
struct hlist_head head ;
rwlock_t lock ;
} ;
2011-07-02 02:31:36 +04: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 13:43:06 +04:00
struct nfc_llcp_sdp_tlv ;
2011-12-14 19:43:12 +04: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 04:03:50 +04:00
u8 * nfc_llcp_general_bytes ( struct nfc_dev * dev , size_t * general_bytes_len ) ;
2012-05-31 02:05:50 +04:00
int nfc_llcp_data_received ( struct nfc_dev * dev , struct sk_buff * skb ) ;
2012-10-17 16:43:39 +04:00
struct nfc_llcp_local * nfc_llcp_find_local ( struct nfc_dev * dev ) ;
2011-12-14 19:43:12 +04:00
int __init nfc_llcp_init ( void ) ;
void nfc_llcp_exit ( void ) ;
2013-02-15 13:43:06 +04: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 19:43:12 +04:00
2011-07-02 02:31:36 +04:00
int __init rawsock_init ( void ) ;
void rawsock_exit ( void ) ;
2011-07-02 02:31:35 +04: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-02 02:31:33 +04:00
extern int nfc_devlist_generation ;
extern struct mutex nfc_devlist_mutex ;
2011-07-02 02:31:34 +04: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 21:43:04 +04:00
int nfc_genl_target_lost ( struct nfc_dev * dev , u32 target_idx ) ;
2011-07-02 02:31:34 +04:00
int nfc_genl_device_added ( struct nfc_dev * dev ) ;
int nfc_genl_device_removed ( struct nfc_dev * dev ) ;
2011-12-14 19:43:09 +04: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 15:21:13 +04:00
int nfc_genl_tm_activated ( struct nfc_dev * dev , u32 protocol ) ;
int nfc_genl_tm_deactivated ( struct nfc_dev * dev ) ;
2013-02-15 13:43:06 +04:00
int nfc_genl_llc_send_sdres ( struct nfc_dev * dev , struct hlist_head * sdres_list ) ;
2013-05-10 17:47:37 +04: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-02 00:26:16 +03:00
int nfc_genl_se_transaction ( struct nfc_dev * dev , u8 se_idx ,
struct nfc_evt_transaction * evt_transaction ) ;
2015-12-24 01:45:18 +03:00
int nfc_genl_se_connectivity ( struct nfc_dev * dev , u8 se_idx ) ;
2013-05-10 17:47:37 +04:00
2012-04-15 09:58:06 +04:00
struct nfc_dev * nfc_get_device ( unsigned int idx ) ;
2011-07-02 02:31:33 +04: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 03:19:43 +04:00
int nfc_fw_download ( struct nfc_dev * dev , const char * firmware_name ) ;
2013-07-19 16:57:55 +04:00
int nfc_genl_fw_download_done ( struct nfc_dev * dev , const char * firmware_name ,
u32 result ) ;
2013-04-29 19:13:27 +04:00
2011-09-18 12:19:33 +04:00
int nfc_dev_up ( struct nfc_dev * dev ) ;
int nfc_dev_down ( struct nfc_dev * dev ) ;
2012-05-15 17:57:06 +04:00
int nfc_start_poll ( struct nfc_dev * dev , u32 im_protocols , u32 tm_protocols ) ;
2011-07-02 02:31:33 +04:00
int nfc_stop_poll ( struct nfc_dev * dev ) ;
2012-03-05 04:03:50 +04:00
int nfc_dep_link_up ( struct nfc_dev * dev , int target_idx , u8 comm_mode ) ;
2011-12-14 19:43:09 +04:00
int nfc_dep_link_down ( struct nfc_dev * dev ) ;
2011-07-02 02:31:33 +04:00
int nfc_activate_target ( struct nfc_dev * dev , u32 target_idx , u32 protocol ) ;
2015-10-26 00:54:43 +03:00
int nfc_deactivate_target ( struct nfc_dev * dev , u32 target_idx , u8 mode ) ;
2011-07-02 02:31:33 +04:00
2012-03-05 04:03:53 +04: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-02 02:31:33 +04:00
2013-05-10 18:15:32 +04: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-02 02:31:33 +04:00
# endif /* __LOCAL_NFC_H */