9os

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

commit 5d980e4fbad5f499c0868db7f7b4655f45f859a3
parent 7b27a41b2a63d4915a4406fd6b048acabb5f6b8c
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Thu,  2 May 2019 13:12:37 +0100

[dev] Make attach more generic

In the drivers currently implemented the attach command
does basically the same, so it is a good idea to make it
more orthogonal and use the same default function.

Change-Id: I93bbdc7343aba7f0433b0c03e41c62a3181b07af

Diffstat:
Mdrivers/dev.c | 20++++++++++++++------
Mdrivers/dev.h | 3++-
Mdrivers/devar.c | 10++--------
Mdrivers/devcons.c | 8+-------
Mdrivers/devfip.c | 10++--------
Mdrivers/devroot.c | 8+-------
Mdrivers/devuart.c | 8+-------
7 files changed, 23 insertions(+), 44 deletions(-)

diff --git a/drivers/dev.c b/drivers/dev.c @@ -155,6 +155,17 @@ mntpoint(Chan *c) } Chan * +attach(int id, int dev) +{ + int type; + + + if ((type = devtype(id)) < 0) + return NULL; + return devtab[type]->attach(id, dev); +} + +Chan * devattach(int id, int dev) { Chan *c; @@ -173,7 +184,7 @@ devattach(int id, int dev) Chan * namec(const char *name, int mode) { - int type, n, i; + int n, i; const char *s; Chan *mnt, *c; char elem[NAMELEN]; @@ -187,16 +198,13 @@ namec(const char *name, int mode) if ((s = next(name+1, elem)) == NULL) goto noent; - if ((type = devtype(elem[0])) < 0) - return NULL; - for (n = 0, i = 1; isdigit(elem[i]); i++) n += elem[i] - '0'; if (elem[i] != '\0') goto noent; - c = devtab[type]->attach(n); + c = attach(elem[0], n); break; default: errno = ENOENT; @@ -524,7 +532,7 @@ idev(void) for (c = fdset; c < &fdset[NR_CHANS]; c++) c->type = NODEV; - if ((c = devattach('/', 0)) == NULL) + if ((c = attach('/', 0)) == NULL) panic("idev:attach"); if (!clone(c, &slash)) diff --git a/drivers/dev.h b/drivers/dev.h @@ -26,7 +26,7 @@ struct dev { char id; Chan * (*clone)(Chan *c, Chan *nc); int (*walk)(Chan *c, const char *name); - Chan * (*attach)(int dev); + Chan * (*attach)(int id, int dev); int (*read)(Chan *c, void *buf, int n); int (*write)(Chan *c, void *buf, int n); int (*seek)(Chan *c, long off, int whence); @@ -50,6 +50,7 @@ struct attr { extern Chan *devattach(int id, int dev); extern Chan * namec(const char *name, int mode); extern Chan *clone(Chan *c, Chan *nc); +extern Chan *attach(int id, int dev); extern void chanclose(Chan *c); extern int buf2chan(Chan *c, void *dst, void *src, diff --git a/drivers/devar.c b/drivers/devar.c @@ -36,12 +36,6 @@ static struct arfile archives[NR_ARS]; static int nars; -static Chan * -arattach(int dev) -{ - return devattach('R', dev); -} - static int gethdr(Chan *c, struct ar_hdr *hdr) { @@ -173,7 +167,7 @@ armount(Chan *c, char *spec) offhdr = cspec->offset; switch (gethdr(cspec, &hdr)) { case 0: - return devattach('R', nars++); + return attach('R', nars++); case -1: goto err; default: @@ -199,7 +193,7 @@ err: const Dev ardevtab = { .id = 'R', .clone = devclone, - .attach = arattach, + .attach = devattach, .walk = arwalk, .read = arread, .write = deverrwrite, diff --git a/drivers/devcons.c b/drivers/devcons.c @@ -36,12 +36,6 @@ static char buffer[LINELEN]; static int head; static int tail; -static Chan * -consattach(int dev) -{ - return devattach('s', dev); -} - static int conswalk(Chan *c, const char *name) { @@ -380,7 +374,7 @@ consread(Chan *c, void *buf, int n) const Dev consdevtab = { .id = 's', .clone = devclone, - .attach = consattach, + .attach = devattach, .walk = conswalk, .read = consread, .write = conswrite, diff --git a/drivers/devfip.c b/drivers/devfip.c @@ -24,12 +24,6 @@ static struct fipfile archives[NR_FIPS]; static int nfips; -static Chan * -fipattach(int dev) -{ - return devattach('F', dev); -} - static int getntry(Chan *c, struct fip_toc_entry *ntry) { @@ -228,7 +222,7 @@ fipmount(Chan *c, char *spec) for (n = 0; n < NR_FILES; n++) { switch (getntry(cspec, &ntry)) { case 0: - return devattach('F', nfips++); + return attach('F', nfips++); case -1: goto err; default: @@ -247,7 +241,7 @@ err: const Dev fipdevtab = { .id = 'F', .clone = devclone, - .attach = fipattach, + .attach = devattach, .walk = fipwalk, .read = fipread, .write = deverrwrite, diff --git a/drivers/devroot.c b/drivers/devroot.c @@ -91,12 +91,6 @@ blobstatus(Chan *c, void *buf, int n) return buf2chan(c, buf, info, n, len); } -static Chan * -rootattach(int dev) -{ - return devattach('/', dev); -} - static int rootread(Chan *c, void *buf, int n) { @@ -115,7 +109,7 @@ rootread(Chan *c, void *buf, int n) const Dev rootdevtab = { .id = '/', .clone = devclone, - .attach = rootattach, + .attach = devattach, .walk = rootwalk, .read = rootread, .write = deverrwrite, diff --git a/drivers/devuart.c b/drivers/devuart.c @@ -31,12 +31,6 @@ uartwalk(Chan *c, const char *name) return devwalk(c, name, dirtab, NELEM(dirtab), devgen); } -static Chan * -uartattach(int dev) -{ - return devattach('t', dev); -} - static Uart * getuart(Chan *c) { @@ -250,7 +244,7 @@ uartlink(Uartphy *phy, Attr *attr) const Dev uartdevtab = { .id = 't', .clone = devclone, - .attach = uartattach, + .attach = devattach, .walk = uartwalk, .read = uartread, .write = uartwrite,