| 
									
										
										
										
											2009-10-14 15:13:45 -07: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> | 
					
						
							|  |  |  | *******************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-22 21:28:18 +00:00
										 |  |  | #ifndef __STMMAC_H__
 | 
					
						
							|  |  |  | #define __STMMAC_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 03:58:19 +00:00
										 |  |  | #define STMMAC_RESOURCE_NAME   "stmmaceth"
 | 
					
						
							| 
									
										
										
										
											2012-11-25 23:10:46 +00:00
										 |  |  | #define DRV_MODULE_VERSION	"Nov_2012"
 | 
					
						
							| 
									
										
										
										
											2012-04-04 04:33:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <linux/clk.h>
 | 
					
						
							| 
									
										
										
										
											2010-01-06 23:07:14 +00:00
										 |  |  | #include <linux/stmmac.h>
 | 
					
						
							| 
									
										
										
										
											2011-10-18 00:01:24 +00:00
										 |  |  | #include <linux/phy.h>
 | 
					
						
							| 
									
										
										
										
											2012-06-07 19:25:07 +00:00
										 |  |  | #include <linux/pci.h>
 | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | #include "common.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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_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 net_device *dev; | 
					
						
							|  |  |  | 	dma_addr_t dma_rx_phy; | 
					
						
							|  |  |  | 	unsigned int dma_rx_size; | 
					
						
							|  |  |  | 	unsigned int dma_buf_sz; | 
					
						
							|  |  |  | 	struct device *device; | 
					
						
							| 
									
										
										
										
											2010-01-06 23:07:17 +00:00
										 |  |  | 	struct mac_device_info *hw; | 
					
						
							| 
									
										
										
										
											2010-08-23 20:40:42 +00:00
										 |  |  | 	void __iomem *ioaddr; | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct stmmac_extra_stats xstats; | 
					
						
							|  |  |  | 	struct napi_struct napi; | 
					
						
							| 
									
										
										
										
											2010-11-24 02:37:58 +00:00
										 |  |  | 	int no_csum_insertion; | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct phy_device *phydev; | 
					
						
							|  |  |  | 	int oldlink; | 
					
						
							|  |  |  | 	int speed; | 
					
						
							|  |  |  | 	int oldduplex; | 
					
						
							|  |  |  | 	unsigned int flow_ctrl; | 
					
						
							|  |  |  | 	unsigned int pause; | 
					
						
							|  |  |  | 	struct mii_bus *mii; | 
					
						
							| 
									
										
										
										
											2011-07-20 00:05:23 +00:00
										 |  |  | 	int mii_irq[PHY_MAX_ADDR]; | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	u32 msg_enable; | 
					
						
							|  |  |  | 	spinlock_t lock; | 
					
						
							| 
									
										
										
										
											2011-10-18 00:01:19 +00:00
										 |  |  | 	spinlock_t tx_lock; | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | 	int wolopts; | 
					
						
							| 
									
										
										
										
											2011-09-01 21:51:37 +00:00
										 |  |  | 	int wol_irq; | 
					
						
							| 
									
										
										
										
											2010-11-24 02:37:58 +00:00
										 |  |  | 	struct plat_stmmacenet_data *plat; | 
					
						
							| 
									
										
										
										
											2011-09-01 21:51:38 +00:00
										 |  |  | 	struct stmmac_counters mmc; | 
					
						
							| 
									
										
										
										
											2011-09-01 21:51:41 +00:00
										 |  |  | 	struct dma_features dma_cap; | 
					
						
							| 
									
										
										
										
											2011-11-16 21:58:00 +00:00
										 |  |  | 	int hw_cap_support; | 
					
						
							| 
									
										
										
										
											2012-04-04 04:33:25 +00:00
										 |  |  | 	struct clk *stmmac_clk; | 
					
						
							| 
									
										
										
										
											2012-04-04 04:33:27 +00:00
										 |  |  | 	int clk_csr; | 
					
						
							| 
									
										
										
										
											2012-05-13 22:18:41 +00:00
										 |  |  | 	int synopsys_id; | 
					
						
							| 
									
										
										
										
											2012-06-27 21:14:37 +00:00
										 |  |  | 	struct timer_list eee_ctrl_timer; | 
					
						
							|  |  |  | 	bool tx_path_in_lpi_mode; | 
					
						
							|  |  |  | 	int lpi_irq; | 
					
						
							|  |  |  | 	int eee_enabled; | 
					
						
							|  |  |  | 	int eee_active; | 
					
						
							|  |  |  | 	int tx_lpi_timer; | 
					
						
							| 
									
										
										
										
											2012-11-25 23:10:42 +00:00
										 |  |  | 	struct timer_list txtimer; | 
					
						
							|  |  |  | 	u32 tx_count_frames; | 
					
						
							|  |  |  | 	u32 tx_coal_frames; | 
					
						
							|  |  |  | 	u32 tx_coal_timer; | 
					
						
							| 
									
										
										
										
											2012-11-25 23:10:43 +00:00
										 |  |  | 	int use_riwt; | 
					
						
							|  |  |  | 	u32 rx_riwt; | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 03:58:19 +00:00
										 |  |  | extern int phyaddr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-14 15:13:45 -07: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-10-13 14:51:25 +00:00
										 |  |  | extern const struct stmmac_desc_ops enh_desc_ops; | 
					
						
							|  |  |  | extern const struct stmmac_desc_ops ndesc_ops; | 
					
						
							| 
									
										
										
										
											2011-12-21 03:58:19 +00:00
										 |  |  | int stmmac_freeze(struct net_device *ndev); | 
					
						
							|  |  |  | int stmmac_restore(struct net_device *ndev); | 
					
						
							|  |  |  | int stmmac_resume(struct net_device *ndev); | 
					
						
							|  |  |  | int stmmac_suspend(struct net_device *ndev); | 
					
						
							|  |  |  | int stmmac_dvr_remove(struct net_device *ndev); | 
					
						
							|  |  |  | struct stmmac_priv *stmmac_dvr_probe(struct device *device, | 
					
						
							| 
									
										
										
										
											2012-02-15 00:10:39 +00:00
										 |  |  | 				     struct plat_stmmacenet_data *plat_dat, | 
					
						
							|  |  |  | 				     void __iomem *addr); | 
					
						
							| 
									
										
										
										
											2012-06-27 21:14:37 +00:00
										 |  |  | void stmmac_disable_eee_mode(struct stmmac_priv *priv); | 
					
						
							|  |  |  | bool stmmac_eee_init(struct stmmac_priv *priv); | 
					
						
							| 
									
										
										
										
											2012-04-04 04:33:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-07 19:25:07 +00:00
										 |  |  | #ifdef CONFIG_STMMAC_PLATFORM
 | 
					
						
							|  |  |  | extern struct platform_driver stmmac_pltfr_driver; | 
					
						
							|  |  |  | static inline int stmmac_register_platform(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int err; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err = platform_driver_register(&stmmac_pltfr_driver); | 
					
						
							|  |  |  | 	if (err) | 
					
						
							|  |  |  | 		pr_err("stmmac: failed to register the platform driver\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return err; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static inline void stmmac_unregister_platform(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-12-14 01:02:51 +00:00
										 |  |  | 	platform_driver_unregister(&stmmac_pltfr_driver); | 
					
						
							| 
									
										
										
										
											2012-06-07 19:25:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | static inline int stmmac_register_platform(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	pr_debug("stmmac: do not register the platf driver\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-14 01:02:51 +00:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2012-06-07 19:25:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | static inline void stmmac_unregister_platform(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif /* CONFIG_STMMAC_PLATFORM */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_STMMAC_PCI
 | 
					
						
							|  |  |  | extern struct pci_driver stmmac_pci_driver; | 
					
						
							|  |  |  | static inline int stmmac_register_pci(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int err; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err = pci_register_driver(&stmmac_pci_driver); | 
					
						
							|  |  |  | 	if (err) | 
					
						
							|  |  |  | 		pr_err("stmmac: failed to register the PCI driver\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return err; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static inline void stmmac_unregister_pci(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	pci_unregister_driver(&stmmac_pci_driver); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | static inline int stmmac_register_pci(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	pr_debug("stmmac: do not register the PCI driver\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-14 01:02:51 +00:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2012-06-07 19:25:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | static inline void stmmac_unregister_pci(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif /* CONFIG_STMMAC_PCI */
 | 
					
						
							| 
									
										
										
										
											2012-08-22 21:28:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __STMMAC_H__ */
 |