OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [net/] [irda/] [irda.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*********************************************************************
2
 *
3
 * Filename:      irda.h
4
 * Version:       1.0
5
 * Description:   IrDA common include file for kernel internal use
6
 * Status:        Stable
7
 * Author:        Dag Brattli <dagb@cs.uit.no>
8
 * Created at:    Tue Dec  9 21:13:12 1997
9
 * Modified at:   Fri Jan 28 13:16:32 2000
10
 * Modified by:   Dag Brattli <dagb@cs.uit.no>
11
 *
12
 *     Copyright (c) 1998-2000 Dag Brattli, All Rights Reserved.
13
 *     Copyright (c) 2000-2001 Jean Tourrilhes <jt@hpl.hp.com>
14
 *
15
 *     This program is free software; you can redistribute it and/or
16
 *     modify it under the terms of the GNU General Public License as
17
 *     published by the Free Software Foundation; either version 2 of
18
 *     the License, or (at your option) any later version.
19
 *
20
 *     Neither Dag Brattli nor University of Tromsø admit liability nor
21
 *     provide warranty for any of this software. This material is
22
 *     provided "AS-IS" and at no charge.
23
 *
24
 ********************************************************************/
25
 
26
#ifndef NET_IRDA_H
27
#define NET_IRDA_H
28
 
29
#include <linux/config.h>
30
#include <linux/skbuff.h>
31
#include <linux/kernel.h>
32
#include <linux/if.h>
33
#include <linux/irda.h>
34
 
35
typedef __u32 magic_t;
36
 
37
#include <net/irda/qos.h>
38
#include <net/irda/irqueue.h>
39
 
40
#ifndef TRUE
41
#define TRUE 1
42
#endif
43
 
44
#ifndef FALSE 
45
#define FALSE 0
46
#endif
47
 
48
/* Hack to do small backoff when setting media busy in IrLAP */
49
#ifndef SMALL
50
#define SMALL 5
51
#endif
52
 
53
#ifndef IRDA_MIN /* Lets not mix this MIN with other header files */
54
#define IRDA_MIN(a, b) (((a) < (b)) ? (a) : (b))
55
#endif
56
 
57
#ifndef ALIGN
58
#  define ALIGN __attribute__((aligned))
59
#endif
60
#ifndef PACK
61
#  define PACK __attribute__((packed))
62
#endif
63
 
64
 
65
#ifdef CONFIG_IRDA_DEBUG
66
 
67
extern __u32 irda_debug;
68
 
69
/* use 0 for production, 1 for verification, >2 for debug */
70
#define IRDA_DEBUG_LEVEL 0
71
 
72
#define IRDA_DEBUG(n, args...) (irda_debug >= (n)) ? (printk(KERN_DEBUG args)) : 0
73
#define ASSERT(expr, func) \
74
if(!(expr)) { \
75
        printk( "Assertion failed! %s:%s:%d %s\n", \
76
        __FILE__,__FUNCTION__,__LINE__,(#expr));  \
77
        func }
78
#else
79
#define IRDA_DEBUG(n, args...)
80
#define ASSERT(expr, func) \
81
if(!(expr)) do { \
82
        func } while (0)
83
#endif /* CONFIG_IRDA_DEBUG */
84
 
85
#define WARNING(args...) printk(KERN_WARNING args)
86
#define MESSAGE(args...) printk(KERN_INFO args)
87
#define ERROR(args...)   printk(KERN_ERR args)
88
 
89
#define MSECS_TO_JIFFIES(ms) (((ms)*HZ+999)/1000)
90
 
91
/*
92
 *  Magic numbers used by Linux-IrDA. Random numbers which must be unique to
93
 *  give the best protection
94
 */
95
 
96
#define IRTTY_MAGIC        0x2357
97
#define LAP_MAGIC          0x1357
98
#define LMP_MAGIC          0x4321
99
#define LMP_LSAP_MAGIC     0x69333
100
#define LMP_LAP_MAGIC      0x3432
101
#define IRDA_DEVICE_MAGIC  0x63454
102
#define IAS_MAGIC          0x007
103
#define TTP_MAGIC          0x241169
104
#define TTP_TSAP_MAGIC     0x4345
105
#define IROBEX_MAGIC       0x341324
106
#define HB_MAGIC           0x64534
107
#define IRLAN_MAGIC        0x754
108
#define IAS_OBJECT_MAGIC   0x34234
109
#define IAS_ATTRIB_MAGIC   0x45232
110
#define IRDA_TASK_MAGIC    0x38423
111
 
112
#define IAS_DEVICE_ID 0x0000 /* Defined by IrDA, IrLMP section 4.1 (page 68) */
113
#define IAS_PNP_ID    0xd342
114
#define IAS_OBEX_ID   0x34323
115
#define IAS_IRLAN_ID  0x34234
116
#define IAS_IRCOMM_ID 0x2343
117
#define IAS_IRLPT_ID  0x9876
118
 
119
typedef enum { FLOW_STOP, FLOW_START } LOCAL_FLOW;
120
 
121
/* A few forward declarations (to make compiler happy) */
122
struct tsap_cb;         /* in <net/irda/irttp.h> */
123
struct lsap_cb;         /* in <net/irda/irlmp.h> */
124
struct iriap_cb;        /* in <net/irda/iriap.h> */
125
struct ias_value;       /* in <net/irda/irias_object.h> */
126
struct discovery_t;     /* in <net/irda/discovery.h> */
127
 
128
/* IrDA Socket */
129
struct irda_sock {
130
        __u32 saddr;          /* my local address */
131
        __u32 daddr;          /* peer address */
132
 
133
        struct lsap_cb *lsap; /* LSAP used by Ultra */
134
        __u8  pid;            /* Protocol IP (PID) used by Ultra */
135
 
136
        struct tsap_cb *tsap; /* TSAP used by this connection */
137
        __u8 dtsap_sel;       /* remote TSAP address */
138
        __u8 stsap_sel;       /* local TSAP address */
139
 
140
        __u32 max_sdu_size_rx;
141
        __u32 max_sdu_size_tx;
142
        __u32 max_data_size;
143
        __u8  max_header_size;
144
        struct qos_info qos_tx;
145
 
146
        __u16 mask;           /* Hint bits mask */
147
        __u16 hints;          /* Hint bits */
148
 
149
        __u32 ckey;           /* IrLMP client handle */
150
        __u32 skey;           /* IrLMP service handle */
151
 
152
        struct ias_object *ias_obj;   /* Our service name + lsap in IAS */
153
        struct iriap_cb *iriap;       /* Used to query remote IAS */
154
        struct ias_value *ias_result; /* Result of remote IAS query */
155
 
156
        hashbin_t *cachelog;            /* Result of discovery query */
157
        struct discovery_t *cachediscovery;     /* Result of selective discovery query */
158
 
159
        int nslots;           /* Number of slots to use for discovery */
160
 
161
        int errno;            /* status of the IAS query */
162
 
163
        struct sock *sk;
164
        wait_queue_head_t query_wait;   /* Wait for the answer to a query */
165
        struct timer_list watchdog;     /* Timeout for discovery */
166
 
167
        LOCAL_FLOW tx_flow;
168
        LOCAL_FLOW rx_flow;
169
};
170
 
171
/*
172
 *  This type is used by the protocols that transmit 16 bits words in
173
 *  little endian format. A little endian machine stores MSB of word in
174
 *  byte[1] and LSB in byte[0]. A big endian machine stores MSB in byte[0]
175
 *  and LSB in byte[1].
176
 */
177
typedef union {
178
        __u16 word;
179
        __u8  byte[2];
180
} __u16_host_order;
181
 
182
/*
183
 * Per-packet information we need to hide inside sk_buff
184
 * (must not exceed 48 bytes, check with struct sk_buff)
185
 */
186
struct irda_skb_cb {
187
        magic_t magic;       /* Be sure that we can trust the information */
188
        __u32   next_speed;  /* The Speed to be set *after* this frame */
189
        __u16   mtt;         /* Minimum turn around time */
190
        __u16   xbofs;       /* Number of xbofs required, used by SIR mode */
191
        __u16   next_xbofs;  /* Number of xbofs required *after* this frame */
192
        void    *context;    /* May be used by drivers */
193
        void    (*destructor)(struct sk_buff *skb); /* Used for flow control */
194
        __u16   xbofs_delay; /* Number of xbofs used for generating the mtt */
195
        __u8    line;        /* Used by IrCOMM in IrLPT mode */
196
};
197
 
198
/* Misc status information */
199
typedef enum {
200
        STATUS_OK,
201
        STATUS_ABORTED,
202
        STATUS_NO_ACTIVITY,
203
        STATUS_NOISY,
204
        STATUS_REMOTE,
205
} LINK_STATUS;
206
 
207
typedef enum {
208
        LOCK_NO_CHANGE,
209
        LOCK_LOCKED,
210
        LOCK_UNLOCKED,
211
} LOCK_STATUS;
212
 
213
typedef enum { /* FIXME check the two first reason codes */
214
        LAP_DISC_INDICATION=1, /* Received a disconnect request from peer */
215
        LAP_NO_RESPONSE,       /* To many retransmits without response */
216
        LAP_RESET_INDICATION,  /* To many retransmits, or invalid nr/ns */
217
        LAP_FOUND_NONE,        /* No devices were discovered */
218
        LAP_MEDIA_BUSY,
219
        LAP_PRIMARY_CONFLICT,
220
} LAP_REASON;
221
 
222
/*
223
 *  IrLMP disconnect reasons. The order is very important, since they
224
 *  correspond to disconnect reasons sent in IrLMP disconnect frames, so
225
 *  please do not touch :-)
226
 */
227
typedef enum {
228
        LM_USER_REQUEST = 1,  /* User request */
229
        LM_LAP_DISCONNECT,    /* Unexpected IrLAP disconnect */
230
        LM_CONNECT_FAILURE,   /* Failed to establish IrLAP connection */
231
        LM_LAP_RESET,         /* IrLAP reset */
232
        LM_INIT_DISCONNECT,   /* Link Management initiated disconnect */
233
        LM_LSAP_NOTCONN,      /* Data delivered on unconnected LSAP */
234
        LM_NON_RESP_CLIENT,   /* Non responsive LM-MUX client */
235
        LM_NO_AVAIL_CLIENT,   /* No available LM-MUX client */
236
        LM_CONN_HALF_OPEN,    /* Connection is half open */
237
        LM_BAD_SOURCE_ADDR,   /* Illegal source address (i.e 0x00) */
238
} LM_REASON;
239
#define LM_UNKNOWN 0xff       /* Unspecified disconnect reason */
240
 
241
/*
242
 *  Notify structure used between transport and link management layers
243
 */
244
typedef struct {
245
        int (*data_indication)(void *priv, void *sap, struct sk_buff *skb);
246
        int (*udata_indication)(void *priv, void *sap, struct sk_buff *skb);
247
        void (*connect_confirm)(void *instance, void *sap,
248
                                struct qos_info *qos, __u32 max_sdu_size,
249
                                __u8 max_header_size, struct sk_buff *skb);
250
        void (*connect_indication)(void *instance, void *sap,
251
                                   struct qos_info *qos, __u32 max_sdu_size,
252
                                   __u8 max_header_size, struct sk_buff *skb);
253
        void (*disconnect_indication)(void *instance, void *sap,
254
                                      LM_REASON reason, struct sk_buff *);
255
        void (*flow_indication)(void *instance, void *sap, LOCAL_FLOW flow);
256
        void (*status_indication)(void *instance,
257
                                  LINK_STATUS link, LOCK_STATUS lock);
258
        void *instance; /* Layer instance pointer */
259
        char name[16];  /* Name of layer */
260
} notify_t;
261
 
262
#define NOTIFY_MAX_NAME 16
263
 
264
#endif /* NET_IRDA_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.