]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/pc/ether82563.c
ether82563: add 0x15bd i219-lm variant (thanks crab1)
[plan9front.git] / sys / src / 9 / pc / ether82563.c
index 62d2217366daeeaf499473933e94d51e3ca27d71..2322e40265a195a5c1d3605e831a1efebeb7eb6c 100644 (file)
@@ -9,6 +9,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"
@@ -502,7 +503,7 @@ typedef void (*Freefn)(Block*);
 
 typedef struct Ctlr Ctlr;
 struct Ctlr {
-       ulong   port;
+       uvlong  port;
        Pcidev  *pcidev;
        Ctlr    *next;
        int     active;
@@ -766,7 +767,6 @@ i82563multicast(void *arg, uchar *addr, int on)
        case i82577:
        case i82577m:
        case i82579:
-       case i210:
        case i217:
        case i218:
        case i219:
@@ -1668,7 +1668,10 @@ fload(Ctlr *c)
        if(c->pcidev->mem[1].bar == 0)
                return fload32(c);      /* i219 */
 
-       va = vmap(c->pcidev->mem[1].bar & ~0x0f, c->pcidev->mem[1].size);
+       if(c->pcidev->mem[1].bar & 1)
+               return -1;
+
+       va = vmap(c->pcidev->mem[1].bar & ~0xF, c->pcidev->mem[1].size);
        if(va == nil)
                return -1;
        f.reg = va;
@@ -1987,10 +1990,13 @@ didtype(int d)
        case 0x1570:            /* i219-v */
        case 0x15b8:            /* i219-v */
        case 0x15b9:            /* i219-lm */
+       case 0x15bb:            /* i219-lm */
+       case 0x15bd:            /* i219-lm */
        case 0x15d6:            /* i219-v */
        case 0x15d7:            /* i219-lm */
        case 0x15d8:            /* i219-v */
        case 0x15e3:            /* i219-lm */
+       case 0x0d4c:            /* i219-lm */
                return i219;
        case 0x151f:            /* i350 “powerville” eeprom-less */
        case 0x1521:            /* i350 copper */
@@ -2026,6 +2032,8 @@ i82563pci(void)
 
        for(p = nil; p = pcimatch(p, 0x8086, 0);){
                hbafixup(p);
+               if(p->mem[0].bar & 1)
+                       continue;
                if((type = didtype(p->did)) == -1)
                        continue;
                ctlr = malloc(sizeof(Ctlr));
@@ -2036,7 +2044,7 @@ i82563pci(void)
                ctlr->type = type;
                ctlr->pcidev = p;
                ctlr->rbsz = ROUND(cttab[type].mtu, 1024);
-               ctlr->port = p->mem[0].bar & ~0x0F;
+               ctlr->port = p->mem[0].bar & ~0xF;
                if(i82563ctlrhead != nil)
                        i82563ctlrtail->next = ctlr;
                else
@@ -2053,7 +2061,7 @@ setup(Ctlr *ctlr)
        p = ctlr->pcidev;
        ctlr->nic = vmap(ctlr->port, p->mem[0].size);
        if(ctlr->nic == nil){
-               print("%s: can't map 0x%lux\n", cname(ctlr), ctlr->port);
+               print("%s: can't map %llux\n", cname(ctlr), ctlr->port);
                return -1;
        }
        pcienable(p);