1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef _USBATM_H_
25#define _USBATM_H_
26
27#include <asm/semaphore.h>
28#include <linux/atm.h>
29#include <linux/atmdev.h>
30#include <linux/completion.h>
31#include <linux/device.h>
32#include <linux/kernel.h>
33#include <linux/kref.h>
34#include <linux/list.h>
35#include <linux/stringify.h>
36#include <linux/usb.h>
37#include <linux/mutex.h>
38
39
40
41
42
43#ifdef DEBUG
44#define UDSL_ASSERT(x) BUG_ON(!(x))
45#else
46#define UDSL_ASSERT(x) do { if (!(x)) warn("failed assertion '%s' at line %d", __stringify(x), __LINE__); } while(0)
47#endif
48
49#define usb_err(instance, format, arg...) \
50 dev_err(&(instance)->usb_intf->dev , format , ## arg)
51#define usb_info(instance, format, arg...) \
52 dev_info(&(instance)->usb_intf->dev , format , ## arg)
53#define usb_warn(instance, format, arg...) \
54 dev_warn(&(instance)->usb_intf->dev , format , ## arg)
55#ifdef DEBUG
56#define usb_dbg(instance, format, arg...) \
57 dev_printk(KERN_DEBUG , &(instance)->usb_intf->dev , format , ## arg)
58#else
59#define usb_dbg(instance, format, arg...) \
60 do {} while (0)
61#endif
62
63
64#define atm_printk(level, instance, format, arg...) \
65 printk(level "ATM dev %d: " format , \
66 (instance)->atm_dev->number , ## arg)
67
68#define atm_err(instance, format, arg...) \
69 atm_printk(KERN_ERR, instance , format , ## arg)
70#define atm_info(instance, format, arg...) \
71 atm_printk(KERN_INFO, instance , format , ## arg)
72#define atm_warn(instance, format, arg...) \
73 atm_printk(KERN_WARNING, instance , format , ## arg)
74#ifdef DEBUG
75#define atm_dbg(instance, format, arg...) \
76 atm_printk(KERN_DEBUG, instance , format , ## arg)
77#define atm_rldbg(instance, format, arg...) \
78 if (printk_ratelimit()) \
79 atm_printk(KERN_DEBUG, instance , format , ## arg)
80#else
81#define atm_dbg(instance, format, arg...) \
82 do {} while (0)
83#define atm_rldbg(instance, format, arg...) \
84 do {} while (0)
85#endif
86
87
88
89
90#define UDSL_SKIP_HEAVY_INIT (1<<0)
91#define UDSL_USE_ISOC (1<<1)
92#define UDSL_IGNORE_EILSEQ (1<<2)
93
94
95
96
97struct usbatm_data;
98
99
100
101
102
103
104
105struct usbatm_driver {
106 const char *driver_name;
107
108
109 int (*bind) (struct usbatm_data *, struct usb_interface *,
110 const struct usb_device_id *id);
111
112
113 int (*heavy_init) (struct usbatm_data *, struct usb_interface *);
114
115
116 void (*unbind) (struct usbatm_data *, struct usb_interface *);
117
118
119 int (*atm_start) (struct usbatm_data *, struct atm_dev *);
120
121
122 void (*atm_stop) (struct usbatm_data *, struct atm_dev *);
123
124 int bulk_in;
125 int isoc_in;
126 int bulk_out;
127
128 unsigned rx_padding;
129 unsigned tx_padding;
130};
131
132extern int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id,
133 struct usbatm_driver *driver);
134extern void usbatm_usb_disconnect(struct usb_interface *intf);
135
136
137struct usbatm_channel {
138 int endpoint;
139 unsigned int stride;
140 unsigned int buf_size;
141 unsigned int packet_size;
142 spinlock_t lock;
143 struct list_head list;
144 struct tasklet_struct tasklet;
145 struct timer_list delay;
146 struct usbatm_data *usbatm;
147};
148
149
150
151struct usbatm_data {
152
153
154
155
156
157 struct usbatm_driver *driver;
158 void *driver_data;
159 char driver_name[16];
160 unsigned int flags;
161
162
163 struct usb_device *usb_dev;
164 struct usb_interface *usb_intf;
165 char description[64];
166
167
168 struct atm_dev *atm_dev;
169
170
171
172
173
174 struct kref refcount;
175 struct mutex serialize;
176 int disconnected;
177
178
179 int thread_pid;
180 struct completion thread_started;
181 struct completion thread_exited;
182
183
184 struct list_head vcc_list;
185
186 struct usbatm_channel rx_channel;
187 struct usbatm_channel tx_channel;
188
189 struct sk_buff_head sndqueue;
190 struct sk_buff *current_skb;
191
192 struct usbatm_vcc_data *cached_vcc;
193 int cached_vci;
194 short cached_vpi;
195
196 unsigned char *cell_buf;
197 unsigned int buf_usage;
198
199 struct urb *urbs[0];
200};
201
202#endif
203