Added another version for the txdctl register for the 82575 cards.
authorGerd Zellweger <mail@gerdzellweger.com>
Thu, 23 May 2013 16:09:45 +0000 (18:09 +0200)
committerGerd Zellweger <mail@gerdzellweger.com>
Fri, 24 May 2013 09:12:36 +0000 (11:12 +0200)
This is especially important because the new cards have the enable bit inside this register to enable/disable queues.
The code for the older cards set this bit to 0, therefore disabling the transmit queue.

devices/e1000.dev
usr/drivers/e1000/e1000n_hwinit.c

index 7ce6286..0aa6168 100644 (file)
@@ -750,6 +750,19 @@ device e1000 lsbfirst ( addr base ) "Intel e1000 Gigabit Ethernet" {
     lwthresh   7 "Transmit descriptor low threshold";
   };
 
+  regarray txdctl_82575 rw also addr(base, 0x3828)[4;0x100] "Transmit descr. control queue for 82575 cards"  {
+    pthresh  6 "Prefetch threshold";
+    _        2 mbz;
+    hthresh  6 "Host threshold";
+    _        2;
+    wthresh  6 "Write back threshold";
+    _        3 mb1;
+    enable   1 "Enable the queue";
+    swflsh   1 "Transmit Software Flush";
+    priority 1 "Priority";
+    _        4;
+  };
+
   // 13.3.67
   register tadv rw addr(base, 0x382c) "Tx absolute intr. delay" {
     idv                16 "Interrupt delay value";
index 085cee1..0d9c2f4 100644 (file)
@@ -755,7 +755,13 @@ void e1000_hwinit(e1000_device_t *dev, struct device_mem *bar_info,
     e1000_configure_rx(dev);
 
     /* --------------------- transmit setup --------------------- */
-    {
+    if (dev->mac_type == e1000_82575 || dev->mac_type == e1000_82576) {
+        e1000_txdctl_82575_t txdctl = 0;
+        txdctl = e1000_txdctl_82575_enable_insert(txdctl, 1);
+        txdctl = e1000_txdctl_82575_priority_insert(txdctl, 1);
+        e1000_txdctl_82575_wr(dev->device, 0, txdctl);
+    }
+    else {
         e1000_txdctl_t txdctl = 0;
         txdctl = e1000_txdctl_gran_insert(txdctl, 1);
         e1000_txdctl_wr(dev->device, 0, txdctl);