2005-04-16 15:20:36 -07:00
/*
* IrNET protocol module : Synchronous PPP over an IrDA socket .
*
* Jean II - HPL ` 00 - < jt @ hpl . hp . com >
*
* This file contains all definitions and declarations necessary for the
* IRDA part of the IrNET module ( dealing with IrTTP , IrIAS and co ) .
* This file is a private header , so other modules don ' t want to know
* what ' s in there . . .
*/
# ifndef IRNET_IRDA_H
# define IRNET_IRDA_H
/***************************** INCLUDES *****************************/
/* Please add other headers in irnet.h */
# include "irnet.h" /* Module global include */
/************************ CONSTANTS & MACROS ************************/
/*
* Name of the service ( socket name ) used by IrNET
*/
/* IAS object name (or part of it) */
# define IRNET_SERVICE_NAME "IrNetv1"
/* IAS attribute */
# define IRNET_IAS_VALUE "IrDA:TinyTP:LsapSel"
/* LMP notify name for client (only for /proc/net/irda/irlmp) */
# define IRNET_NOTIFY_NAME "IrNET socket"
/* LMP notify name for server (only for /proc/net/irda/irlmp) */
# define IRNET_NOTIFY_NAME_SERV "IrNET server"
/****************************** TYPES ******************************/
/*
* This is the main structure where we store all the data pertaining to
* the IrNET server ( listen for connection requests ) and the root
* of the IrNET socket list
*/
typedef struct irnet_root
{
irnet_socket s ; /* To pretend we are a client... */
/* Generic stuff */
int magic ; /* Paranoia */
int running ; /* Are we operational ? */
/* Link list of all IrNET instances opened */
hashbin_t * list ;
spinlock_t spinlock ; /* Serialize access to the list */
/* Note : the way hashbin has been designed is absolutely not
* reentrant , beware . . . So , we blindly protect all with spinlock */
/* Handle for the hint bit advertised in IrLMP */
void * skey ;
/* Server socket part */
struct ias_object * ias_obj ; /* Our service name + lsap in IAS */
} irnet_root ;
/**************************** PROTOTYPES ****************************/
/* ----------------------- CONTROL CHANNEL ----------------------- */
static void
irnet_post_event ( irnet_socket * ,
irnet_event ,
__u32 ,
__u32 ,
char * ,
__u16 ) ;
/* ----------------------- IRDA SUBROUTINES ----------------------- */
static inline int
irnet_open_tsap ( irnet_socket * ) ;
static inline __u8
irnet_ias_to_tsap ( irnet_socket * ,
int ,
struct ias_value * ) ;
static inline int
irnet_find_lsap_sel ( irnet_socket * ) ;
static inline int
irnet_connect_tsap ( irnet_socket * ) ;
static inline int
irnet_discover_next_daddr ( irnet_socket * ) ;
static inline int
irnet_discover_daddr_and_lsap_sel ( irnet_socket * ) ;
static inline int
irnet_dname_to_daddr ( irnet_socket * ) ;
/* ------------------------ SERVER SOCKET ------------------------ */
static inline int
irnet_daddr_to_dname ( irnet_socket * ) ;
static inline irnet_socket *
irnet_find_socket ( irnet_socket * ) ;
static inline int
irnet_connect_socket ( irnet_socket * ,
irnet_socket * ,
struct qos_info * ,
__u32 ,
__u8 ) ;
static inline void
irnet_disconnect_server ( irnet_socket * ,
struct sk_buff * ) ;
static inline int
irnet_setup_server ( void ) ;
static inline void
irnet_destroy_server ( void ) ;
/* ---------------------- IRDA-TTP CALLBACKS ---------------------- */
static int
irnet_data_indication ( void * , /* instance */
void * , /* sap */
struct sk_buff * ) ;
static void
irnet_disconnect_indication ( void * ,
void * ,
LM_REASON ,
struct sk_buff * ) ;
static void
irnet_connect_confirm ( void * ,
void * ,
struct qos_info * ,
__u32 ,
__u8 ,
struct sk_buff * ) ;
static void
irnet_flow_indication ( void * ,
void * ,
LOCAL_FLOW ) ;
static void
irnet_status_indication ( void * ,
LINK_STATUS ,
LOCK_STATUS ) ;
static void
irnet_connect_indication ( void * ,
void * ,
struct qos_info * ,
__u32 ,
__u8 ,
struct sk_buff * ) ;
/* -------------------- IRDA-IAS/LMP CALLBACKS -------------------- */
static void
irnet_getvalue_confirm ( int ,
__u16 ,
struct ias_value * ,
void * ) ;
static void
irnet_discovervalue_confirm ( int ,
2007-02-09 23:24:53 +09:00
__u16 ,
2005-04-16 15:20:36 -07:00
struct ias_value * ,
void * ) ;
# ifdef DISCOVERY_EVENTS
static void
irnet_discovery_indication ( discinfo_t * ,
DISCOVERY_MODE ,
void * ) ;
static void
irnet_expiry_indication ( discinfo_t * ,
DISCOVERY_MODE ,
void * ) ;
# endif
/**************************** VARIABLES ****************************/
/*
* The IrNET server . Listen to connection requests and co . . .
*/
static struct irnet_root irnet_server ;
/* Control channel stuff (note : extern) */
struct irnet_ctrl_channel irnet_events ;
/* The /proc/net/irda directory, defined elsewhere... */
# ifdef CONFIG_PROC_FS
extern struct proc_dir_entry * proc_irda ;
# endif /* CONFIG_PROC_FS */
# endif /* IRNET_IRDA_H */