Loading...
1 2 3 4 5 6 7 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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | /* * IrNET protocol module : Synchronous PPP over an IrDA socket. * * Jean II - HPL `00 - <jt@hpl.hp.com> * * This file contains all definitions and declarations necessary for the * PPP part of the IrNET module. * This file is a private header, so other modules don't want to know * what's in there... */ #ifndef IRNET_PPP_H #define IRNET_PPP_H /***************************** INCLUDES *****************************/ #include "irnet.h" /* Module global include */ /************************ CONSTANTS & MACROS ************************/ /* /dev/irnet file constants */ #define IRNET_MAJOR 10 /* Misc range */ #define IRNET_MINOR 187 /* Official allocation */ /* IrNET control channel stuff */ #define IRNET_MAX_COMMAND 256 /* Max length of a command line */ /* PPP hardcore stuff */ /* Bits in rbits (PPP flags in irnet struct) */ #define SC_RCV_BITS (SC_RCV_B7_1|SC_RCV_B7_0|SC_RCV_ODDP|SC_RCV_EVNP) /* Bit numbers in busy */ #define XMIT_BUSY 0 #define RECV_BUSY 1 #define XMIT_WAKEUP 2 #define XMIT_FULL 3 /* Queue management */ #define PPPSYNC_MAX_RQLEN 32 /* arbitrary */ /****************************** TYPES ******************************/ /**************************** PROTOTYPES ****************************/ /* ----------------------- CONTROL CHANNEL ----------------------- */ static inline ssize_t irnet_ctrl_write(irnet_socket *, const char *, size_t); static inline ssize_t irnet_ctrl_read(irnet_socket *, struct file *, char *, size_t); static inline unsigned int irnet_ctrl_poll(irnet_socket *, struct file *, poll_table *); /* ----------------------- CHARACTER DEVICE ----------------------- */ static int dev_irnet_open(struct inode *, /* fs callback : open */ struct file *), dev_irnet_close(struct inode *, struct file *); static ssize_t dev_irnet_write(struct file *, const char __user *, size_t, loff_t *), dev_irnet_read(struct file *, char __user *, size_t, loff_t *); static unsigned int dev_irnet_poll(struct file *, poll_table *); static long dev_irnet_ioctl(struct file *, unsigned int, unsigned long); /* ------------------------ PPP INTERFACE ------------------------ */ static inline struct sk_buff * irnet_prepare_skb(irnet_socket *, struct sk_buff *); static int ppp_irnet_send(struct ppp_channel *, struct sk_buff *); static int ppp_irnet_ioctl(struct ppp_channel *, unsigned int, unsigned long); /**************************** VARIABLES ****************************/ /* Filesystem callbacks (to call us) */ static const struct file_operations irnet_device_fops = { .owner = THIS_MODULE, .read = dev_irnet_read, .write = dev_irnet_write, .poll = dev_irnet_poll, .unlocked_ioctl = dev_irnet_ioctl, .open = dev_irnet_open, .release = dev_irnet_close, .llseek = noop_llseek, /* Also : llseek, readdir, mmap, flush, fsync, fasync, lock, readv, writev */ }; /* Structure so that the misc major (drivers/char/misc.c) take care of us... */ static struct miscdevice irnet_misc_device = { IRNET_MINOR, "irnet", &irnet_device_fops }; #endif /* IRNET_PPP_H */ |