diff --git a/drivers/net/wan/hd6457x.c b/drivers/net/wan/hd6457x.c index b25b4a2..0315623 100644 --- a/drivers/net/wan/hd6457x.c +++ b/drivers/net/wan/hd6457x.c @@ -67,11 +67,13 @@ #define sca_outa(value, reg, card) sca_outw(value, reg, card) #define sca_ina(reg, card) sca_inw(reg, card) #define writea(value, ptr) writew(value, ptr) +#define reada(ptr) readw(ptr) #else /* HD64572 */ #define sca_outa(value, reg, card) sca_outl(value, reg, card) #define sca_ina(reg, card) sca_inl(reg, card) #define writea(value, ptr) writel(value, ptr) +#define reada(ptr) readl(ptr) #endif static inline struct net_device *port_to_dev(port_t *port) @@ -674,7 +676,7 @@ static void sca_dump_rings(struct net_de { port_t *port = dev_to_port(dev); card_t *card = port_to_card(port); - u16 cnt; + u16 cnt, transmit; #if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED) u8 page; #endif @@ -698,11 +700,28 @@ static void sca_dump_rings(struct net_de sca_ina(get_dmac_tx(port) + EDAL, card), sca_in(DSR_TX(phy_node(port)), card), port->txin, port->txlast, sca_in(DSR_TX(phy_node(port)), card) & DSR_DE ? "" : "in"); - for (cnt = 0; cnt < port_to_card(port)->tx_ring_buffers; cnt++) printk(" %02X", readb(&(desc_address(port, cnt, 1)->stat))); printk("\n"); + for (transmit = 0; transmit < 2; transmit++) { + u16 buffs = transmit ? card->tx_ring_buffers + : card->rx_ring_buffers; + for (cnt = 0; cnt < buffs; cnt++) { + pkt_desc __iomem *desc = desc_address(port, cnt, + transmit); + u32 chain_off = reada(&desc->cp); + u32 buff_off = readl(&desc->bp); + if (chain_off != desc_offset(port, cnt +1, transmit) || + buff_off != buffer_offset(port, cnt, transmit)) + printk("Invalid %s desc #%u: %u %u %u 0x%X " + "0x%X\n", transmit ? "TX" : "RX", cnt, + chain_off, buff_off, readw(&desc->len), + readb(&desc->stat), + readb(&desc->unused)); + } + } + printk(KERN_DEBUG "MSCI: MD: %02x %02x %02x, " "ST: %02x %02x %02x %02x" #ifdef __HD64572_H