Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
irnet_irda.h
Go to the documentation of this file.
1 /*
2  * IrNET protocol module : Synchronous PPP over an IrDA socket.
3  *
4  * Jean II - HPL `00 - <[email protected]>
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 */
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 *,
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 *,
156  void *);
157 static void
158  irnet_expiry_indication(discinfo_t *,
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) */
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 */