]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/net/ethernet/stmicro/stmmac/common.h
stmmac: add the Energy Efficient Ethernet support
[mirror_ubuntu-zesty-kernel.git] / drivers / net / ethernet / stmicro / stmmac / common.h
index bcd54d6e94fda40e57526c96e2bb52eba63328a5..e2d083228f3a6b6b6039ab3276182d3adbc72869 100644 (file)
@@ -95,6 +95,16 @@ struct stmmac_extra_stats {
        unsigned long poll_n;
        unsigned long sched_timer_n;
        unsigned long normal_irq_n;
+       unsigned long mmc_tx_irq_n;
+       unsigned long mmc_rx_irq_n;
+       unsigned long mmc_rx_csum_offload_irq_n;
+       /* EEE */
+       unsigned long irq_receive_pmt_irq_n;
+       unsigned long irq_tx_path_in_lpi_mode_n;
+       unsigned long irq_tx_path_exit_lpi_mode_n;
+       unsigned long irq_rx_path_in_lpi_mode_n;
+       unsigned long irq_rx_path_exit_lpi_mode_n;
+       unsigned long phy_eee_wakeup_error_n;
 };
 
 /* CSR Frequency Access Defines*/
@@ -162,6 +172,17 @@ enum tx_dma_irq_status {
        handle_tx_rx = 3,
 };
 
+enum core_specific_irq_mask {
+       core_mmc_tx_irq = 1,
+       core_mmc_rx_irq = 2,
+       core_mmc_rx_csum_offload_irq = 4,
+       core_irq_receive_pmt_irq = 8,
+       core_irq_tx_path_in_lpi_mode = 16,
+       core_irq_tx_path_exit_lpi_mode = 32,
+       core_irq_rx_path_in_lpi_mode = 64,
+       core_irq_rx_path_exit_lpi_mode = 128,
+};
+
 /* DMA HW capabilities */
 struct dma_features {
        unsigned int mbps_10_100;
@@ -208,6 +229,10 @@ struct dma_features {
 #define MAC_ENABLE_TX          0x00000008      /* Transmitter Enable */
 #define MAC_RNABLE_RX          0x00000004      /* Receiver Enable */
 
+/* Default LPI timers */
+#define STMMAC_DEFAULT_LIT_LS_TIMER    0x3E8
+#define STMMAC_DEFAULT_TWT_LS_TIMER    0x0
+
 struct stmmac_desc_ops {
        /* DMA RX descriptor ring initialization */
        void (*init_rx_desc) (struct dma_desc *p, unsigned int ring_size,
@@ -278,7 +303,7 @@ struct stmmac_ops {
        /* Dump MAC registers */
        void (*dump_regs) (void __iomem *ioaddr);
        /* Handle extra events on specific interrupts hw dependent */
-       void (*host_irq_status) (void __iomem *ioaddr);
+       int (*host_irq_status) (void __iomem *ioaddr);
        /* Multicast filter setting */
        void (*set_filter) (struct net_device *dev, int id);
        /* Flow control setting */
@@ -291,6 +316,10 @@ struct stmmac_ops {
                               unsigned int reg_n);
        void (*get_umac_addr) (void __iomem *ioaddr, unsigned char *addr,
                               unsigned int reg_n);
+       void (*set_eee_mode) (void __iomem *ioaddr);
+       void (*reset_eee_mode) (void __iomem *ioaddr);
+       void (*set_eee_timer) (void __iomem *ioaddr, int ls, int tw);
+       void (*set_eee_pls) (void __iomem *ioaddr, int link);
 };
 
 struct mac_link {