ar71xx: fix register range check for DMA stuck checks (thx, Frédéric Moulins), backpo...
[openwrt-10.03/.git] / target / linux / ar71xx / files / drivers / net / ag71xx / ag71xx.h
index bb4cb5ba9ff96b3db1e7c6f5149bef2b207ce6c1..8ca5c8983f072d4601c8d9e63151eb38c5e690db 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/platform_device.h>
 #include <linux/ethtool.h>
 #include <linux/etherdevice.h>
+#include <linux/if_vlan.h>
 #include <linux/phy.h>
 #include <linux/skbuff.h>
 #include <linux/dma-mapping.h>
@@ -35,8 +36,6 @@
 #include <asm/mach-ar71xx/ar71xx.h>
 #include <asm/mach-ar71xx/platform.h>
 
-#define ETH_FCS_LEN    4
-
 #define AG71XX_DRV_NAME                "ag71xx"
 #define AG71XX_DRV_VERSION     "0.5.35"
 
@@ -54,7 +53,7 @@
 #define AG71XX_TX_MTU_LEN      1540
 #define AG71XX_RX_PKT_RESERVE  64
 #define AG71XX_RX_PKT_SIZE     \
-       (AG71XX_RX_PKT_RESERVE + ETH_HLEN + ETH_FRAME_LEN + ETH_FCS_LEN)
+       (AG71XX_RX_PKT_RESERVE + ETH_FRAME_LEN + ETH_FCS_LEN + VLAN_HLEN)
 
 #define AG71XX_TX_RING_SIZE    64
 #define AG71XX_TX_THRES_STOP   (AG71XX_TX_RING_SIZE - 4)
@@ -91,7 +90,7 @@ struct ag71xx_buf {
        struct sk_buff          *skb;
        struct ag71xx_desc      *desc;
        dma_addr_t              dma_addr;
-       u32                     pad;
+       unsigned long           timestamp;
 };
 
 struct ag71xx_ring {
@@ -136,8 +135,6 @@ struct ag71xx_napi_stats {
 
 struct ag71xx_debug {
        struct dentry           *debugfs_dir;
-       struct dentry           *debugfs_int_stats;
-       struct dentry           *debugfs_napi_stats;
 
        struct ag71xx_int_stats int_stats;
        struct ag71xx_napi_stats napi_stats;
@@ -153,6 +150,9 @@ struct ag71xx {
        struct napi_struct      napi;
        u32                     msg_enable;
 
+       struct ag71xx_desc      *stop_desc;
+       dma_addr_t              stop_desc_dma;
+
        struct ag71xx_ring      rx_ring;
        struct ag71xx_ring      tx_ring;
 
@@ -165,6 +165,7 @@ struct ag71xx {
        int                     duplex;
 
        struct work_struct      restart_work;
+       struct delayed_work     link_work;
        struct timer_list       oom_timer;
 
 #ifdef CONFIG_AG71XX_DEBUG_FS
@@ -351,7 +352,8 @@ static inline void ag71xx_check_reg_offset(struct ag71xx *ag, unsigned reg)
 {
        switch (reg) {
        case AG71XX_REG_MAC_CFG1 ... AG71XX_REG_MAC_MFL:
-       case AG71XX_REG_MAC_IFCTL ... AG71XX_REG_INT_STATUS:
+       case AG71XX_REG_MAC_IFCTL ... AG71XX_REG_TX_SM:
+       case AG71XX_REG_MII_CFG:
                break;
 
        default: