Blame view

include/linux/atmdev.h 16.7 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
  /* atmdev.h - ATM device driver declarations and various related items */
   
  /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
   
  
  #ifndef LINUX_ATMDEV_H
  #define LINUX_ATMDEV_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  #include <linux/atmapi.h>
  #include <linux/atm.h>
  #include <linux/atmioc.h>
  
  
  #define ESI_LEN		6
  
  #define ATM_OC3_PCR	(155520000/270*260/8/53)
  			/* OC3 link rate:  155520000 bps
  			   SONET overhead: /270*260 (9 section, 1 path)
  			   bits per cell:  /8/53
  			   max cell rate:  353207.547 cells/sec */
  #define ATM_25_PCR	((25600000/8-8000)/54)
  			/* 25 Mbps ATM cell rate (59111) */
  #define ATM_OC12_PCR	(622080000/1080*1040/8/53)
  			/* OC12 link rate: 622080000 bps
  			   SONET overhead: /1080*1040
  			   bits per cell:  /8/53
  			   max cell rate:  1412830.188 cells/sec */
  #define ATM_DS3_PCR	(8000*12)
  			/* DS3: 12 cells in a 125 usec time slot */
  
  
  #define __AAL_STAT_ITEMS \
      __HANDLE_ITEM(tx);			/* TX okay */ \
      __HANDLE_ITEM(tx_err);		/* TX errors */ \
      __HANDLE_ITEM(rx);			/* RX okay */ \
      __HANDLE_ITEM(rx_err);		/* RX errors */ \
      __HANDLE_ITEM(rx_drop);		/* RX out of memory */
  
  struct atm_aal_stats {
  #define __HANDLE_ITEM(i) int i
  	__AAL_STAT_ITEMS
  #undef __HANDLE_ITEM
  };
  
  
  struct atm_dev_stats {
  	struct atm_aal_stats aal0;
  	struct atm_aal_stats aal34;
  	struct atm_aal_stats aal5;
  } __ATM_API_ALIGN;
  
  
  #define ATM_GETLINKRATE	_IOW('a',ATMIOC_ITF+1,struct atmif_sioc)
  					/* get link rate */
  #define ATM_GETNAMES	_IOW('a',ATMIOC_ITF+3,struct atm_iobuf)
  					/* get interface names (numbers) */
  #define ATM_GETTYPE	_IOW('a',ATMIOC_ITF+4,struct atmif_sioc)
  					/* get interface type name */
  #define ATM_GETESI	_IOW('a',ATMIOC_ITF+5,struct atmif_sioc)
  					/* get interface ESI */
  #define ATM_GETADDR	_IOW('a',ATMIOC_ITF+6,struct atmif_sioc)
  					/* get itf's local ATM addr. list */
  #define ATM_RSTADDR	_IOW('a',ATMIOC_ITF+7,struct atmif_sioc)
  					/* reset itf's ATM address list */
  #define ATM_ADDADDR	_IOW('a',ATMIOC_ITF+8,struct atmif_sioc)
  					/* add a local ATM address */
  #define ATM_DELADDR	_IOW('a',ATMIOC_ITF+9,struct atmif_sioc)
  					/* remove a local ATM address */
  #define ATM_GETCIRANGE	_IOW('a',ATMIOC_ITF+10,struct atmif_sioc)
  					/* get connection identifier range */
  #define ATM_SETCIRANGE	_IOW('a',ATMIOC_ITF+11,struct atmif_sioc)
  					/* set connection identifier range */
  #define ATM_SETESI	_IOW('a',ATMIOC_ITF+12,struct atmif_sioc)
  					/* set interface ESI */
  #define ATM_SETESIF	_IOW('a',ATMIOC_ITF+13,struct atmif_sioc)
  					/* force interface ESI */
0f21ba7cc   Eric Kinzie   [ATM]: add suppor...
76
77
78
79
80
81
  #define ATM_ADDLECSADDR	_IOW('a', ATMIOC_ITF+14, struct atmif_sioc)
  					/* register a LECS address */
  #define ATM_DELLECSADDR	_IOW('a', ATMIOC_ITF+15, struct atmif_sioc)
  					/* unregister a LECS address */
  #define ATM_GETLECSADDR	_IOW('a', ATMIOC_ITF+16, struct atmif_sioc)
  					/* retrieve LECS address(es) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  #define ATM_GETSTAT	_IOW('a',ATMIOC_SARCOM+0,struct atmif_sioc)
  					/* get AAL layer statistics */
  #define ATM_GETSTATZ	_IOW('a',ATMIOC_SARCOM+1,struct atmif_sioc)
  					/* get AAL layer statistics and zero */
  #define ATM_GETLOOP	_IOW('a',ATMIOC_SARCOM+2,struct atmif_sioc)
  					/* get loopback mode */
  #define ATM_SETLOOP	_IOW('a',ATMIOC_SARCOM+3,struct atmif_sioc)
  					/* set loopback mode */
  #define ATM_QUERYLOOP	_IOW('a',ATMIOC_SARCOM+4,struct atmif_sioc)
  					/* query supported loopback modes */
  #define ATM_SETSC	_IOW('a',ATMIOC_SPECIAL+1,int)
  					/* enable or disable single-copy */
  #define ATM_SETBACKEND	_IOW('a',ATMIOC_SPECIAL+2,atm_backend_t)
  					/* set backend handler */
  #define ATM_NEWBACKENDIF _IOW('a',ATMIOC_SPECIAL+3,atm_backend_t)
  					/* use backend to make new if */
  #define ATM_ADDPARTY  	_IOW('a', ATMIOC_SPECIAL+4,struct atm_iobuf)
   					/* add party to p2mp call */
8865c418c   David Woodhouse   atm: 32-bit ioctl...
100
101
102
103
  #ifdef CONFIG_COMPAT
  /* It actually takes struct sockaddr_atmsvc, not struct atm_iobuf */
  #define COMPAT_ATM_ADDPARTY  	_IOW('a', ATMIOC_SPECIAL+4,struct compat_atm_iobuf)
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
  #define ATM_DROPPARTY 	_IOW('a', ATMIOC_SPECIAL+5,int)
  					/* drop party from p2mp call */
  
  /*
   * These are backend handkers that can be set via the ATM_SETBACKEND call
   * above.  In the future we may support dynamic loading of these - for now,
   * they're just being used to share the ATMIOC_BACKEND ioctls
   */
  #define ATM_BACKEND_RAW		0	
  #define ATM_BACKEND_PPP		1	/* PPPoATM - RFC2364 */
  #define ATM_BACKEND_BR2684	2	/* Bridged RFC1483/2684 */
  
  /* for ATM_GETTYPE */
  #define ATM_ITFTYP_LEN	8	/* maximum length of interface type name */
  
  /*
   * Loopback modes for ATM_{PHY,SAR}_{GET,SET}LOOP
   */
  
  /* Point of loopback				CPU-->SAR-->PHY-->line--> ... */
  #define __ATM_LM_NONE	0	/* no loop back     ^     ^     ^      ^      */
  #define __ATM_LM_AAL	1	/* loop back PDUs --'     |     |      |      */
  #define __ATM_LM_ATM	2	/* loop back ATM cells ---'     |      |      */
  /* RESERVED		4	loop back on PHY side  ---'		      */
  #define __ATM_LM_PHY	8	/* loop back bits (digital) ----'      |      */
  #define __ATM_LM_ANALOG 16	/* loop back the analog signal --------'      */
  
  /* Direction of loopback */
  #define __ATM_LM_MKLOC(n)	((n))	    /* Local (i.e. loop TX to RX) */
  #define __ATM_LM_MKRMT(n)	((n) << 8)  /* Remote (i.e. loop RX to TX) */
  
  #define __ATM_LM_XTLOC(n)	((n) & 0xff)
  #define __ATM_LM_XTRMT(n)	(((n) >> 8) & 0xff)
  
  #define ATM_LM_NONE	0	/* no loopback */
  
  #define ATM_LM_LOC_AAL	__ATM_LM_MKLOC(__ATM_LM_AAL)
  #define ATM_LM_LOC_ATM	__ATM_LM_MKLOC(__ATM_LM_ATM)
  #define ATM_LM_LOC_PHY	__ATM_LM_MKLOC(__ATM_LM_PHY)
  #define ATM_LM_LOC_ANALOG __ATM_LM_MKLOC(__ATM_LM_ANALOG)
  
  #define ATM_LM_RMT_AAL	__ATM_LM_MKRMT(__ATM_LM_AAL)
  #define ATM_LM_RMT_ATM	__ATM_LM_MKRMT(__ATM_LM_ATM)
  #define ATM_LM_RMT_PHY	__ATM_LM_MKRMT(__ATM_LM_PHY)
  #define ATM_LM_RMT_ANALOG __ATM_LM_MKRMT(__ATM_LM_ANALOG)
  
  /*
   * Note: ATM_LM_LOC_* and ATM_LM_RMT_* can be combined, provided that
   * __ATM_LM_XTLOC(x) <= __ATM_LM_XTRMT(x)
   */
  
  
  struct atm_iobuf {
  	int length;
  	void __user *buffer;
  };
  
  /* for ATM_GETCIRANGE / ATM_SETCIRANGE */
  
  #define ATM_CI_MAX      -1              /* use maximum range of VPI/VCI */
   
  struct atm_cirange {
  	signed char	vpi_bits;	/* 1..8, ATM_CI_MAX (-1) for maximum */
  	signed char	vci_bits;	/* 1..16, ATM_CI_MAX (-1) for maximum */
  };
  
  /* for ATM_SETSC; actually taken from the ATM_VF number space */
  
  #define ATM_SC_RX	1024		/* enable RX single-copy */
  #define ATM_SC_TX	2048		/* enable TX single-copy */
  
  #define ATM_BACKLOG_DEFAULT 32 /* if we get more, we're likely to time out
  				  anyway */
  
  /* MF: change_qos (Modify) flags */
  
  #define ATM_MF_IMMED	 1	/* Block until change is effective */
  #define ATM_MF_INC_RSV	 2	/* Change reservation on increase */
  #define ATM_MF_INC_SHP	 4	/* Change shaping on increase */
  #define ATM_MF_DEC_RSV	 8	/* Change reservation on decrease */
  #define ATM_MF_DEC_SHP	16	/* Change shaping on decrease */
  #define ATM_MF_BWD	32	/* Set the backward direction parameters */
  
  #define ATM_MF_SET	(ATM_MF_INC_RSV | ATM_MF_INC_SHP | ATM_MF_DEC_RSV | \
  			  ATM_MF_DEC_SHP | ATM_MF_BWD)
  
  /*
   * ATM_VS_* are used to express VC state in a human-friendly way.
   */
  
  #define ATM_VS_IDLE	0	/* VC is not used */
  #define ATM_VS_CONNECTED 1	/* VC is connected */
  #define ATM_VS_CLOSING	2	/* VC is closing */
  #define ATM_VS_LISTEN	3	/* VC is listening for incoming setups */
  #define ATM_VS_INUSE	4	/* VC is in use (registered with atmsigd) */
  #define ATM_VS_BOUND	5	/* VC is bound */
  
  #define ATM_VS2TXT_MAP \
      "IDLE", "CONNECTED", "CLOSING", "LISTEN", "INUSE", "BOUND"
  
  #define ATM_VF2TXT_MAP \
      "ADDR",	"READY",	"PARTIAL",	"REGIS", \
      "RELEASED", "HASQOS",	"LISTEN",	"META", \
      "256",	"512",		"1024",		"2048", \
      "SESSION",	"HASSAP",	"BOUND",	"CLOSE"
  
  
  #ifdef __KERNEL__
bb98ad77d   Ismail Donmez   [PATCH] Move linu...
212
  #include <linux/device.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
214
215
216
217
218
  #include <linux/wait.h> /* wait_queue_head_t */
  #include <linux/time.h> /* struct timeval */
  #include <linux/net.h>
  #include <linux/skbuff.h> /* struct sk_buff */
  #include <linux/uio.h>
  #include <net/sock.h>
60063497a   Arun Sharma   atomic: use <linu...
219
  #include <linux/atomic.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
221
222
223
224
225
  
  #ifdef CONFIG_PROC_FS
  #include <linux/proc_fs.h>
  
  extern struct proc_dir_entry *atm_proc_root;
  #endif
8865c418c   David Woodhouse   atm: 32-bit ioctl...
226
227
228
229
230
231
232
  #ifdef CONFIG_COMPAT
  #include <linux/compat.h>
  struct compat_atm_iobuf {
  	int length;
  	compat_uptr_t buffer;
  };
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
  
  struct k_atm_aal_stats {
  #define __HANDLE_ITEM(i) atomic_t i
  	__AAL_STAT_ITEMS
  #undef __HANDLE_ITEM
  };
  
  
  struct k_atm_dev_stats {
  	struct k_atm_aal_stats aal0;
  	struct k_atm_aal_stats aal34;
  	struct k_atm_aal_stats aal5;
  };
  
  
  enum {
  	ATM_VF_ADDR,		/* Address is in use. Set by anybody, cleared
  				   by device driver. */
  	ATM_VF_READY,		/* VC is ready to transfer data. Set by device
  				   driver, cleared by anybody. */
  	ATM_VF_PARTIAL,		/* resources are bound to PVC (partial PVC
  				   setup), controlled by socket layer */
  	ATM_VF_REGIS,		/* registered with demon, controlled by SVC
  				   socket layer */
  	ATM_VF_BOUND,		/* local SAP is set, controlled by SVC socket
  				   layer */
  	ATM_VF_RELEASED,	/* demon has indicated/requested release,
  				   controlled by SVC socket layer */
  	ATM_VF_HASQOS,		/* QOS parameters have been set */
  	ATM_VF_LISTEN,		/* socket is used for listening */
  	ATM_VF_META,		/* SVC socket isn't used for normal data
  				   traffic and doesn't depend on signaling
  				   to be available */
  	ATM_VF_SESSION,		/* VCC is p2mp session control descriptor */
  	ATM_VF_HASSAP,		/* SAP has been set */
  	ATM_VF_CLOSE,		/* asynchronous close - treat like VF_RELEASED*/
  	ATM_VF_WAITING,		/* waiting for reply from sigd */
  	ATM_VF_IS_CLIP,		/* in use by CLIP protocol */
  };
  
  
  #define ATM_VF2VS(flags) \
      (test_bit(ATM_VF_READY,&(flags)) ? ATM_VS_CONNECTED : \
       test_bit(ATM_VF_RELEASED,&(flags)) ? ATM_VS_CLOSING : \
       test_bit(ATM_VF_LISTEN,&(flags)) ? ATM_VS_LISTEN : \
       test_bit(ATM_VF_REGIS,&(flags)) ? ATM_VS_INUSE : \
       test_bit(ATM_VF_BOUND,&(flags)) ? ATM_VS_BOUND : ATM_VS_IDLE)
  
  
  enum {
64bf69ddf   Stanislaw Gruszka   [ATM]: deregistra...
283
  	ATM_DF_REMOVED,		/* device was removed from atm_devs list */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
  };
  
  
  #define ATM_PHY_SIG_LOST    0	/* no carrier/light */
  #define ATM_PHY_SIG_UNKNOWN 1	/* carrier/light status is unknown */
  #define ATM_PHY_SIG_FOUND   2	/* carrier/light okay */
  
  #define ATM_ATMOPT_CLP	1	/* set CLP bit */
  
  struct atm_vcc {
  	/* struct sock has to be the first member of atm_vcc */
  	struct sock	sk;
  	unsigned long	flags;		/* VCC flags (ATM_VF_*) */
  	short		vpi;		/* VPI and VCI (types must be equal */
  					/* with sockaddr) */
  	int 		vci;
  	unsigned long	aal_options;	/* AAL layer options */
  	unsigned long	atm_options;	/* ATM layer options */
  	struct atm_dev	*dev;		/* device back pointer */
  	struct atm_qos	qos;		/* QOS */
  	struct atm_sap	sap;		/* SAP */
  	void (*push)(struct atm_vcc *vcc,struct sk_buff *skb);
  	void (*pop)(struct atm_vcc *vcc,struct sk_buff *skb); /* optional */
  	int (*push_oam)(struct atm_vcc *vcc,void *cell);
  	int (*send)(struct atm_vcc *vcc,struct sk_buff *skb);
  	void		*dev_data;	/* per-device data */
  	void		*proto_data;	/* per-protocol data */
  	struct k_atm_aal_stats *stats;	/* pointer to AAL stats group */
  	/* SVC part --- may move later ------------------------------------- */
  	short		itf;		/* interface number */
  	struct sockaddr_atmsvc local;
  	struct sockaddr_atmsvc remote;
  	/* Multipoint part ------------------------------------------------- */
  	struct atm_vcc	*session;	/* session VCC descriptor */
  	/* Other stuff ----------------------------------------------------- */
  	void		*user_back;	/* user backlink - not touched by */
  					/* native ATM stack. Currently used */
  					/* by CLIP and sch_atm. */
  };
  
  static inline struct atm_vcc *atm_sk(struct sock *sk)
  {
  	return (struct atm_vcc *)sk;
  }
  
  static inline struct atm_vcc *ATM_SD(struct socket *sock)
  {
  	return atm_sk(sock->sk);
  }
  
  static inline struct sock *sk_atm(struct atm_vcc *vcc)
  {
  	return (struct sock *)vcc;
  }
  
  struct atm_dev_addr {
  	struct sockaddr_atmsvc addr;	/* ATM address */
  	struct list_head entry;		/* next address */
  };
0f21ba7cc   Eric Kinzie   [ATM]: add suppor...
343
  enum atm_addr_type_t { ATM_ADDR_LOCAL, ATM_ADDR_LECS };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
344
345
346
347
348
349
350
351
352
353
  struct atm_dev {
  	const struct atmdev_ops *ops;	/* device operations; NULL if unused */
  	const struct atmphy_ops *phy;	/* PHY operations, may be undefined */
  					/* (NULL) */
  	const char	*type;		/* device type name */
  	int		number;		/* device index */
  	void		*dev_data;	/* per-device data */
  	void		*phy_data;	/* private PHY date */
  	unsigned long	flags;		/* device flags (ATM_DF_*) */
  	struct list_head local;		/* local ATM addresses */
0f21ba7cc   Eric Kinzie   [ATM]: add suppor...
354
  	struct list_head lecs;		/* LECS ATM addresses learned via ILMI */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355
356
357
358
359
360
361
362
363
364
365
  	unsigned char	esi[ESI_LEN];	/* ESI ("MAC" addr) */
  	struct atm_cirange ci_range;	/* VPI/VCI range */
  	struct k_atm_dev_stats stats;	/* statistics */
  	char		signal;		/* signal status (ATM_PHY_SIG_*) */
  	int		link_rate;	/* link rate (default: OC3) */
  	atomic_t	refcnt;		/* reference count */
  	spinlock_t	lock;		/* protect internal members */
  #ifdef CONFIG_PROC_FS
  	struct proc_dir_entry *proc_entry; /* proc entry */
  	char *proc_name;		/* proc entry name */
  #endif
ef39592f7   Kay Sievers   [ATM]: Convert st...
366
  	struct device class_dev;	/* sysfs device */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
  	struct list_head dev_list;	/* linkage */
  };
  
   
  /* OF: send_Oam Flags */
  
  #define ATM_OF_IMMED  1		/* Attempt immediate delivery */
  #define ATM_OF_INRATE 2		/* Attempt in-rate delivery */
  
  
  /*
   * ioctl, getsockopt, and setsockopt are optional and can be set to NULL.
   */
  
  struct atmdev_ops { /* only send is required */
  	void (*dev_close)(struct atm_dev *dev);
  	int (*open)(struct atm_vcc *vcc);
  	void (*close)(struct atm_vcc *vcc);
  	int (*ioctl)(struct atm_dev *dev,unsigned int cmd,void __user *arg);
8865c418c   David Woodhouse   atm: 32-bit ioctl...
386
387
388
389
  #ifdef CONFIG_COMPAT
  	int (*compat_ioctl)(struct atm_dev *dev,unsigned int cmd,
  			    void __user *arg);
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
390
391
392
  	int (*getsockopt)(struct atm_vcc *vcc,int level,int optname,
  	    void __user *optval,int optlen);
  	int (*setsockopt)(struct atm_vcc *vcc,int level,int optname,
b7058842c   David S. Miller   net: Make setsock...
393
  	    void __user *optval,unsigned int optlen);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
  	int (*send)(struct atm_vcc *vcc,struct sk_buff *skb);
  	int (*send_oam)(struct atm_vcc *vcc,void *cell,int flags);
  	void (*phy_put)(struct atm_dev *dev,unsigned char value,
  	    unsigned long addr);
  	unsigned char (*phy_get)(struct atm_dev *dev,unsigned long addr);
  	int (*change_qos)(struct atm_vcc *vcc,struct atm_qos *qos,int flags);
  	int (*proc_read)(struct atm_dev *dev,loff_t *pos,char *page);
  	struct module *owner;
  };
  
  struct atmphy_ops {
  	int (*start)(struct atm_dev *dev);
  	int (*ioctl)(struct atm_dev *dev,unsigned int cmd,void __user *arg);
  	void (*interrupt)(struct atm_dev *dev);
  	int (*stop)(struct atm_dev *dev);
  };
  
  struct atm_skb_data {
  	struct atm_vcc	*vcc;		/* ATM VCC */
  	unsigned long	atm_options;	/* ATM layer options */
  };
  
  #define VCC_HTABLE_SIZE 32
  
  extern struct hlist_head vcc_hash[VCC_HTABLE_SIZE];
  extern rwlock_t vcc_sklist_lock;
  
  #define ATM_SKB(skb) (((struct atm_skb_data *) (skb)->cb))
d9ca676bc   Dan Williams   atm: correct sysf...
422
423
424
425
  struct atm_dev *atm_dev_register(const char *type, struct device *parent,
  				 const struct atmdev_ops *ops,
  				 int number, /* -1 == pick first available */
  				 unsigned long *flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
426
427
  struct atm_dev *atm_dev_lookup(int number);
  void atm_dev_deregister(struct atm_dev *dev);
7313bb8f3   Karl Hiramoto   atm: propagate si...
428
429
430
431
432
433
434
  
  /* atm_dev_signal_change
   *
   * Propagate lower layer signal change in atm_dev->signal to netdevice.
   * The event will be sent via a notifier call chain.
   */
  void atm_dev_signal_change(struct atm_dev *dev, char signal);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
435
  void vcc_insert_socket(struct sock *sk);
c031235b3   Philip A. Prindeville   atm/solos-pci: Do...
436
  void atm_dev_release_vccs(struct atm_dev *dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
437

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
  
  static inline void atm_force_charge(struct atm_vcc *vcc,int truesize)
  {
  	atomic_add(truesize, &sk_atm(vcc)->sk_rmem_alloc);
  }
  
  
  static inline void atm_return(struct atm_vcc *vcc,int truesize)
  {
  	atomic_sub(truesize, &sk_atm(vcc)->sk_rmem_alloc);
  }
  
  
  static inline int atm_may_send(struct atm_vcc *vcc,unsigned int size)
  {
  	return (size + atomic_read(&sk_atm(vcc)->sk_wmem_alloc)) <
  	       sk_atm(vcc)->sk_sndbuf;
  }
  
  
  static inline void atm_dev_hold(struct atm_dev *dev)
  {
  	atomic_inc(&dev->refcnt);
  }
  
  
  static inline void atm_dev_put(struct atm_dev *dev)
  {
64bf69ddf   Stanislaw Gruszka   [ATM]: deregistra...
466
467
468
469
  	if (atomic_dec_and_test(&dev->refcnt)) {
  		BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags));
  		if (dev->ops->dev_close)
  			dev->ops->dev_close(dev);
ef39592f7   Kay Sievers   [ATM]: Convert st...
470
  		put_device(&dev->class_dev);
64bf69ddf   Stanislaw Gruszka   [ATM]: deregistra...
471
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
472
473
474
475
476
  }
  
  
  int atm_charge(struct atm_vcc *vcc,int truesize);
  struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size,
dd0fc66fb   Al Viro   [PATCH] gfp flags...
477
      gfp_t gfp_flags);
c219750b2   Mitchell Blank Jr   [ATM]: atm_pcr_go...
478
  int atm_pcr_goal(const struct atm_trafprm *tp);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
  
  void vcc_release_async(struct atm_vcc *vcc, int reply);
  
  struct atm_ioctl {
  	struct module *owner;
  	/* A module reference is kept if appropriate over this call.
  	 * Return -ENOIOCTLCMD if you don't handle it. */
  	int (*ioctl)(struct socket *, unsigned int cmd, unsigned long arg);
  	struct list_head list;
  };
  
  /**
   * register_atm_ioctl - register handler for ioctl operations
   *
   * Special (non-device) handlers of ioctl's should
   * register here. If you're a normal device, you should
   * set .ioctl in your atmdev_ops instead.
   */
  void register_atm_ioctl(struct atm_ioctl *);
  
  /**
   * deregister_atm_ioctl - remove the ioctl handler
   */
  void deregister_atm_ioctl(struct atm_ioctl *);
7313bb8f3   Karl Hiramoto   atm: propagate si...
503
504
505
506
507
508
509
510
  
  /* register_atmdevice_notifier - register atm_dev notify events
   *
   * Clients like br2684 will register notify events
   * Currently we notify of signal found/lost
   */
  int register_atmdevice_notifier(struct notifier_block *nb);
  void unregister_atmdevice_notifier(struct notifier_block *nb);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
511
512
513
  #endif /* __KERNEL__ */
  
  #endif