Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=69c29d89185dc1de7224f5f98588ddc061f1fad2
Commit:     69c29d89185dc1de7224f5f98588ddc061f1fad2
Parent:     5ecc2a5d3e3c39535d2cc10dad15853e9e9b072d
Author:     Olof Johansson <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 2 16:24:51 2007 -0500
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:54:22 2007 -0700

    pasemi_mac: basic error checking
    
    pasemi_mac: basic error checking
    
    Add some rudimentary error checking to pasemi_mac.
    
    Signed-off-by: Olof Johansson <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/pasemi_mac.c |   46 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c
index c2d34a8..b297a67 100644
--- a/drivers/net/pasemi_mac.c
+++ b/drivers/net/pasemi_mac.c
@@ -445,6 +445,38 @@ static void pasemi_mac_restart_tx_intr(struct pasemi_mac 
*mac)
 }
 
 
+static inline void pasemi_mac_rx_error(struct pasemi_mac *mac, u64 macrx)
+{
+       unsigned int rcmdsta, ccmdsta;
+
+       if (!netif_msg_rx_err(mac))
+               return;
+
+       rcmdsta = read_dma_reg(mac, PAS_DMA_RXINT_RCMDSTA(mac->dma_if));
+       ccmdsta = read_dma_reg(mac, PAS_DMA_RXCHAN_CCMDSTA(mac->dma_rxch));
+
+       printk(KERN_ERR "pasemi_mac: rx error. macrx %016lx, rx status %lx\n",
+               macrx, *mac->rx_status);
+
+       printk(KERN_ERR "pasemi_mac: rcmdsta %08x ccmdsta %08x\n",
+               rcmdsta, ccmdsta);
+}
+
+static inline void pasemi_mac_tx_error(struct pasemi_mac *mac, u64 mactx)
+{
+       unsigned int cmdsta;
+
+       if (!netif_msg_tx_err(mac))
+               return;
+
+       cmdsta = read_dma_reg(mac, PAS_DMA_TXCHAN_TCMDSTA(mac->dma_txch));
+
+       printk(KERN_ERR "pasemi_mac: tx error. mactx 0x%016lx, "\
+               "tx status 0x%016lx\n", mactx, *mac->tx_status);
+
+       printk(KERN_ERR "pasemi_mac: tcmdsta 0x%08x\n", cmdsta);
+}
+
 static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
 {
        unsigned int n;
@@ -468,10 +500,13 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, 
int limit)
                prefetchw(dp);
                macrx = dp->macrx;
 
+               if ((macrx & XCT_MACRX_E) ||
+                   (*mac->rx_status & PAS_STATUS_ERROR))
+                       pasemi_mac_rx_error(mac, macrx);
+
                if (!(macrx & XCT_MACRX_O))
                        break;
 
-
                info = NULL;
 
                /* We have to scan for our skb since there's no way
@@ -563,6 +598,10 @@ restart:
        for (i = start; i < limit; i++) {
                dp = &TX_DESC(mac, i);
 
+               if ((dp->mactx & XCT_MACTX_E) ||
+                   (*mac->tx_status & PAS_STATUS_ERROR))
+                       pasemi_mac_tx_error(mac, dp->mactx);
+
                if (unlikely(dp->mactx & XCT_MACTX_O))
                        /* Not yet transmitted */
                        break;
@@ -607,9 +646,6 @@ static irqreturn_t pasemi_mac_rx_intr(int irq, void *data)
        if (!(*mac->rx_status & PAS_STATUS_CAUSE_M))
                return IRQ_NONE;
 
-       if (*mac->rx_status & PAS_STATUS_ERROR)
-               printk("rx_status reported error\n");
-
        /* Don't reset packet count so it won't fire again but clear
         * all others.
         */
@@ -1230,7 +1266,7 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
                dev_err(&mac->pdev->dev, "register_netdev failed with error 
%d\n",
                        err);
                goto out;
-       } else
+       } else if netif_msg_probe(mac)
                printk(KERN_INFO "%s: PA Semi %s: intf %d, txch %d, rxch %d, "
                       "hw addr %s\n",
                       dev->name, mac->type == MAC_TYPE_GMAC ? "GMAC" : "XAUI",
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to