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 ----------------------- */
48 static inline ssize_t
49 	irnet_ctrl_write(irnet_socket *,
50 			 const char *,
51 			 size_t);
52 static inline ssize_t
53 	irnet_ctrl_read(irnet_socket *,
54 			struct file *,
55 			char *,
56 			size_t);
57 static inline unsigned int
58 	irnet_ctrl_poll(irnet_socket *,
59 			struct file *,
60 			poll_table *);
61 /* ----------------------- CHARACTER DEVICE ----------------------- */
62 static int
63 	dev_irnet_open(struct inode *,	/* fs callback : open */
64 		       struct file *),
65 	dev_irnet_close(struct inode *,
66 			struct file *);
67 static ssize_t
68 	dev_irnet_write(struct file *,
69 			const char *,
70 			size_t,
71 			loff_t *),
72 	dev_irnet_read(struct file *,
73 		       char *,
74 		       size_t,
75 		       loff_t *);
76 static unsigned int
77 	dev_irnet_poll(struct file *,
78 		       poll_table *);
79 static int
80 	dev_irnet_ioctl(struct inode *,
81 			struct file *,
82 			unsigned int,
83 			unsigned long);
84 /* ------------------------ PPP INTERFACE ------------------------ */
85 static inline struct sk_buff *
86 	irnet_prepare_skb(irnet_socket *,
87 			  struct sk_buff *);
88 static int
89 	ppp_irnet_send(struct ppp_channel *,
90 		      struct sk_buff *);
91 static int
92 	ppp_irnet_ioctl(struct ppp_channel *,
93 			unsigned int,
94 			unsigned long);
95 
96 /**************************** VARIABLES ****************************/
97 
98 /* Filesystem callbacks (to call us) */
99 static struct file_operations irnet_device_fops =
100 {
101   read:		dev_irnet_read,
102   write:	dev_irnet_write,
103   poll:		dev_irnet_poll,
104   ioctl:	dev_irnet_ioctl,
105   open:		dev_irnet_open,
106   release:	dev_irnet_close
107   /* Also : llseek, readdir, mmap, flush, fsync, fasync, lock, readv, writev */
108 };
109 
110 /* Structure so that the misc major (drivers/char/misc.c) take care of us... */
111 static struct miscdevice irnet_misc_device =
112 {
113 	IRNET_MINOR,
114 	"irnet",
115 	&irnet_device_fops
116 };
117 
118 /* Generic PPP callbacks (to call us) */
119 struct ppp_channel_ops irnet_ppp_ops =
120 {
121   ppp_irnet_send,
122   ppp_irnet_ioctl
123 };
124 
125 #endif /* IRNET_PPP_H */
126