• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/net/stmmac/
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#define DRV_MODULE_VERSION	"Apr_2010"
24#include <linux/stmmac.h>
25
26#include "common.h"
27#ifdef CONFIG_STMMAC_TIMER
28#include "stmmac_timer.h"
29#endif
30
31struct stmmac_priv {
32	/* Frequently used values are kept adjacent for cache effect */
33	struct dma_desc *dma_tx ____cacheline_aligned;
34	dma_addr_t dma_tx_phy;
35	struct sk_buff **tx_skbuff;
36	unsigned int cur_tx;
37	unsigned int dirty_tx;
38	unsigned int dma_tx_size;
39	int tx_coe;
40	int tx_coalesce;
41
42	struct dma_desc *dma_rx ;
43	unsigned int cur_rx;
44	unsigned int dirty_rx;
45	struct sk_buff **rx_skbuff;
46	dma_addr_t *rx_skbuff_dma;
47	struct sk_buff_head rx_recycle;
48
49	struct net_device *dev;
50	int is_gmac;
51	dma_addr_t dma_rx_phy;
52	unsigned int dma_rx_size;
53	int rx_csum;
54	unsigned int dma_buf_sz;
55	struct device *device;
56	struct mac_device_info *hw;
57
58	struct stmmac_extra_stats xstats;
59	struct napi_struct napi;
60
61	phy_interface_t phy_interface;
62	int pbl;
63	int bus_id;
64	int phy_addr;
65	int phy_mask;
66	int (*phy_reset) (void *priv);
67	void (*fix_mac_speed) (void *priv, unsigned int speed);
68	void (*bus_setup)(unsigned long ioaddr);
69	void *bsp_priv;
70
71	int phy_irq;
72	struct phy_device *phydev;
73	int oldlink;
74	int speed;
75	int oldduplex;
76	unsigned int flow_ctrl;
77	unsigned int pause;
78	struct mii_bus *mii;
79
80	u32 msg_enable;
81	spinlock_t lock;
82	int wolopts;
83	int wolenabled;
84	int shutdown;
85#ifdef CONFIG_STMMAC_TIMER
86	struct stmmac_timer *tm;
87#endif
88#ifdef STMMAC_VLAN_TAG_USED
89	struct vlan_group *vlgrp;
90#endif
91	int enh_desc;
92};
93
94#ifdef CONFIG_STM_DRIVERS
95#include <linux/stm/pad.h>
96static inline int stmmac_claim_resource(struct platform_device *pdev)
97{
98	int ret = 0;
99	struct plat_stmmacenet_data *plat_dat = pdev->dev.platform_data;
100
101	/* Pad routing setup */
102	if (IS_ERR(devm_stm_pad_claim(&pdev->dev, plat_dat->pad_config,
103			dev_name(&pdev->dev)))) {
104		printk(KERN_ERR "%s: Failed to request pads!\n", __func__);
105		ret = -ENODEV;
106	}
107	return ret;
108}
109#else
110static inline int stmmac_claim_resource(struct platform_device *pdev)
111{
112	return 0;
113}
114#endif
115
116extern int stmmac_mdio_unregister(struct net_device *ndev);
117extern int stmmac_mdio_register(struct net_device *ndev);
118extern void stmmac_set_ethtool_ops(struct net_device *netdev);
119extern struct stmmac_desc_ops enh_desc_ops;
120extern struct stmmac_desc_ops ndesc_ops;
121