]> rtime.felk.cvut.cz Git - jailhouse.git/blobdiff - inmates/demos/x86/e1000-demo.c
Merge remote-tracking branch 'kiszka/master'
[jailhouse.git] / inmates / demos / x86 / e1000-demo.c
index 2f3402bd683fc9a05b72245888ce533200de6c0c..e60152f2b7039f34fddd8b220e791eddceb8a8fd 100644 (file)
@@ -25,7 +25,6 @@
 
 #define E1000_REG_CTRL         0x0000
 # define E1000_CTRL_LRST       (1 << 3)
-# define E1000_CTRL_ASDE       (1 << 5)
 # define E1000_CTRL_SLU                (1 << 6)
 # define E1000_CTRL_FRCSPD     (1 << 11)
 # define E1000_CTRL_RST                (1 << 26)
 #define E1000_REG_RDLEN                0x2808
 #define E1000_REG_RDH          0x2810
 #define E1000_REG_RDT          0x2818
+#define E1000_REG_RXDCTL       0x2828
+# define E1000_RXDCTL_ENABLE   (1 << 25)
 #define E1000_REG_TDBAL                0x3800
 #define E1000_REG_TDBAH                0x3804
 #define E1000_REG_TDLEN                0x3808
 #define E1000_REG_TDH          0x3810
 #define E1000_REG_TDT          0x3818
+#define E1000_REG_TXDCTL       0x3828
+# define E1000_TXDCTL_ENABLE   (1 << 25)
 #define E1000_REG_RAL          0x5400
 #define E1000_REG_RAH          0x5404
 # define E1000_RAH_AV          (1 << 31)
@@ -237,7 +240,7 @@ void inmate_main(void)
 
        val = mmio_read32(mmiobar + E1000_REG_CTRL);
        val &= ~(E1000_CTRL_LRST | E1000_CTRL_FRCSPD);
-       val |= E1000_CTRL_ASDE | E1000_CTRL_SLU;
+       val |= E1000_CTRL_SLU;
        mmio_write32(mmiobar + E1000_REG_CTRL, val);
 
        /* power up again in case the previous user turned it off */
@@ -284,6 +287,8 @@ void inmate_main(void)
        mmio_write32(mmiobar + E1000_REG_RDLEN, sizeof(rx_ring));
        mmio_write32(mmiobar + E1000_REG_RDH, 0);
        mmio_write32(mmiobar + E1000_REG_RDT, 0);
+       mmio_write32(mmiobar + E1000_REG_RXDCTL,
+               mmio_read32(mmiobar + E1000_REG_RXDCTL) | E1000_RXDCTL_ENABLE);
 
        val = mmio_read32(mmiobar + E1000_REG_RCTL);
        val |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_BSIZE_2048 |
@@ -297,6 +302,8 @@ void inmate_main(void)
        mmio_write32(mmiobar + E1000_REG_TDLEN, sizeof(tx_ring));
        mmio_write32(mmiobar + E1000_REG_TDH, 0);
        mmio_write32(mmiobar + E1000_REG_TDT, 0);
+       mmio_write32(mmiobar + E1000_REG_TXDCTL,
+               mmio_read32(mmiobar + E1000_REG_TXDCTL) | E1000_TXDCTL_ENABLE);
 
        val = mmio_read32(mmiobar + E1000_REG_TCTL);
        val |= E1000_TCTL_EN | E1000_TCTL_PSP | E1000_TCTL_CT_DEF |