Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/irda/irnet/irnet_irda.h
15115 views
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 */
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
180