1 /* 2 * IrNET protocol module : Synchronous PPP over an IrDA socket. 3 * 4 * Jean II - HPL `00 - <jt@hpl.hp.com> 5 * 6 * This file contains all definitions and declarations necessary for the 7 * IRDA part of the IrNET module (dealing with IrTTP, IrIAS and co). 8 * This file is a private header, so other modules don't want to know 9 * what's in there... 10 */ 11 12 #ifndef IRNET_IRDA_H 13 #define IRNET_IRDA_H 14 15 /***************************** INCLUDES *****************************/ 16 /* Please add other headers in irnet.h */ 17 18 #include "irnet.h" /* Module global include */ 19 20 /************************ CONSTANTS & MACROS ************************/ 21 22 /* 23 * Name of the service (socket name) used by IrNET 24 */ 25 /* IAS object name (or part of it) */ 26 #define IRNET_SERVICE_NAME "IrNetv1" 27 /* IAS attribute */ 28 #define IRNET_IAS_VALUE "IrDA:TinyTP:LsapSel" 29 /* LMP notify name for client (only for /proc/net/irda/irlmp) */ 30 #define IRNET_NOTIFY_NAME "IrNET socket" 31 /* LMP notify name for server (only for /proc/net/irda/irlmp) */ 32 #define IRNET_NOTIFY_NAME_SERV "IrNET server" 33 34 /****************************** TYPES ******************************/ 35 36 /* 37 * This is the main structure where we store all the data pertaining to 38 * the IrNET server (listen for connection requests) and the root 39 * of the IrNET socket list 40 */ 41 typedef struct irnet_root 42 { 43 irnet_socket s; /* To pretend we are a client... */ 44 45 /* Generic stuff */ 46 int magic; /* Paranoia */ 47 int running; /* Are we operational ? */ 48 49 /* Link list of all IrNET instances opened */ 50 hashbin_t * list; 51 spinlock_t spinlock; /* Serialize access to the list */ 52 /* Note : the way hashbin has been designed is absolutely not 53 * reentrant, beware... So, we blindly protect all with spinlock */ 54 55 /* Handle for the hint bit advertised in IrLMP */ 56 void * skey; 57 58 /* Server socket part */ 59 struct ias_object * ias_obj; /* Our service name + lsap in IAS */ 60 61 } irnet_root; 62 63 64 /**************************** PROTOTYPES ****************************/ 65 66 /* ----------------------- CONTROL CHANNEL ----------------------- */ 67 static void 68 irnet_post_event(irnet_socket *, 69 irnet_event, 70 __u32, 71 __u32, 72 char *, 73 __u16); 74 /* ----------------------- IRDA SUBROUTINES ----------------------- */ 75 static inline int 76 irnet_open_tsap(irnet_socket *); 77 static inline __u8 78 irnet_ias_to_tsap(irnet_socket *, 79 int, 80 struct ias_value *); 81 static inline int 82 irnet_find_lsap_sel(irnet_socket *); 83 static inline int 84 irnet_connect_tsap(irnet_socket *); 85 static inline int 86 irnet_discover_next_daddr(irnet_socket *); 87 static inline int 88 irnet_discover_daddr_and_lsap_sel(irnet_socket *); 89 static inline int 90 irnet_dname_to_daddr(irnet_socket *); 91 /* ------------------------ SERVER SOCKET ------------------------ */ 92 static inline int 93 irnet_daddr_to_dname(irnet_socket *); 94 static inline irnet_socket * 95 irnet_find_socket(irnet_socket *); 96 static inline int 97 irnet_connect_socket(irnet_socket *, 98 irnet_socket *, 99 struct qos_info *, 100 __u32, 101 __u8); 102 static inline void 103 irnet_disconnect_server(irnet_socket *, 104 struct sk_buff *); 105 static inline int 106 irnet_setup_server(void); 107 static inline void 108 irnet_destroy_server(void); 109 /* ---------------------- IRDA-TTP CALLBACKS ---------------------- */ 110 static int 111 irnet_data_indication(void *, /* instance */ 112 void *, /* sap */ 113 struct sk_buff *); 114 static void 115 irnet_disconnect_indication(void *, 116 void *, 117 LM_REASON, 118 struct sk_buff *); 119 static void 120 irnet_connect_confirm(void *, 121 void *, 122 struct qos_info *, 123 __u32, 124 __u8, 125 struct sk_buff *); 126 static void 127 irnet_flow_indication(void *, 128 void *, 129 LOCAL_FLOW); 130 static void 131 irnet_status_indication(void *, 132 LINK_STATUS, 133 LOCK_STATUS); 134 static void 135 irnet_connect_indication(void *, 136 void *, 137 struct qos_info *, 138 __u32, 139 __u8, 140 struct sk_buff *); 141 /* -------------------- IRDA-IAS/LMP CALLBACKS -------------------- */ 142 static void 143 irnet_getvalue_confirm(int, 144 __u16, 145 struct ias_value *, 146 void *); 147 static void 148 irnet_discovervalue_confirm(int, 149 __u16, 150 struct ias_value *, 151 void *); 152 #ifdef DISCOVERY_EVENTS 153 static void 154 irnet_discovery_indication(discinfo_t *, 155 DISCOVERY_MODE, 156 void *); 157 static void 158 irnet_expiry_indication(discinfo_t *, 159 DISCOVERY_MODE, 160 void *); 161 #endif 162 163 /**************************** VARIABLES ****************************/ 164 165 /* 166 * The IrNET server. Listen to connection requests and co... 167 */ 168 static struct irnet_root irnet_server; 169 170 /* Control channel stuff (note : extern) */ 171 struct irnet_ctrl_channel irnet_events; 172 173 /* The /proc/net/irda directory, defined elsewhere... */ 174 #ifdef CONFIG_PROC_FS 175 extern struct proc_dir_entry *proc_irda; 176 #endif /* CONFIG_PROC_FS */ 177 178 #endif /* IRNET_IRDA_H */ 179