diff options
Diffstat (limited to 'os/port/devXXX.c')
| -rw-r--r-- | os/port/devXXX.c | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/os/port/devXXX.c b/os/port/devXXX.c new file mode 100644 index 00000000..2c76abcd --- /dev/null +++ b/os/port/devXXX.c @@ -0,0 +1,147 @@ +/* + * template for making a new device + */ +#include "u.h" +#include "../port/lib.h" +#include "mem.h" +#include "dat.h" +#include "fns.h" +#include "../port/error.h" + + +enum{ + Qdir, + Qdata, +}; + +static +Dirtab XXXtab[]={ + ".", {Qdir, 0, QTDIR}, 0, 0555, /* entry for "." must be first if devgen used */ + "data", {Qdata, 0}, 0, 0666, +}; + +static void +XXXreset(void) /* default in dev.c */ +{ +} + +static void +XXXinit(void) /* default in dev.c */ +{ +} + +static Chan* +XXXattach(char* spec) +{ + return devattach('X', spec); +} + +static Walkqid* +XXXwalk(Chan *c, Chan *nc, char **name, int nname) +{ + return devwalk(c, nc, name, nname, XXXtab, nelem(XXXtab), devgen); +} + +static int +XXXstat(Chan* c, uchar *db, int n) +{ + return devstat(c, db, n, XXXtab, nelem(XXXtab), devgen); +} + +static Chan* +XXXopen(Chan* c, int omode) +{ + return devopen(c, omode, XXXtab, nelem(XXXtab), devgen); +} + +static void +XXXcreate(Chan* c, char* name, int omode, ulong perm) /* default in dev.c */ +{ + USED(c, name, omode, perm); + error(Eperm); +} + +static void +XXXremove(Chan* c) /* default in dev.c */ +{ + USED(c); + error(Eperm); +} + +static int +XXXwstat(Chan* c, uchar *dp, int n) /* default in dev.c */ +{ + USED(c, dp); + error(Eperm); + return n; +} + +static void +XXXclose(Chan* c) +{ + USED(c); +} + +static long +XXXread(Chan* c, void* a, long n, vlong offset) +{ + USED(offset); + + switch((ulong)c->qid.path){ + case Qdir: + return devdirread(c, a, n, XXXtab, nelem(XXXtab), devgen); + case Qdata: + break; + default: + n=0; + break; + } + return n; +} + +static Block* +XXXbread(Chan* c, long n, ulong offset) /* default in dev.c */ +{ + return devbread(c, n, offset); +} + +static long +XXXwrite(Chan* c, void* a, long n, vlong offset) +{ + USED(a, offset); + + switch((ulong)c->qid.path){ + case Qdata: + break; + default: + error(Ebadusefd); + } + return n; +} + +static long +XXXbwrite(Chan* c, Block* bp, ulong offset) /* default in dev.c */ +{ + return devbwrite(c, bp, offset); +} + +Dev XXXdevtab = { /* defaults in dev.c */ + 'X', + "XXX", + + XXXreset, /* devreset */ + XXXinit, /* devinit */ + devshutdown, + XXXattach, + XXXwalk, + XXXstat, + XXXopen, + XXXcreate, /* devcreate */ + XXXclose, + XXXread, + XXXbread, /* devbread */ + XXXwrite, + XXXbwrite, /* devbwrite */ + XXXremove, /* devremove */ + XXXwstat, /* devwstat */ +}; |
