179 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *	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,
 | |
| 				    __u16,
 | |
| 				    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 */
 |