9os

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

commit 7b27a41b2a63d4915a4406fd6b048acabb5f6b8c
parent 46767d51a3acb7a6c14d08b3380286b2e16c1788
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Thu,  2 May 2019 12:55:15 +0100

[dev] Add clone to Dev

It allows to the drivers to overload the default clone
behaviour.

Change-Id: If0d254ab5194ade57fab7c55df044c8b38857983

Diffstat:
Mdrivers/dev.c | 6++++++
Mdrivers/dev.h | 5++++-
Mdrivers/devar.c | 1+
Mdrivers/devcons.c | 1+
Mdrivers/devfip.c | 1+
Mdrivers/devroot.c | 1+
Mdrivers/devuart.c | 1+
7 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/dev.c b/drivers/dev.c @@ -233,6 +233,12 @@ noent: Chan * clone(Chan *c, Chan *nc) { + return devtab[c->type]->clone(c, nc); +} + +Chan * +devclone(Chan *c, Chan *nc) +{ if (!nc && (nc = newchan(c->type)) == NULL) return NULL; diff --git a/drivers/dev.h b/drivers/dev.h @@ -24,6 +24,7 @@ struct dirtab { struct dev { char id; + Chan * (*clone)(Chan *c, Chan *nc); int (*walk)(Chan *c, const char *name); Chan * (*attach)(int dev); int (*read)(Chan *c, void *buf, int n); @@ -47,7 +48,6 @@ struct attr { extern Chan *devattach(int id, int dev); -extern int devseek(Chan *c, long off, int whence); extern Chan * namec(const char *name, int mode); extern Chan *clone(Chan *c, Chan *nc); extern void chanclose(Chan *c); @@ -58,6 +58,9 @@ extern void mkentry(Chan *c, Dir *dir, const char *name, long length, Qid qid, unsigned mode); extern void devlink(void); + +extern int devseek(Chan *c, long off, int whence); +extern Chan *devclone(Chan *c, Chan *nc); extern int devgen(Chan *c, const Dirtab *tab, int ntab, int n, diff --git a/drivers/devar.c b/drivers/devar.c @@ -198,6 +198,7 @@ err: const Dev ardevtab = { .id = 'R', + .clone = devclone, .attach = arattach, .walk = arwalk, .read = arread, diff --git a/drivers/devcons.c b/drivers/devcons.c @@ -379,6 +379,7 @@ consread(Chan *c, void *buf, int n) const Dev consdevtab = { .id = 's', + .clone = devclone, .attach = consattach, .walk = conswalk, .read = consread, diff --git a/drivers/devfip.c b/drivers/devfip.c @@ -246,6 +246,7 @@ err: const Dev fipdevtab = { .id = 'F', + .clone = devclone, .attach = fipattach, .walk = fipwalk, .read = fipread, diff --git a/drivers/devroot.c b/drivers/devroot.c @@ -114,6 +114,7 @@ rootread(Chan *c, void *buf, int n) const Dev rootdevtab = { .id = '/', + .clone = devclone, .attach = rootattach, .walk = rootwalk, .read = rootread, diff --git a/drivers/devuart.c b/drivers/devuart.c @@ -249,6 +249,7 @@ uartlink(Uartphy *phy, Attr *attr) const Dev uartdevtab = { .id = 't', + .clone = devclone, .attach = uartattach, .walk = uartwalk, .read = uartread,