1/*
2 *	IrNET protocol module : Synchronous PPP over an IrDA socket.
3 *
4 *		Jean II - HPL `00 - <jt@hpl.hp.com>
5 *
6 * This file contains all definitions and declarations necessary for the
7 * PPP part of the IrNET module.
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_PPP_H
13#define IRNET_PPP_H
14
15/***************************** INCLUDES *****************************/
16
17#include "irnet.h"		/* Module global include */
18
19/************************ CONSTANTS & MACROS ************************/
20
21/* /dev/irnet file constants */
22#define IRNET_MAJOR	10	/* Misc range */
23#define IRNET_MINOR	187	/* Official allocation */
24
25/* IrNET control channel stuff */
26#define IRNET_MAX_COMMAND	256	/* Max length of a command line */
27
28/* PPP hardcore stuff */
29
30/* Bits in rbits (PPP flags in irnet struct) */
31#define SC_RCV_BITS	(SC_RCV_B7_1|SC_RCV_B7_0|SC_RCV_ODDP|SC_RCV_EVNP)
32
33/* Bit numbers in busy */
34#define XMIT_BUSY	0
35#define RECV_BUSY	1
36#define XMIT_WAKEUP	2
37#define XMIT_FULL	3
38
39/* Queue management */
40#define PPPSYNC_MAX_RQLEN	32	/* arbitrary */
41
42/****************************** TYPES ******************************/
43
44
45/**************************** PROTOTYPES ****************************/
46
47/* ----------------------- CONTROL CHANNEL ----------------------- */
48static inline ssize_t
49	irnet_ctrl_write(irnet_socket *,
50			 const char *,
51			 size_t);
52static inline ssize_t
53	irnet_ctrl_read(irnet_socket *,
54			struct file *,
55			char *,
56			size_t);
57static inline unsigned int
58	irnet_ctrl_poll(irnet_socket *,
59			struct file *,
60			poll_table *);
61/* ----------------------- CHARACTER DEVICE ----------------------- */
62static int
63	dev_irnet_open(struct inode *,	/* fs callback : open */
64		       struct file *),
65	dev_irnet_close(struct inode *,
66			struct file *);
67static ssize_t
68	dev_irnet_write(struct file *,
69			const char __user *,
70			size_t,
71			loff_t *),
72	dev_irnet_read(struct file *,
73		       char __user *,
74		       size_t,
75		       loff_t *);
76static unsigned int
77	dev_irnet_poll(struct file *,
78		       poll_table *);
79static long
80	dev_irnet_ioctl(struct file *,
81			unsigned int,
82			unsigned long);
83/* ------------------------ PPP INTERFACE ------------------------ */
84static inline struct sk_buff *
85	irnet_prepare_skb(irnet_socket *,
86			  struct sk_buff *);
87static int
88	ppp_irnet_send(struct ppp_channel *,
89		      struct sk_buff *);
90static int
91	ppp_irnet_ioctl(struct ppp_channel *,
92			unsigned int,
93			unsigned long);
94
95/**************************** VARIABLES ****************************/
96
97/* Filesystem callbacks (to call us) */
98static const struct file_operations irnet_device_fops =
99{
100	.owner		= THIS_MODULE,
101	.read		= dev_irnet_read,
102	.write		= dev_irnet_write,
103	.poll		= dev_irnet_poll,
104	.unlocked_ioctl	= dev_irnet_ioctl,
105	.open		= dev_irnet_open,
106	.release	= dev_irnet_close,
107	.llseek		= noop_llseek,
108  /* Also : llseek, readdir, mmap, flush, fsync, fasync, lock, readv, writev */
109};
110
111/* Structure so that the misc major (drivers/char/misc.c) take care of us... */
112static struct miscdevice irnet_misc_device =
113{
114	IRNET_MINOR,
115	"irnet",
116	&irnet_device_fops
117};
118
119#endif /* IRNET_PPP_H */
120