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:
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,