/* * 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 */