9os

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

commit a4ac384e44ddbdd7242858fef9f2121b6bd80046
parent 3c122200c2b5d2beb094160616ced58a9e94e806
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Thu,  2 May 2019 11:11:13 +0100

[dev] Return attach field to Dev

Some drivers maybe need something additional when
someone attachs to the driver.
Revert "[dev] Remove attach field in Dev"

This reverts commit e3b79b179f4d0b6b46744c200e6541ceccf378fe.

Change-Id: I44aec3adeba2c251c076e57ec7eb187f701eee85

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

diff --git a/drivers/dev.c b/drivers/dev.c @@ -196,7 +196,7 @@ namec(const char *name, int mode) if (elem[i] != '\0') goto noent; - c = devattach(devtab[type]->id, n); + c = devtab[type]->attach(n); break; default: errno = ENOENT; diff --git a/drivers/dev.h b/drivers/dev.h @@ -25,6 +25,7 @@ struct dirtab { struct dev { char id; int (*walk)(Chan *c, const char *name); + Chan * (*attach)(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); diff --git a/drivers/devar.c b/drivers/devar.c @@ -35,6 +35,13 @@ struct arfile { 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) { @@ -191,6 +198,7 @@ err: const Dev ardevtab = { .id = 'R', + .attach = arattach, .walk = arwalk, .read = arread, .write = deverrwrite, diff --git a/drivers/devcons.c b/drivers/devcons.c @@ -36,6 +36,12 @@ 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) { @@ -373,6 +379,7 @@ consread(Chan *c, void *buf, int n) const Dev consdevtab = { .id = 's', + .attach = consattach, .walk = conswalk, .read = consread, .write = conswrite, diff --git a/drivers/devfip.c b/drivers/devfip.c @@ -23,6 +23,13 @@ struct fipfile { 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) { @@ -239,6 +246,7 @@ err: const Dev fipdevtab = { .id = 'F', + .attach = fipattach, .walk = fipwalk, .read = fipread, .write = deverrwrite, diff --git a/drivers/devroot.c b/drivers/devroot.c @@ -91,6 +91,12 @@ 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) { @@ -108,6 +114,7 @@ rootread(Chan *c, void *buf, int n) const Dev rootdevtab = { .id = '/', + .attach = rootattach, .walk = rootwalk, .read = rootread, .write = deverrwrite, diff --git a/drivers/devuart.c b/drivers/devuart.c @@ -31,6 +31,12 @@ 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) { @@ -243,6 +249,7 @@ uartlink(Uartphy *phy, Attr *attr) const Dev uartdevtab = { .id = 't', + .attach = uartattach, .walk = uartwalk, .read = uartread, .write = uartwrite,