blob: 0b3e6ff74e3a39ddc3beb3d241db8710b322404e [file] [log] [blame]
/*
* Based on cfs.h from Coda, but revamped for increased simplicity.
* Linux modifications by Peter Braam, Aug 1996
* Rewritten for InterMezzo
*/
#ifndef _PRESTO_HEADER_
#define _PRESTO_HEADER_
/* upcall.c */
#define SYNCHRONOUS 0
#define ASYNCHRONOUS 1
int lento_permit(int minor, int pathlen, int fsetnamelen, char *path, char *fset);
int lento_opendir(int minor, int pathlen, char *path, int async);
int lento_kml(int minor, unsigned int offset, unsigned int first_recno,
unsigned int length, unsigned int last_recno, int namelen,
char *fsetname);
int lento_open(int minor, int pathlen, char *path);
int lento_journal(int minor, char *page, int async);
int lento_release_permit(int minor, int cookie);
/*
* Kernel <--> Lento communications.
*/
/* upcalls */
#define LENTO_PERMIT 1
#define LENTO_JOURNAL 2
#define LENTO_OPENDIR 3
#define LENTO_OPEN 4
#define LENTO_SIGNAL 5
#define LENTO_KML 6
#define LENTO_COOKIE 7
/* Lento <-> Presto RPC arguments */
struct lento_up_hdr {
unsigned int opcode;
unsigned int unique; /* Keep multiple outstanding msgs distinct */
u_short pid; /* Common to all */
u_short uid;
};
/* This structure _must_ sit at the beginning of the buffer */
struct lento_down_hdr {
unsigned int opcode;
unsigned int unique;
unsigned int result;
};
/* lento_permit: */
struct lento_permit_in {
struct lento_up_hdr uh;
int pathlen;
int fsetnamelen;
char path[0];
};
struct lento_permit_out {
struct lento_down_hdr dh;
};
/* lento_opendir: */
struct lento_opendir_in {
struct lento_up_hdr uh;
int async;
int pathlen;
char path[0];
};
struct lento_opendir_out {
struct lento_down_hdr dh;
};
/* lento_kml: */
struct lento_kml_in {
struct lento_up_hdr uh;
unsigned int offset;
unsigned int first_recno;
unsigned int length;
unsigned int last_recno;
int namelen;
char fsetname[0];
};
struct lento_kml_out {
struct lento_down_hdr dh;
};
/* lento_open: */
struct lento_open_in {
struct lento_up_hdr uh;
int pathlen;
char path[0];
};
struct lento_open_out {
struct lento_down_hdr dh;
};
/* lento_response_cookie */
struct lento_response_cookie_in {
struct lento_up_hdr uh;
int cookie;
};
struct lento_response_cookie_out {
struct lento_down_hdr dh;
};
struct lento_mknod {
struct lento_down_hdr dh;
int major;
int minor;
int mode;
char path[0];
};
/* NB: every struct below begins with an up_hdr */
union up_args {
struct lento_up_hdr uh;
struct lento_permit_in lento_permit;
struct lento_open_in lento_open;
struct lento_opendir_in lento_opendir;
struct lento_kml_in lento_kml;
struct lento_response_cookie_in lento_response_cookie;
};
union down_args {
struct lento_down_hdr dh;
struct lento_permit_out lento_permit;
struct lento_open_out lento_open;
struct lento_opendir_out lento_opendir;
struct lento_kml_out lento_kml;
struct lento_response_cookie_out lento_response_cookie;
};
#include "intermezzo_psdev.h"
int lento_upcall(int minor, int read_size, int *rep_size,
union up_args *buffer, int async,
struct upc_req *rq );
#endif