1 /* 2 * Based on cfs.h from Coda, but revamped for increased simplicity. 3 * Linux modifications by Peter Braam, Aug 1996 4 * Rewritten for InterMezzo 5 */ 6 7 #ifndef _PRESTO_HEADER_ 8 #define _PRESTO_HEADER_ 9 10 11 /* upcall.c */ 12 #define SYNCHRONOUS 0 13 #define ASYNCHRONOUS 1 14 15 int lento_permit(int minor, int pathlen, int fsetnamelen, char *path, char *fset); 16 int lento_opendir(int minor, int pathlen, char *path, int async); 17 int lento_kml(int minor, unsigned int offset, unsigned int first_recno, 18 unsigned int length, unsigned int last_recno, int namelen, 19 char *fsetname); 20 int lento_open(int minor, int pathlen, char *path); 21 int lento_journal(int minor, char *page, int async); 22 int lento_release_permit(int minor, int cookie); 23 24 /* 25 * Kernel <--> Lento communications. 26 */ 27 /* upcalls */ 28 #define LENTO_PERMIT 1 29 #define LENTO_JOURNAL 2 30 #define LENTO_OPENDIR 3 31 #define LENTO_OPEN 4 32 #define LENTO_SIGNAL 5 33 #define LENTO_KML 6 34 #define LENTO_COOKIE 7 35 36 /* Lento <-> Presto RPC arguments */ 37 struct lento_up_hdr { 38 unsigned int opcode; 39 unsigned int unique; /* Keep multiple outstanding msgs distinct */ 40 u_short pid; /* Common to all */ 41 u_short uid; 42 }; 43 44 /* This structure _must_ sit at the beginning of the buffer */ 45 struct lento_down_hdr { 46 unsigned int opcode; 47 unsigned int unique; 48 unsigned int result; 49 }; 50 51 /* lento_permit: */ 52 struct lento_permit_in { 53 struct lento_up_hdr uh; 54 int pathlen; 55 int fsetnamelen; 56 char path[0]; 57 }; 58 struct lento_permit_out { 59 struct lento_down_hdr dh; 60 }; 61 62 63 /* lento_opendir: */ 64 struct lento_opendir_in { 65 struct lento_up_hdr uh; 66 int async; 67 int pathlen; 68 char path[0]; 69 }; 70 struct lento_opendir_out { 71 struct lento_down_hdr dh; 72 }; 73 74 75 /* lento_kml: */ 76 struct lento_kml_in { 77 struct lento_up_hdr uh; 78 unsigned int offset; 79 unsigned int first_recno; 80 unsigned int length; 81 unsigned int last_recno; 82 int namelen; 83 char fsetname[0]; 84 }; 85 86 struct lento_kml_out { 87 struct lento_down_hdr dh; 88 }; 89 90 91 /* lento_open: */ 92 struct lento_open_in { 93 struct lento_up_hdr uh; 94 int pathlen; 95 char path[0]; 96 }; 97 struct lento_open_out { 98 struct lento_down_hdr dh; 99 }; 100 101 /* lento_response_cookie */ 102 struct lento_response_cookie_in { 103 struct lento_up_hdr uh; 104 int cookie; 105 }; 106 107 struct lento_response_cookie_out { 108 struct lento_down_hdr dh; 109 }; 110 111 112 struct lento_mknod { 113 struct lento_down_hdr dh; 114 int major; 115 int minor; 116 int mode; 117 char path[0]; 118 }; 119 120 121 /* NB: every struct below begins with an up_hdr */ 122 union up_args { 123 struct lento_up_hdr uh; 124 struct lento_permit_in lento_permit; 125 struct lento_open_in lento_open; 126 struct lento_opendir_in lento_opendir; 127 struct lento_kml_in lento_kml; 128 struct lento_response_cookie_in lento_response_cookie; 129 }; 130 131 union down_args { 132 struct lento_down_hdr dh; 133 struct lento_permit_out lento_permit; 134 struct lento_open_out lento_open; 135 struct lento_opendir_out lento_opendir; 136 struct lento_kml_out lento_kml; 137 struct lento_response_cookie_out lento_response_cookie; 138 }; 139 140 #include "intermezzo_psdev.h" 141 142 int lento_upcall(int minor, int read_size, int *rep_size, 143 union up_args *buffer, int async, 144 struct upc_req *rq ); 145 #endif 146 147