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 */ 41typedef 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 ----------------------- */ 67static void 68 irnet_post_event(irnet_socket *, 69 irnet_event, 70 __u32, 71 __u32, 72 char *, 73 __u16); 74/* ----------------------- IRDA SUBROUTINES ----------------------- */ 75static inline int 76 irnet_open_tsap(irnet_socket *); 77static inline __u8 78 irnet_ias_to_tsap(irnet_socket *, 79 int, 80 struct ias_value *); 81static inline int 82 irnet_find_lsap_sel(irnet_socket *); 83static inline int 84 irnet_connect_tsap(irnet_socket *); 85static inline int 86 irnet_discover_next_daddr(irnet_socket *); 87static inline int 88 irnet_discover_daddr_and_lsap_sel(irnet_socket *); 89static inline int 90 irnet_dname_to_daddr(irnet_socket *); 91/* ------------------------ SERVER SOCKET ------------------------ */ 92static inline int 93 irnet_daddr_to_dname(irnet_socket *); 94static inline irnet_socket * 95 irnet_find_socket(irnet_socket *); 96static inline int 97 irnet_connect_socket(irnet_socket *, 98 irnet_socket *, 99 struct qos_info *, 100 __u32, 101 __u8); 102static inline void 103 irnet_disconnect_server(irnet_socket *, 104 struct sk_buff *); 105static inline int 106 irnet_setup_server(void); 107static inline void 108 irnet_destroy_server(void); 109/* ---------------------- IRDA-TTP CALLBACKS ---------------------- */ 110static int 111 irnet_data_indication(void *, /* instance */ 112 void *, /* sap */ 113 struct sk_buff *); 114static void 115 irnet_disconnect_indication(void *, 116 void *, 117 LM_REASON, 118 struct sk_buff *); 119static void 120 irnet_connect_confirm(void *, 121 void *, 122 struct qos_info *, 123 __u32, 124 __u8, 125 struct sk_buff *); 126static void 127 irnet_flow_indication(void *, 128 void *, 129 LOCAL_FLOW); 130static void 131 irnet_status_indication(void *, 132 LINK_STATUS, 133 LOCK_STATUS); 134static 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 -------------------- */ 142static void 143 irnet_getvalue_confirm(int, 144 __u16, 145 struct ias_value *, 146 void *); 147static void 148 irnet_discovervalue_confirm(int, 149 __u16, 150 struct ias_value *, 151 void *); 152#ifdef DISCOVERY_EVENTS 153static void 154 irnet_discovery_indication(discinfo_t *, 155 DISCOVERY_MODE, 156 void *); 157static 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 */ 168static struct irnet_root irnet_server; 169 170/* Control channel stuff (note : extern) */ 171struct irnet_ctrl_channel irnet_events; 172 173/* The /proc/net/irda directory, defined elsewhere... */ 174#ifdef CONFIG_PROC_FS 175extern struct proc_dir_entry *proc_irda; 176#endif /* CONFIG_PROC_FS */ 177 178#endif /* IRNET_IRDA_H */ 179