Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
irnet_ppp.h
Go to the documentation of this file.
1 /*
2  * IrNET protocol module : Synchronous PPP over an IrDA socket.
3  *
4  * Jean II - HPL `00 - <[email protected]>
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 __user *,
70  size_t,
71  loff_t *),
72  dev_irnet_read(struct file *,
73  char __user *,
74  size_t,
75  loff_t *);
76 static unsigned int
77  dev_irnet_poll(struct file *,
78  poll_table *);
79 static long
80  dev_irnet_ioctl(struct file *,
81  unsigned int,
82  unsigned long);
83 /* ------------------------ PPP INTERFACE ------------------------ */
84 static inline struct sk_buff *
85  irnet_prepare_skb(irnet_socket *,
86  struct sk_buff *);
87 static int
88  ppp_irnet_send(struct ppp_channel *,
89  struct sk_buff *);
90 static int
91  ppp_irnet_ioctl(struct ppp_channel *,
92  unsigned int,
93  unsigned long);
94 
95 /**************************** VARIABLES ****************************/
96 
97 /* Filesystem callbacks (to call us) */
98 static 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... */
112 static struct miscdevice irnet_misc_device =
113 {
114  IRNET_MINOR,
115  "irnet",
116  &irnet_device_fops
117 };
118 
119 #endif /* IRNET_PPP_H */