#include "dat.h"
#include "fns.h"
#include "io.h"
+#include "../port/pci.h"
#include "../port/error.h"
#include "../port/netif.h"
-
-#include "etherif.h"
-#include "ethermii.h"
+#include "../port/etherif.h"
+#include "../port/ethermii.h"
enum {
Par0 = 0x00, /* Ethernet Address */
else if(bp = iallocb(Rdbsz+3)){
len = ((ds->status & LengthMASK)>>LengthSHIFT)-4;
ds->bp->wp = ds->bp->rp+len;
- etheriq(edev, ds->bp, 1);
+ etheriq(edev, ds->bp);
bp->rp = (uchar*)ROUNDUP((ulong)bp->rp, 4);
ds->addr = PCIWADDR(bp->rp);
ds->bp = bp;
{
Pcidev *p;
Ctlr *ctlr;
- int cls, port;
+ int port;
p = nil;
while(p = pcimatch(p, 0, 0)){
break;
}
- port = p->mem[0].bar & ~0x01;
+ port = p->mem[0].bar & ~3;
if(ioalloc(port, p->mem[0].size, 0, "vt6102") < 0){
print("vt6102: port 0x%uX in use\n", port);
continue;
}
ctlr->port = port;
ctlr->pcidev = p;
+ pcienable(p);
ctlr->id = (p->did<<16)|p->vid;
- if((cls = pcicfgr8(p, PciCLS)) == 0 || cls == 0xFF)
- cls = 0x10;
- ctlr->cls = cls*4;
+ ctlr->cls = p->cls*4;
ctlr->tft = Ctft64;
if(vt6102reset(ctlr)){
*/
edev->attach = vt6102attach;
edev->transmit = vt6102transmit;
- edev->interrupt = vt6102interrupt;
edev->ifstat = vt6102ifstat;
edev->ctl = nil;
edev->promiscuous = vt6102promiscuous;
edev->multicast = vt6102multicast;
+ intrenable(edev->irq, vt6102interrupt, edev, edev->tbdf, edev->name);
+
return 0;
}