diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-12-13 06:23:23 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-12-13 06:23:23 +0100 |
commit | 25a9cc3adbf9f9af8e71dc6125fc32a9a17ab839 (patch) | |
tree | 0660ccc403defefd88c17308df2b139e52394efc | |
parent | 6a3b9012d551fecf4ba40d79dff8adbe54842835 (diff) |
pc, pc64: untangle embedded controller (ec) dependency from devarch
-rw-r--r-- | sys/src/9/pc/devarch.c | 26 | ||||
-rw-r--r-- | sys/src/9/pc/ec.c | 84 | ||||
-rw-r--r-- | sys/src/9/pc/pccpuf | 1 | ||||
-rw-r--r-- | sys/src/9/pc/pcf | 3 | ||||
-rw-r--r-- | sys/src/9/pc64/pc64 | 3 | ||||
-rw-r--r-- | sys/src/9/pc64/pccpu64 | 5 |
6 files changed, 67 insertions, 55 deletions
diff --git a/sys/src/9/pc/devarch.c b/sys/src/9/pc/devarch.c index 3d3ef0c1b..9f586325e 100644 --- a/sys/src/9/pc/devarch.c +++ b/sys/src/9/pc/devarch.c @@ -34,7 +34,6 @@ enum { Qiow, Qiol, Qmsr, - Qec, Qbase, Qmax = 16, @@ -64,7 +63,6 @@ static Dirtab archdir[Qmax] = { "iow", { Qiow, 0 }, 0, 0660, "iol", { Qiol, 0 }, 0, 0660, "msr", { Qmsr, 0 }, 0, 0660, - "ec", { Qec, 0 }, 0, 0660, }; Lock archwlock; /* the lock is only for changing archdir */ int narchdir = Qbase; @@ -363,7 +361,7 @@ static long archread(Chan *c, void *a, long n, vlong offset) { char *buf, *p; - int port, v; + int port; ushort *sp; ulong *lp; vlong *vp; @@ -409,19 +407,6 @@ archread(Chan *c, void *a, long n, vlong offset) error(Ebadarg); return n; - case Qec: - if(offset >= 256) - error(Ebadarg); - if(offset+n > 256) - n = 256 - offset; - p = a; - for(port = offset; port < offset+n; port++){ - if((v = ecread(port)) < 0) - error(Eio); - *p++ = v; - } - return n; - case Qioalloc: break; @@ -501,15 +486,6 @@ archwrite(Chan *c, void *a, long n, vlong offset) error(Ebadarg); return n; - case Qec: - if(offset+n > 256) - error(Ebadarg); - p = a; - for(port = offset; port < offset+n; port++) - if(ecwrite(port, *p++) < 0) - error(Eio); - return n; - default: if(c->qid.path < narchdir && (fn = writefn[c->qid.path])) return fn(c, a, n, offset); diff --git a/sys/src/9/pc/ec.c b/sys/src/9/pc/ec.c index 271c13c50..b3e94335f 100644 --- a/sys/src/9/pc/ec.c +++ b/sys/src/9/pc/ec.c @@ -64,30 +64,6 @@ ecwait(uchar mask, uchar val) } int -ecinit(int cmdport, int dataport) -{ - print("ec: cmd %X, data %X\n", cmdport, dataport); - - if(ioalloc(cmdport, 1, 0, "ec.sc") < 0){ - print("ec: cant allocate cmd port %X\n", cmdport); - return -1; - } - if(ioalloc(dataport, 1, 0, "ec.data") < 0){ - print("ec: cant allocate data port %X\n", dataport); - iofree(cmdport); - return -1; - } - - lock(&ec); - ec.port[EC_SC] = cmdport; - ec.port[EC_DATA] = dataport; - ec.init = 1; - unlock(&ec); - - return 0; -} - -int ecread(uchar addr) { int r; @@ -136,3 +112,63 @@ out: unlock(&ec); return r; } + +static long +ecarchread(Chan*, void *a, long n, vlong off) +{ + int port, v; + uchar *p; + + if(off < 0 || off >= 256) + return 0; + if(off+n > 256) + n = 256 - off; + p = a; + for(port = off; port < off+n; port++){ + if((v = ecread(port)) < 0) + error(Eio); + *p++ = v; + } + return n; +} + +static long +ecarchwrite(Chan*, void *a, long n, vlong off) +{ + int port; + uchar *p; + + if(off < 0 || off+n > 256) + error(Ebadarg); + p = a; + for(port = off; port < off+n; port++) + if(ecwrite(port, *p++) < 0) + error(Eio); + return n; +} + +int +ecinit(int cmdport, int dataport) +{ + print("ec: cmd %X, data %X\n", cmdport, dataport); + + if(ioalloc(cmdport, 1, 0, "ec.sc") < 0){ + print("ec: cant allocate cmd port %X\n", cmdport); + return -1; + } + if(ioalloc(dataport, 1, 0, "ec.data") < 0){ + print("ec: cant allocate data port %X\n", dataport); + iofree(cmdport); + return -1; + } + + lock(&ec); + ec.port[EC_SC] = cmdport; + ec.port[EC_DATA] = dataport; + ec.init = 1; + unlock(&ec); + + addarchfile("ec", 0660, ecarchread, ecarchwrite); + + return 0; +} diff --git a/sys/src/9/pc/pccpuf b/sys/src/9/pc/pccpuf index 4956ac541..8ad34961b 100644 --- a/sys/src/9/pc/pccpuf +++ b/sys/src/9/pc/pccpuf @@ -70,6 +70,7 @@ link etherwavelan wavelan devi82365 cis pci etheriwl pci wifi etherrt2860 pci wifi + ethervirtio pci ethermedium netdevmedium loopbackmedium diff --git a/sys/src/9/pc/pcf b/sys/src/9/pc/pcf index 1c25c894d..2fe6f11b0 100644 --- a/sys/src/9/pc/pcf +++ b/sys/src/9/pc/pcf @@ -85,10 +85,9 @@ link audiohda misc - archacpi mp apic squidboy + archacpi mp apic squidboy ec archmp mp apic squidboy mtrr - ec sdaoe sdide pci sdscsi diff --git a/sys/src/9/pc64/pc64 b/sys/src/9/pc64/pc64 index 049b884a4..538dedec1 100644 --- a/sys/src/9/pc64/pc64 +++ b/sys/src/9/pc64/pc64 @@ -83,10 +83,9 @@ link audiohda misc - archacpi mp apic squidboy + archacpi mp apic squidboy ec archmp mp apic squidboy mtrr - ec # sdaoe sdide pci sdscsi diff --git a/sys/src/9/pc64/pccpu64 b/sys/src/9/pc64/pccpu64 index c2d0536dd..1aed2b8b7 100644 --- a/sys/src/9/pc64/pccpu64 +++ b/sys/src/9/pc64/pccpu64 @@ -69,6 +69,7 @@ link # etherwavelan wavelan devi82365 cis pci etheriwl pci wifi # etherrt2860 pci wifi + ethervirtio pci ethermedium # pcmciamodem netdevmedium @@ -82,7 +83,7 @@ link audiohda misc - archacpi mp apic squidboy + archacpi mp apic squidboy ec archmp mp apic squidboy mtrr @@ -96,7 +97,7 @@ misc # sdmmc pci pmmc # sdloop -# uarti8250 + uarti8250 # uartisa # uartpci pci |