11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	IrNET protocol module : Synchronous PPP over an IrDA socket.
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *		Jean II - HPL `00 - <jt@hpl.hp.com>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file contains all definitions and declarations necessary for the
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PPP part of the IrNET module.
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is a private header, so other modules don't want to know
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * what's in there...
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef IRNET_PPP_H
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IRNET_PPP_H
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***************************** INCLUDES *****************************/
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "irnet.h"		/* Module global include */
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/************************ CONSTANTS & MACROS ************************/
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* /dev/irnet file constants */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IRNET_MAJOR	10	/* Misc range */
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IRNET_MINOR	187	/* Official allocation */
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IrNET control channel stuff */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IRNET_MAX_COMMAND	256	/* Max length of a command line */
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PPP hardcore stuff */
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bits in rbits (PPP flags in irnet struct) */
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SC_RCV_BITS	(SC_RCV_B7_1|SC_RCV_B7_0|SC_RCV_ODDP|SC_RCV_EVNP)
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bit numbers in busy */
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XMIT_BUSY	0
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_BUSY	1
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XMIT_WAKEUP	2
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XMIT_FULL	3
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Queue management */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PPPSYNC_MAX_RQLEN	32	/* arbitrary */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/****************************** TYPES ******************************/
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**************************** PROTOTYPES ****************************/
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------- CONTROL CHANNEL ----------------------- */
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline ssize_t
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	irnet_ctrl_write(irnet_socket *,
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			 const char *,
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			 size_t);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline ssize_t
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	irnet_ctrl_read(irnet_socket *,
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			struct file *,
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			char *,
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			size_t);
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned int
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	irnet_ctrl_poll(irnet_socket *,
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			struct file *,
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			poll_table *);
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------- CHARACTER DEVICE ----------------------- */
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dev_irnet_open(struct inode *,	/* fs callback : open */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       struct file *),
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dev_irnet_close(struct inode *,
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			struct file *);
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic ssize_t
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dev_irnet_write(struct file *,
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			const char __user *,
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			size_t,
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			loff_t *),
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dev_irnet_read(struct file *,
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       char __user *,
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       size_t,
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       loff_t *);
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dev_irnet_poll(struct file *,
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       poll_table *);
7954064600981ab0fe977b0e760732c30f4472d693Alan Coxstatic long
8054064600981ab0fe977b0e760732c30f4472d693Alan Cox	dev_irnet_ioctl(struct file *,
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			unsigned int,
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			unsigned long);
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ------------------------ PPP INTERFACE ------------------------ */
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline struct sk_buff *
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	irnet_prepare_skb(irnet_socket *,
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  struct sk_buff *);
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ppp_irnet_send(struct ppp_channel *,
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		      struct sk_buff *);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ppp_irnet_ioctl(struct ppp_channel *,
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			unsigned int,
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			unsigned long);
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**************************** VARIABLES ****************************/
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Filesystem callbacks (to call us) */
985ca1b998d33c39819fca2b675d80c4469e705f2dStephen Hemmingerstatic const struct file_operations irnet_device_fops =
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.owner		= THIS_MODULE,
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.read		= dev_irnet_read,
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.write		= dev_irnet_write,
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.poll		= dev_irnet_poll,
10454064600981ab0fe977b0e760732c30f4472d693Alan Cox	.unlocked_ioctl	= dev_irnet_ioctl,
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.open		= dev_irnet_open,
1060a5f1d476aef43916abb2b8634ebff23ef2c05f6Arnd Bergmann	.release	= dev_irnet_close,
1070a5f1d476aef43916abb2b8634ebff23ef2c05f6Arnd Bergmann	.llseek		= noop_llseek,
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  /* Also : llseek, readdir, mmap, flush, fsync, fasync, lock, readv, writev */
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structure so that the misc major (drivers/char/misc.c) take care of us... */
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct miscdevice irnet_misc_device =
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	IRNET_MINOR,
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	"irnet",
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	&irnet_device_fops
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* IRNET_PPP_H */
120