9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 162747b94f638768178d38af33f1f609305dd581
parent e7a48f46c5b29472a2db41889bb4642f49045bf1
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Thu, 28 Feb 2019 10:19:16 +0000

[dev] Add devwrite()

Only a few devs are going to support write, so it makes
sense to have a general function to disable writes. This
patch also makes the order of the parameters in bind()
more orthogonal with the driver prototype.

Change-Id: I675a7aa35408b5a4c9b01f1ed95c8706c696c46b

Diffstat:
Mdrivers/dev.c | 24+++++++++++++++---------
Mdrivers/dev.h | 3++-
Mdrivers/devroot.c | 10++--------
Mdrivers/devuart.c | 1+
4 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/drivers/dev.c b/drivers/dev.c @@ -334,6 +334,13 @@ write(int fd, void *buf, int n) } int +devwrite(Chan *c, void *buf, int n) +{ + errno = EINVAL; + return -1; +} + +int seek(int fd, long long off, int whence) { Chan *c; @@ -362,10 +369,16 @@ seek(int fd, long long off, int whence) } int +devbind(Chan *new, Chan *where) +{ + errno = EINVAL; + return -1; +} + +int bind(char *new, char *where) { Chan *cw, *cn; - int (*fn)(Chan *, Chan *); if ((cw = namec(where, O_READ)) == NULL) goto err0; @@ -378,15 +391,8 @@ bind(char *new, char *where) if ((cn = namec(new, O_BIND)) == NULL) goto err1; - fn = devtab[cw->type]->bind; - if (!fn) { - errno = EINVAL; - goto err2; - } - - if ((*fn)(cw, cn) < 0) + if (devtab[cw->type]->bind(cn, cw) < 0) goto err2; - chanclose(cw); return 0; diff --git a/drivers/dev.h b/drivers/dev.h @@ -11,7 +11,6 @@ typedef struct chan Chan; typedef struct dirtab Dirtab; typedef int Devgen(Chan *, const Dirtab *, int, int, Dir *); typedef struct attr Attr; -typedef struct uart Uart; struct dirtab { char name[NAMELEN]; @@ -48,6 +47,8 @@ extern Chan *devclone(Chan *c, Chan *nc); extern Chan *devattach(int id, int dev); extern Chan *devclone(Chan *c, Chan *nc); extern void devlink(void); +extern int devbind(Chan *new, Chan *where); +extern int devwrite(Chan *c, void *buf, int n); extern void chanclose(Chan *c); extern int devgen(Chan *c, const Dirtab *tab, int ntab, diff --git a/drivers/devroot.c b/drivers/devroot.c @@ -65,7 +65,7 @@ rootwalk(Chan *c, const char *name) } static int -rootbind(Chan *cw, Chan *cn) +rootbind(Chan *cn, Chan *cw) { Qid qid; Chan *mnt; @@ -95,12 +95,6 @@ rootread(Chan *c, void *buf, int n) return dirread(c, buf, n, NULL, 0, rootgen); } -static int -rootwrite(Chan *c, void *buf, int n) -{ - return -1; -} - const Dev rootdevtab = { .id = '/', .name = "root", @@ -108,6 +102,6 @@ const Dev rootdevtab = { .attach = rootattach, .walk = rootwalk, .read = rootread, - .write = rootwrite, + .write = devwrite, .bind = rootbind, }; diff --git a/drivers/devuart.c b/drivers/devuart.c @@ -289,4 +289,5 @@ const Dev uartdevtab = { .clone = devclone, .read = uartread, .write = uartwrite, + .bind = devbind, };