]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/pc/etheryuk.c
[9front] [PATCH] audiohda: add PCI ID for Intel C610/X99
[plan9front.git] / sys / src / 9 / pc / etheryuk.c
index edfbfbd8cc558423ed1d8576d052ca6ed337cb9a..fca2933299e72f8d498a7231196eb5fac16ac441 100644 (file)
@@ -8,6 +8,7 @@
 #include "dat.h"
 #include "fns.h"
 #include "io.h"
+#include "../port/pci.h"
 #include "../port/error.h"
 #include "../port/netif.h"
 #include "../port/etherif.h"
@@ -680,7 +681,7 @@ struct Ctlr {
        uchar   rev;
        uchar   nports;
        uchar   portno;
-       uintptr io;
+       uvlong  io;
        uchar   *reg8;
        ushort  *reg16;
        uint    *reg;
@@ -1430,7 +1431,7 @@ rx(Ether *e, uint l, uint x, uint flag)
        }else{
                b->wp += l;
                b->flag |= flag;
-               etheriq(e, b, 1);
+               etheriq(e, b);
        }
        unstarve(&c->rxmit);
 }
@@ -2129,12 +2130,15 @@ setup(Ctlr *c)
        Pcidev *p;
 
        p = c->p;
+       if(p->mem[0].bar & 1)
+               return -1;
        c->io = p->mem[0].bar&~0xf;
        mem = vmap(c->io, p->mem[0].size);
        if(mem == nil){
-               print("yuk: cant map %#p\n", c->io);
+               print("yuk: cant map %llux\n", c->io);
                return -1;
        }
+       pcienable(p);
        c->p = p;
        c->reg = (uint*)mem;
        c->reg8 = (uchar*)mem;
@@ -2157,15 +2161,15 @@ setup(Ctlr *c)
        c->rx.r = slice(&v, 16*4096, sizeof c->rx.r[0] * c->rx.cnt);
 
        c->nports = 1;                          /* BOTCH */
-       pcisetbme(p);
        if(reset(c)){
                print("yuk: cant reset\n");
-               pciclrbme(p);
                free(c->alloc);
                vunmap(mem, p->mem[0].size);
+               pcidisable(p);
                return -1;
        }
        macinit(c);
+       pcisetbme(p);
        return 0;
 }