xref: /plan9/sys/include/fcall.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #pragma	lib	"libc.a"
23e12c5d1SDavid du Colombier 
3219b2ee8SDavid du Colombier typedef
43e12c5d1SDavid du Colombier struct	Fcall
53e12c5d1SDavid du Colombier {
63e12c5d1SDavid du Colombier 	char	type;
73e12c5d1SDavid du Colombier 	short	fid;
83e12c5d1SDavid du Colombier 	ushort	tag;
93e12c5d1SDavid du Colombier 	union {
103e12c5d1SDavid du Colombier 		struct {
113e12c5d1SDavid du Colombier 			ushort	oldtag;		/* Tflush */
123e12c5d1SDavid du Colombier 			Qid	qid;		/* Rattach, Rwalk, Ropen, Rcreate */
13219b2ee8SDavid du Colombier 			char	rauth[AUTHENTLEN];	/* Rattach */
143e12c5d1SDavid du Colombier 		};
153e12c5d1SDavid du Colombier 		struct {
16219b2ee8SDavid du Colombier 			char	uname[NAMELEN];		/* Tattach */
173e12c5d1SDavid du Colombier 			char	aname[NAMELEN];		/* Tattach */
18219b2ee8SDavid du Colombier 			char	ticket[TICKETLEN];	/* Tattach */
19219b2ee8SDavid du Colombier 			char	auth[AUTHENTLEN];	/* Tattach */
203e12c5d1SDavid du Colombier 		};
213e12c5d1SDavid du Colombier 		struct {
223e12c5d1SDavid du Colombier 			char	ename[ERRLEN];		/* Rerror */
23219b2ee8SDavid du Colombier 			char	authid[NAMELEN];	/* Rsession */
24219b2ee8SDavid du Colombier 			char	authdom[DOMLEN];	/* Rsession */
25219b2ee8SDavid du Colombier 			char	chal[CHALLEN];		/* Tsession/Rsession */
263e12c5d1SDavid du Colombier 		};
273e12c5d1SDavid du Colombier 		struct {
283e12c5d1SDavid du Colombier 			long	perm;		/* Tcreate */
293e12c5d1SDavid du Colombier 			short	newfid;		/* Tclone, Tclwalk */
303e12c5d1SDavid du Colombier 			char	name[NAMELEN];	/* Twalk, Tclwalk, Tcreate */
313e12c5d1SDavid du Colombier 			char	mode;		/* Tcreate, Topen */
323e12c5d1SDavid du Colombier 		};
333e12c5d1SDavid du Colombier 		struct {
34*7dd7cddfSDavid du Colombier 			vlong	offset;		/* Tread, Twrite */
353e12c5d1SDavid du Colombier 			long	count;		/* Tread, Twrite, Rread */
363e12c5d1SDavid du Colombier 			char	*data;		/* Twrite, Rread */
373e12c5d1SDavid du Colombier 		};
383e12c5d1SDavid du Colombier 		struct {
393e12c5d1SDavid du Colombier 			char	stat[DIRLEN];	/* Twstat, Rstat */
403e12c5d1SDavid du Colombier 		};
413e12c5d1SDavid du Colombier 	};
42219b2ee8SDavid du Colombier } Fcall;
433e12c5d1SDavid du Colombier 
44*7dd7cddfSDavid du Colombier #define	MAXFDATA	(8*1024)
45*7dd7cddfSDavid du Colombier #define	MAXRPC		(MAXFDATA+MAXMSG)
46219b2ee8SDavid du Colombier #define	MAXMSG		160	/* max header sans data */
473e12c5d1SDavid du Colombier #define	NOTAG		0xFFFF	/* Dummy tag */
483e12c5d1SDavid du Colombier 
493e12c5d1SDavid du Colombier enum
503e12c5d1SDavid du Colombier {
513e12c5d1SDavid du Colombier 	Tnop =		50,
523e12c5d1SDavid du Colombier 	Rnop,
53219b2ee8SDavid du Colombier 	Tosession =	52,	/* illegal */
54219b2ee8SDavid du Colombier 	Rosession,		/* illegal */
553e12c5d1SDavid du Colombier 	Terror =	54,	/* illegal */
563e12c5d1SDavid du Colombier 	Rerror,
573e12c5d1SDavid du Colombier 	Tflush =	56,
583e12c5d1SDavid du Colombier 	Rflush,
59219b2ee8SDavid du Colombier 	Toattach =	58,	/* illegal */
60219b2ee8SDavid du Colombier 	Roattach,		/* illegal */
613e12c5d1SDavid du Colombier 	Tclone =	60,
623e12c5d1SDavid du Colombier 	Rclone,
633e12c5d1SDavid du Colombier 	Twalk =		62,
643e12c5d1SDavid du Colombier 	Rwalk,
653e12c5d1SDavid du Colombier 	Topen =		64,
663e12c5d1SDavid du Colombier 	Ropen,
673e12c5d1SDavid du Colombier 	Tcreate =	66,
683e12c5d1SDavid du Colombier 	Rcreate,
693e12c5d1SDavid du Colombier 	Tread =		68,
703e12c5d1SDavid du Colombier 	Rread,
713e12c5d1SDavid du Colombier 	Twrite =	70,
723e12c5d1SDavid du Colombier 	Rwrite,
733e12c5d1SDavid du Colombier 	Tclunk =	72,
743e12c5d1SDavid du Colombier 	Rclunk,
753e12c5d1SDavid du Colombier 	Tremove =	74,
763e12c5d1SDavid du Colombier 	Rremove,
773e12c5d1SDavid du Colombier 	Tstat =		76,
783e12c5d1SDavid du Colombier 	Rstat,
793e12c5d1SDavid du Colombier 	Twstat =	78,
803e12c5d1SDavid du Colombier 	Rwstat,
813e12c5d1SDavid du Colombier 	Tclwalk =	80,
823e12c5d1SDavid du Colombier 	Rclwalk,
83219b2ee8SDavid du Colombier 	Tauth =		82,	/* illegal */
84219b2ee8SDavid du Colombier 	Rauth,			/* illegal */
85219b2ee8SDavid du Colombier 	Tsession =	84,
86219b2ee8SDavid du Colombier 	Rsession,
87219b2ee8SDavid du Colombier 	Tattach =	86,
88219b2ee8SDavid du Colombier 	Rattach,
89*7dd7cddfSDavid du Colombier 	Tmax,
903e12c5d1SDavid du Colombier };
913e12c5d1SDavid du Colombier 
923e12c5d1SDavid du Colombier int	convM2S(char*, Fcall*, int);
933e12c5d1SDavid du Colombier int	convS2M(Fcall*, char*);
943e12c5d1SDavid du Colombier 
953e12c5d1SDavid du Colombier int	convM2D(char*, Dir*);
963e12c5d1SDavid du Colombier int	convD2M(Dir*, char*);
973e12c5d1SDavid du Colombier 
98*7dd7cddfSDavid du Colombier int	fcallconv(va_list*, Fconv*);
99*7dd7cddfSDavid du Colombier int	dirconv(va_list*, Fconv*);
100*7dd7cddfSDavid du Colombier int	dirmodeconv(va_list*, Fconv*);
1013e12c5d1SDavid du Colombier 
1023e12c5d1SDavid du Colombier char*	getS(int, char*, Fcall*, long*);
103219b2ee8SDavid du Colombier 
104*7dd7cddfSDavid du Colombier #pragma	varargck	type	"F"	Fcall*
105*7dd7cddfSDavid du Colombier #pragma	varargck	type	"M"	ulong
106*7dd7cddfSDavid du Colombier #pragma	varargck	type	"D"	Dir*
107