linux/drivers/net/ethernet/stmicro/stmmac/stmmac.h
<<
>>
Prefs
   1/*******************************************************************************
   2  Copyright (C) 2007-2009  STMicroelectronics Ltd
   3
   4  This program is free software; you can redistribute it and/or modify it
   5  under the terms and conditions of the GNU General Public License,
   6  version 2, as published by the Free Software Foundation.
   7
   8  This program is distributed in the hope it will be useful, but WITHOUT
   9  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  11  more details.
  12
  13  You should have received a copy of the GNU General Public License along with
  14  this program; if not, write to the Free Software Foundation, Inc.,
  15  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  16
  17  The full GNU General Public License is included in this distribution in
  18  the file called "COPYING".
  19
  20  Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
  21*******************************************************************************/
  22
  23#ifndef __STMMAC_H__
  24#define __STMMAC_H__
  25
  26#define STMMAC_RESOURCE_NAME   "stmmaceth"
  27#define DRV_MODULE_VERSION      "March_2013"
  28
  29#include <linux/clk.h>
  30#include <linux/stmmac.h>
  31#include <linux/phy.h>
  32#include <linux/pci.h>
  33#include "common.h"
  34#include <linux/ptp_clock_kernel.h>
  35#include <linux/reset.h>
  36
  37struct stmmac_resources {
  38        void __iomem *addr;
  39        const char *mac;
  40        int wol_irq;
  41        int lpi_irq;
  42        int irq;
  43};
  44
  45struct stmmac_tx_info {
  46        dma_addr_t buf;
  47        bool map_as_page;
  48};
  49
  50struct stmmac_priv {
  51        /* Frequently used values are kept adjacent for cache effect */
  52        struct dma_extended_desc *dma_etx ____cacheline_aligned_in_smp;
  53        struct dma_desc *dma_tx;
  54        struct sk_buff **tx_skbuff;
  55        unsigned int cur_tx;
  56        unsigned int dirty_tx;
  57        unsigned int dma_tx_size;
  58        u32 tx_count_frames;
  59        u32 tx_coal_frames;
  60        u32 tx_coal_timer;
  61        struct stmmac_tx_info *tx_skbuff_dma;
  62        dma_addr_t dma_tx_phy;
  63        int tx_coalesce;
  64        int hwts_tx_en;
  65        spinlock_t tx_lock;
  66        bool tx_path_in_lpi_mode;
  67        struct timer_list txtimer;
  68
  69        struct dma_desc *dma_rx ____cacheline_aligned_in_smp;
  70        struct dma_extended_desc *dma_erx;
  71        struct sk_buff **rx_skbuff;
  72        unsigned int cur_rx;
  73        unsigned int dirty_rx;
  74        unsigned int dma_rx_size;
  75        unsigned int dma_buf_sz;
  76        u32 rx_riwt;
  77        int hwts_rx_en;
  78        dma_addr_t *rx_skbuff_dma;
  79        dma_addr_t dma_rx_phy;
  80
  81        struct napi_struct napi ____cacheline_aligned_in_smp;
  82
  83        void __iomem *ioaddr;
  84        struct net_device *dev;
  85        struct device *device;
  86        struct mac_device_info *hw;
  87        spinlock_t lock;
  88
  89        struct phy_device *phydev ____cacheline_aligned_in_smp;
  90        int oldlink;
  91        int speed;
  92        int oldduplex;
  93        unsigned int flow_ctrl;
  94        unsigned int pause;
  95        struct mii_bus *mii;
  96        int mii_irq[PHY_MAX_ADDR];
  97
  98        struct stmmac_extra_stats xstats ____cacheline_aligned_in_smp;
  99        struct plat_stmmacenet_data *plat;
 100        struct dma_features dma_cap;
 101        struct stmmac_counters mmc;
 102        int hw_cap_support;
 103        int synopsys_id;
 104        u32 msg_enable;
 105        int wolopts;
 106        int wol_irq;
 107        struct clk *stmmac_clk;
 108        struct clk *pclk;
 109        struct reset_control *stmmac_rst;
 110        int clk_csr;
 111        struct timer_list eee_ctrl_timer;
 112        int lpi_irq;
 113        int eee_enabled;
 114        int eee_active;
 115        int tx_lpi_timer;
 116        int pcs;
 117        unsigned int mode;
 118        int extend_desc;
 119        struct ptp_clock *ptp_clock;
 120        struct ptp_clock_info ptp_clock_ops;
 121        unsigned int default_addend;
 122        struct clk *clk_ptp_ref;
 123        unsigned int clk_ptp_rate;
 124        u32 adv_ts;
 125        int use_riwt;
 126        int irq_wake;
 127        spinlock_t ptp_lock;
 128
 129#ifdef CONFIG_DEBUG_FS
 130        struct dentry *dbgfs_dir;
 131        struct dentry *dbgfs_rings_status;
 132        struct dentry *dbgfs_dma_cap;
 133#endif
 134};
 135
 136int stmmac_mdio_unregister(struct net_device *ndev);
 137int stmmac_mdio_register(struct net_device *ndev);
 138int stmmac_mdio_reset(struct mii_bus *mii);
 139void stmmac_set_ethtool_ops(struct net_device *netdev);
 140
 141int stmmac_ptp_register(struct stmmac_priv *priv);
 142void stmmac_ptp_unregister(struct stmmac_priv *priv);
 143int stmmac_resume(struct net_device *ndev);
 144int stmmac_suspend(struct net_device *ndev);
 145int stmmac_dvr_remove(struct net_device *ndev);
 146int stmmac_dvr_probe(struct device *device,
 147                     struct plat_stmmacenet_data *plat_dat,
 148                     struct stmmac_resources *res);
 149void stmmac_disable_eee_mode(struct stmmac_priv *priv);
 150bool stmmac_eee_init(struct stmmac_priv *priv);
 151
 152#endif /* __STMMAC_H__ */
 153