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