2009-10-15 02:13:45 +04:00
/*******************************************************************************
Copyright ( C ) 2007 - 2009 STMicroelectronics Ltd
This program is free software ; you can redistribute it and / or modify it
under the terms and conditions of the GNU General Public License ,
version 2 , as published by the Free Software Foundation .
This program is distributed in the hope it will be useful , but WITHOUT
ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
more details .
You should have received a copy of the GNU General Public License along with
this program ; if not , write to the Free Software Foundation , Inc . ,
51 Franklin St - Fifth Floor , Boston , MA 02110 - 1301 USA .
The full GNU General Public License is included in this distribution in
the file called " COPYING " .
Author : Giuseppe Cavallaro < peppe . cavallaro @ st . com >
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2010-04-14 00:21:17 +04:00
# define DRV_MODULE_VERSION "Apr_2010"
2010-01-07 02:07:14 +03:00
# include <linux/stmmac.h>
2009-10-15 02:13:45 +04:00
# include "common.h"
# ifdef CONFIG_STMMAC_TIMER
# include "stmmac_timer.h"
# endif
struct stmmac_priv {
/* Frequently used values are kept adjacent for cache effect */
struct dma_desc * dma_tx ____cacheline_aligned ;
dma_addr_t dma_tx_phy ;
struct sk_buff * * tx_skbuff ;
unsigned int cur_tx ;
unsigned int dirty_tx ;
unsigned int dma_tx_size ;
int tx_coe ;
int tx_coalesce ;
struct dma_desc * dma_rx ;
unsigned int cur_rx ;
unsigned int dirty_rx ;
struct sk_buff * * rx_skbuff ;
dma_addr_t * rx_skbuff_dma ;
struct sk_buff_head rx_recycle ;
struct net_device * dev ;
int is_gmac ;
dma_addr_t dma_rx_phy ;
unsigned int dma_rx_size ;
int rx_csum ;
unsigned int dma_buf_sz ;
struct device * device ;
2010-01-07 02:07:17 +03:00
struct mac_device_info * hw ;
2009-10-15 02:13:45 +04:00
struct stmmac_extra_stats xstats ;
struct napi_struct napi ;
phy_interface_t phy_interface ;
int pbl ;
int bus_id ;
int phy_addr ;
int phy_mask ;
int ( * phy_reset ) ( void * priv ) ;
void ( * fix_mac_speed ) ( void * priv , unsigned int speed ) ;
2010-01-07 02:07:14 +03:00
void ( * bus_setup ) ( unsigned long ioaddr ) ;
2009-10-15 02:13:45 +04:00
void * bsp_priv ;
int phy_irq ;
struct phy_device * phydev ;
int oldlink ;
int speed ;
int oldduplex ;
unsigned int flow_ctrl ;
unsigned int pause ;
struct mii_bus * mii ;
u32 msg_enable ;
spinlock_t lock ;
int wolopts ;
int wolenabled ;
int shutdown ;
# ifdef CONFIG_STMMAC_TIMER
struct stmmac_timer * tm ;
# endif
# ifdef STMMAC_VLAN_TAG_USED
struct vlan_group * vlgrp ;
# endif
2010-04-14 00:21:15 +04:00
int enh_desc ;
2009-10-15 02:13:45 +04:00
} ;
2010-01-07 02:07:14 +03:00
# ifdef CONFIG_STM_DRIVERS
# include <linux/stm/pad.h>
static inline int stmmac_claim_resource ( struct platform_device * pdev )
{
int ret = 0 ;
struct plat_stmmacenet_data * plat_dat = pdev - > dev . platform_data ;
/* Pad routing setup */
if ( IS_ERR ( devm_stm_pad_claim ( & pdev - > dev , plat_dat - > pad_config ,
dev_name ( & pdev - > dev ) ) ) ) {
printk ( KERN_ERR " %s: Failed to request pads! \n " , __func__ ) ;
ret = - ENODEV ;
}
return ret ;
}
# else
static inline int stmmac_claim_resource ( struct platform_device * pdev )
{
return 0 ;
}
# endif
2009-10-15 02:13:45 +04:00
extern int stmmac_mdio_unregister ( struct net_device * ndev ) ;
extern int stmmac_mdio_register ( struct net_device * ndev ) ;
extern void stmmac_set_ethtool_ops ( struct net_device * netdev ) ;
2010-04-14 00:21:12 +04:00
extern struct stmmac_desc_ops enh_desc_ops ;
extern struct stmmac_desc_ops ndesc_ops ;