lm32: Fix minimac driver
authorMichael Walle <michael@walle.cc>
Wed, 12 May 2010 21:21:28 +0000 (23:21 +0200)
committerMichael Walle <michael@walle.cc>
Wed, 12 May 2010 21:21:28 +0000 (23:21 +0200)
Thanks Sebastien for pointing this out.

umon_ports/milkymist/etherdev.c

index 13115e7..45a1a9f 100644 (file)
@@ -24,7 +24,7 @@ static uchar *tx_buf;
 static uchar *rx_buf;
 static uchar *rx_buf_back;
 
-static uchar _buffers[3*PKT_BUF_LEN];
+static uchar _buffers[3*PKT_BUF_LEN] __attribute__((aligned(4)));
 
 static struct {
        ulong tx_pkt;
@@ -75,7 +75,7 @@ eninit(void)
        rx_buf_back = _buffers + 2*PKT_BUF_LEN;
 
        /* Set preamble and SFD for the TX buffer */
-       memset(tx_buf, preamble_sfd, sizeof(preamble_sfd));
+       memcpy(tx_buf, preamble_sfd, sizeof(preamble_sfd));
 
        /* Initialize the MAC */
        MINIMAC_ADDR0 = (unsigned int)rx_buf_back;
@@ -181,15 +181,10 @@ sendBuffer(int length)
 
        uchar *tx_pkt = tx_buf + sizeof(preamble_sfd);
 
-#if INCLUDE_ETHERVERBOSE
-       if (EtherVerbose & SHOW_OUTGOING)
-               printPkt((struct ether_header *)tx_pkt, length, ETHER_OUTGOING);
-#endif
-
-       /* Bump up the packet length to a minimum of 64 bytes.
+       /* Bump up the packet length to a minimum of 60 bytes.
         */
-       if (length < 64)
-               length = 64;
+       if (length < 60)
+               length = 60;
 
        /* Add the code that will tickle the device into sending out the
         * buffer that was previously returned by getXmitBuffer() above...
@@ -200,10 +195,15 @@ sendBuffer(int length)
        tx_pkt[length + 2] = (crc & 0xff0000) >> 16;
        tx_pkt[length + 3] = (crc & 0xff000000) >> 24;
 
-       length += 12;
+       length += 4;
+
+#if INCLUDE_ETHERVERBOSE
+       if (EtherVerbose & SHOW_OUTGOING)
+               printPkt((struct ether_header *)tx_pkt, length, ETHER_OUTGOING);
+#endif
 
        MINIMAC_TXADDR = (unsigned int) tx_buf;
-       MINIMAC_TXREMAINING = length;
+       MINIMAC_TXREMAINING = length + 8; /* including preamble */
 
        EtherXFRAMECnt++;
        return(0);