17ac6653aSJeff Kirsher /******************************************************************************* 27ac6653aSJeff Kirsher Copyright (C) 2007-2009 STMicroelectronics Ltd 37ac6653aSJeff Kirsher 47ac6653aSJeff Kirsher This program is free software; you can redistribute it and/or modify it 57ac6653aSJeff Kirsher under the terms and conditions of the GNU General Public License, 67ac6653aSJeff Kirsher version 2, as published by the Free Software Foundation. 77ac6653aSJeff Kirsher 87ac6653aSJeff Kirsher This program is distributed in the hope it will be useful, but WITHOUT 97ac6653aSJeff Kirsher ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 107ac6653aSJeff Kirsher FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 117ac6653aSJeff Kirsher more details. 127ac6653aSJeff Kirsher 137ac6653aSJeff Kirsher You should have received a copy of the GNU General Public License along with 147ac6653aSJeff Kirsher this program; if not, write to the Free Software Foundation, Inc., 157ac6653aSJeff Kirsher 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 167ac6653aSJeff Kirsher 177ac6653aSJeff Kirsher The full GNU General Public License is included in this distribution in 187ac6653aSJeff Kirsher the file called "COPYING". 197ac6653aSJeff Kirsher 207ac6653aSJeff Kirsher Author: Giuseppe Cavallaro <peppe.cavallaro@st.com> 217ac6653aSJeff Kirsher *******************************************************************************/ 227ac6653aSJeff Kirsher 23*bfab27a1SGiuseppe CAVALLARO #define STMMAC_RESOURCE_NAME "stmmaceth" 24*bfab27a1SGiuseppe CAVALLARO #define DRV_MODULE_VERSION "Dec_2011" 257ac6653aSJeff Kirsher #include <linux/stmmac.h> 26286a8372SGiuseppe CAVALLARO #include <linux/phy.h> 277ac6653aSJeff Kirsher #include "common.h" 287ac6653aSJeff Kirsher #ifdef CONFIG_STMMAC_TIMER 297ac6653aSJeff Kirsher #include "stmmac_timer.h" 307ac6653aSJeff Kirsher #endif 317ac6653aSJeff Kirsher 327ac6653aSJeff Kirsher struct stmmac_priv { 337ac6653aSJeff Kirsher /* Frequently used values are kept adjacent for cache effect */ 347ac6653aSJeff Kirsher struct dma_desc *dma_tx ____cacheline_aligned; 357ac6653aSJeff Kirsher dma_addr_t dma_tx_phy; 367ac6653aSJeff Kirsher struct sk_buff **tx_skbuff; 377ac6653aSJeff Kirsher unsigned int cur_tx; 387ac6653aSJeff Kirsher unsigned int dirty_tx; 397ac6653aSJeff Kirsher unsigned int dma_tx_size; 407ac6653aSJeff Kirsher int tx_coalesce; 417ac6653aSJeff Kirsher 427ac6653aSJeff Kirsher struct dma_desc *dma_rx ; 437ac6653aSJeff Kirsher unsigned int cur_rx; 447ac6653aSJeff Kirsher unsigned int dirty_rx; 457ac6653aSJeff Kirsher struct sk_buff **rx_skbuff; 467ac6653aSJeff Kirsher dma_addr_t *rx_skbuff_dma; 477ac6653aSJeff Kirsher struct sk_buff_head rx_recycle; 487ac6653aSJeff Kirsher 497ac6653aSJeff Kirsher struct net_device *dev; 507ac6653aSJeff Kirsher dma_addr_t dma_rx_phy; 517ac6653aSJeff Kirsher unsigned int dma_rx_size; 527ac6653aSJeff Kirsher unsigned int dma_buf_sz; 537ac6653aSJeff Kirsher struct device *device; 547ac6653aSJeff Kirsher struct mac_device_info *hw; 557ac6653aSJeff Kirsher void __iomem *ioaddr; 567ac6653aSJeff Kirsher 577ac6653aSJeff Kirsher struct stmmac_extra_stats xstats; 587ac6653aSJeff Kirsher struct napi_struct napi; 597ac6653aSJeff Kirsher 607ac6653aSJeff Kirsher int rx_coe; 617ac6653aSJeff Kirsher int no_csum_insertion; 627ac6653aSJeff Kirsher 637ac6653aSJeff Kirsher struct phy_device *phydev; 647ac6653aSJeff Kirsher int oldlink; 657ac6653aSJeff Kirsher int speed; 667ac6653aSJeff Kirsher int oldduplex; 677ac6653aSJeff Kirsher unsigned int flow_ctrl; 687ac6653aSJeff Kirsher unsigned int pause; 697ac6653aSJeff Kirsher struct mii_bus *mii; 707ac6653aSJeff Kirsher int mii_irq[PHY_MAX_ADDR]; 717ac6653aSJeff Kirsher 727ac6653aSJeff Kirsher u32 msg_enable; 737ac6653aSJeff Kirsher spinlock_t lock; 74a9097a96SGiuseppe CAVALLARO spinlock_t tx_lock; 757ac6653aSJeff Kirsher int wolopts; 763172d3afSDeepak Sikri int wol_irq; 777ac6653aSJeff Kirsher #ifdef CONFIG_STMMAC_TIMER 787ac6653aSJeff Kirsher struct stmmac_timer *tm; 797ac6653aSJeff Kirsher #endif 807ac6653aSJeff Kirsher struct plat_stmmacenet_data *plat; 811c901a46SGiuseppe CAVALLARO struct stmmac_counters mmc; 82e7434821SGiuseppe CAVALLARO struct dma_features dma_cap; 8319e30c14SGiuseppe CAVALLARO int hw_cap_support; 847ac6653aSJeff Kirsher }; 857ac6653aSJeff Kirsher 86*bfab27a1SGiuseppe CAVALLARO extern int phyaddr; 87*bfab27a1SGiuseppe CAVALLARO 887ac6653aSJeff Kirsher extern int stmmac_mdio_unregister(struct net_device *ndev); 897ac6653aSJeff Kirsher extern int stmmac_mdio_register(struct net_device *ndev); 907ac6653aSJeff Kirsher extern void stmmac_set_ethtool_ops(struct net_device *netdev); 917ac6653aSJeff Kirsher extern const struct stmmac_desc_ops enh_desc_ops; 927ac6653aSJeff Kirsher extern const struct stmmac_desc_ops ndesc_ops; 93*bfab27a1SGiuseppe CAVALLARO 94*bfab27a1SGiuseppe CAVALLARO int stmmac_freeze(struct net_device *ndev); 95*bfab27a1SGiuseppe CAVALLARO int stmmac_restore(struct net_device *ndev); 96*bfab27a1SGiuseppe CAVALLARO int stmmac_resume(struct net_device *ndev); 97*bfab27a1SGiuseppe CAVALLARO int stmmac_suspend(struct net_device *ndev); 98*bfab27a1SGiuseppe CAVALLARO int stmmac_dvr_remove(struct net_device *ndev); 99*bfab27a1SGiuseppe CAVALLARO struct stmmac_priv *stmmac_dvr_probe(struct device *device, 100*bfab27a1SGiuseppe CAVALLARO struct plat_stmmacenet_data *plat_dat); 101