add support for memory read/write. recognize write to port 80, and call cgapost. Reference: /n/atom/patch/applied2013/acpiomempost Date: Sat Oct 5 17:04:08 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/acpiio.c Sat Oct 5 17:03:30 2013 +++ /sys/src/nix/k10/acpiio.c Sat Oct 5 17:03:31 2013 @@ -12,6 +12,22 @@ extern int pcibusno(void*); static int +readmem(Amlio *io, void *data, int len, int off) +{ + memmove(data, io->va + off, len); +print("aml: readmem: va %#p len %d %llux\n", io->va + off, len, getle(data, len)); + return len; +} + +static int +writemem(Amlio *io, void *data, int len, int off) +{ + memmove(io->va + off, data, len); +print("aml: writemem: va %#p len %d\n", io->va + off, len); + return len; +} + +static int pciaddr(void *dot) { int adr, bno; @@ -103,6 +119,10 @@ return i; } +enum { + Post = 0x80, +}; + static int readioport(Amlio *io, void *data, int len, int port) { @@ -147,6 +167,8 @@ return 2; case 1: outb(port, getle(a, 1)); + if(port == Post) + cgapost(*a); return 1; } } @@ -163,10 +185,12 @@ print("amlmapio: address space %x not implemented\n", io->space); break; case MemSpace: - if((io->va = vmap(io->off, io->len)) == nil){ + if((io->va = vmapoverlap(io->off, io->len)) == nil){ print("amlmapio: vmap failed\n"); break; } + io->read = readmem; + io->write = writemem; return 0; case IoSpace: snprint(buf, sizeof(buf), "%N", io->name); @@ -200,7 +224,7 @@ { switch(io->space){ case MemSpace: - vunmap(io->va, io->len); +// vunmap(io->va, io->len); break; case IoSpace: iofree(io->off);