blob: d2beb7df8f7fdd5d09176efd6b3ea8e4884b6b5a [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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 int
80 dev_irnet_ioctl(struct inode *,
81 struct file *,
82 unsigned int,
83 unsigned long);
84/* ------------------------ PPP INTERFACE ------------------------ */
85static inline struct sk_buff *
86 irnet_prepare_skb(irnet_socket *,
87 struct sk_buff *);
88static int
89 ppp_irnet_send(struct ppp_channel *,
90 struct sk_buff *);
91static int
92 ppp_irnet_ioctl(struct ppp_channel *,
93 unsigned int,
94 unsigned long);
95
96/**************************** VARIABLES ****************************/
97
98/* Filesystem callbacks (to call us) */
99static struct file_operations irnet_device_fops =
100{
101 .owner = THIS_MODULE,
102 .read = dev_irnet_read,
103 .write = dev_irnet_write,
104 .poll = dev_irnet_poll,
105 .ioctl = dev_irnet_ioctl,
106 .open = dev_irnet_open,
107 .release = dev_irnet_close
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 */