summaryrefslogtreecommitdiffstats
path: root/drivers/net/bfin_mac.h
blob: b82724692283baa717eb09212db364f108824703 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * File:	drivers/net/bfin_mac.c
 * Based on:
 * Maintainer:
 * 		Bryan Wu <bryan.wu@analog.com>
 *
 * Original author:
 * 		Luke Yang <luke.yang@analog.com>
 *
 * Created:
 * Description:
 *
 * Modified:
 *		Copyright 2004-2006 Analog Devices Inc.
 *
 * Bugs:	Enter bugs at http://blackfin.uclinux.org/
 *
 * This program is free software ;  you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation ;  either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that 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 ;  see the file COPYING.
 * If not, write to the Free Software Foundation,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

/*
 * PHY REGISTER NAMES
 */
#define PHYREG_MODECTL		0x0000
#define PHYREG_MODESTAT		0x0001
#define PHYREG_PHYID1		0x0002
#define PHYREG_PHYID2		0x0003
#define PHYREG_ANAR		0x0004
#define PHYREG_ANLPAR		0x0005
#define PHYREG_ANER		0x0006
#define PHYREG_NSR		0x0010
#define PHYREG_LBREMR		0x0011
#define PHYREG_REC		0x0012
#define PHYREG_10CFG		0x0013
#define PHYREG_PHY1_1		0x0014
#define PHYREG_PHY1_2		0x0015
#define PHYREG_PHY2		0x0016
#define PHYREG_TW_1		0x0017
#define PHYREG_TW_2		0x0018
#define PHYREG_TEST		0x0019

#define PHY_RESET		0x8000
#define PHY_ANEG_EN		0x1000
#define PHY_DUPLEX		0x0100
#define PHY_SPD_SET		0x2000

#define BFIN_MAC_CSUM_OFFLOAD

struct dma_descriptor {
	struct dma_descriptor *next_dma_desc;
	unsigned long start_addr;
	unsigned short config;
	unsigned short x_count;
};

struct status_area_rx {
#if defined(BFIN_MAC_CSUM_OFFLOAD)
	unsigned short ip_hdr_csum;	/* ip header checksum */
	/* ip payload(udp or tcp or others) checksum */
	unsigned short ip_payload_csum;
#endif
	unsigned long status_word;	/* the frame status word */
};

struct status_area_tx {
	unsigned long status_word;	/* the frame status word */
};

/* use two descriptors for a packet */
struct net_dma_desc_rx {
	struct net_dma_desc_rx *next;
	struct sk_buff *skb;
	struct dma_descriptor desc_a;
	struct dma_descriptor desc_b;
	struct status_area_rx status;
};

/* use two descriptors for a packet */
struct net_dma_desc_tx {
	struct net_dma_desc_tx *next;
	struct sk_buff *skb;
	struct dma_descriptor desc_a;
	struct dma_descriptor desc_b;
	unsigned char packet[1560];
	struct status_area_tx status;
};

struct bf537mac_local {
	/*
	 * these are things that the kernel wants me to keep, so users
	 * can find out semi-useless statistics of how well the card is
	 * performing
	 */
	int version;

	int FlowEnabled;	/* record if data flow is active */
	int EtherIntIVG;	/* IVG for the ethernet interrupt */
	int RXIVG;		/* IVG for the RX completion */
	int TXIVG;		/* IVG for the TX completion */
	int PhyAddr;		/* PHY address */
	int OpMode;		/* set these bits n the OPMODE regs */
	int Port10;		/* set port speed to 10 Mbit/s */
	int GenChksums;		/* IP checksums to be calculated */
	int NoRcveLnth;		/* dont insert recv length at start of buffer */
	int StripPads;		/* remove trailing pad bytes */
	int FullDuplex;		/* set full duplex mode */
	int Negotiate;		/* enable auto negotiation */
	int Loopback;		/* loopback at the PHY */
	int Cache;		/* Buffers may be cached */
	int FlowControl;	/* flow control active */
	int CLKIN;		/* clock in value in MHZ */
	unsigned short IntMask;	/* interrupt mask */
	unsigned char Mac[6];	/* MAC address of the board */
	spinlock_t lock;
};

extern void get_bf537_ether_addr(char *addr);