|
1 /* |
|
2 * Platform information definitions for the |
|
3 * universal Freescale Ethernet driver. |
|
4 * |
|
5 * Copyright (c) 2003 Intracom S.A. |
|
6 * by Pantelis Antoniou <panto@intracom.gr> |
|
7 * |
|
8 * 2005 (c) MontaVista Software, Inc. |
|
9 * Vitaly Bordug <vbordug@ru.mvista.com> |
|
10 * |
|
11 * This file is licensed under the terms of the GNU General Public License |
|
12 * version 2. This program is licensed "as is" without any warranty of any |
|
13 * kind, whether express or implied. |
|
14 */ |
|
15 |
|
16 #ifndef FS_ENET_PD_H |
|
17 #define FS_ENET_PD_H |
|
18 |
|
19 #include <linux/string.h> |
|
20 #include <asm/types.h> |
|
21 |
|
22 #define FS_ENET_NAME "fs_enet" |
|
23 |
|
24 enum fs_id { |
|
25 fsid_fec1, |
|
26 fsid_fec2, |
|
27 fsid_fcc1, |
|
28 fsid_fcc2, |
|
29 fsid_fcc3, |
|
30 fsid_scc1, |
|
31 fsid_scc2, |
|
32 fsid_scc3, |
|
33 fsid_scc4, |
|
34 }; |
|
35 |
|
36 #define FS_MAX_INDEX 9 |
|
37 |
|
38 static inline int fs_get_fec_index(enum fs_id id) |
|
39 { |
|
40 if (id >= fsid_fec1 && id <= fsid_fec2) |
|
41 return id - fsid_fec1; |
|
42 return -1; |
|
43 } |
|
44 |
|
45 static inline int fs_get_fcc_index(enum fs_id id) |
|
46 { |
|
47 if (id >= fsid_fcc1 && id <= fsid_fcc3) |
|
48 return id - fsid_fcc1; |
|
49 return -1; |
|
50 } |
|
51 |
|
52 static inline int fs_get_scc_index(enum fs_id id) |
|
53 { |
|
54 if (id >= fsid_scc1 && id <= fsid_scc4) |
|
55 return id - fsid_scc1; |
|
56 return -1; |
|
57 } |
|
58 |
|
59 static inline int fs_fec_index2id(int index) |
|
60 { |
|
61 int id = fsid_fec1 + index - 1; |
|
62 if (id >= fsid_fec1 && id <= fsid_fec2) |
|
63 return id; |
|
64 return FS_MAX_INDEX; |
|
65 } |
|
66 |
|
67 static inline int fs_fcc_index2id(int index) |
|
68 { |
|
69 int id = fsid_fcc1 + index - 1; |
|
70 if (id >= fsid_fcc1 && id <= fsid_fcc3) |
|
71 return id; |
|
72 return FS_MAX_INDEX; |
|
73 } |
|
74 |
|
75 static inline int fs_scc_index2id(int index) |
|
76 { |
|
77 int id = fsid_scc1 + index - 1; |
|
78 if (id >= fsid_scc1 && id <= fsid_scc4) |
|
79 return id; |
|
80 return FS_MAX_INDEX; |
|
81 } |
|
82 |
|
83 enum fs_mii_method { |
|
84 fsmii_fixed, |
|
85 fsmii_fec, |
|
86 fsmii_bitbang, |
|
87 }; |
|
88 |
|
89 enum fs_ioport { |
|
90 fsiop_porta, |
|
91 fsiop_portb, |
|
92 fsiop_portc, |
|
93 fsiop_portd, |
|
94 fsiop_porte, |
|
95 }; |
|
96 |
|
97 struct fs_mii_bit { |
|
98 u32 offset; |
|
99 u8 bit; |
|
100 u8 polarity; |
|
101 }; |
|
102 struct fs_mii_bb_platform_info { |
|
103 struct fs_mii_bit mdio_dir; |
|
104 struct fs_mii_bit mdio_dat; |
|
105 struct fs_mii_bit mdc_dat; |
|
106 int delay; /* delay in us */ |
|
107 int irq[32]; /* irqs per phy's */ |
|
108 }; |
|
109 |
|
110 struct fs_platform_info { |
|
111 |
|
112 void(*init_ioports)(struct fs_platform_info *); |
|
113 /* device specific information */ |
|
114 int fs_no; /* controller index */ |
|
115 char fs_type[4]; /* controller type */ |
|
116 |
|
117 u32 cp_page; /* CPM page */ |
|
118 u32 cp_block; /* CPM sblock */ |
|
119 u32 cp_command; /* CPM page/sblock/mcn */ |
|
120 |
|
121 u32 clk_trx; /* some stuff for pins & mux configuration*/ |
|
122 u32 clk_rx; |
|
123 u32 clk_tx; |
|
124 u32 clk_route; |
|
125 u32 clk_mask; |
|
126 |
|
127 u32 mem_offset; |
|
128 u32 dpram_offset; |
|
129 u32 fcc_regs_c; |
|
130 |
|
131 u32 device_flags; |
|
132 |
|
133 int phy_addr; /* the phy address (-1 no phy) */ |
|
134 char bus_id[16]; |
|
135 int phy_irq; /* the phy irq (if it exists) */ |
|
136 |
|
137 const struct fs_mii_bus_info *bus_info; |
|
138 |
|
139 int rx_ring, tx_ring; /* number of buffers on rx */ |
|
140 __u8 macaddr[6]; /* mac address */ |
|
141 int rx_copybreak; /* limit we copy small frames */ |
|
142 int use_napi; /* use NAPI */ |
|
143 int napi_weight; /* NAPI weight */ |
|
144 |
|
145 int use_rmii; /* use RMII mode */ |
|
146 int has_phy; /* if the network is phy container as well...*/ |
|
147 }; |
|
148 struct fs_mii_fec_platform_info { |
|
149 u32 irq[32]; |
|
150 u32 mii_speed; |
|
151 }; |
|
152 |
|
153 static inline int fs_get_id(struct fs_platform_info *fpi) |
|
154 { |
|
155 if(strstr(fpi->fs_type, "SCC")) |
|
156 return fs_scc_index2id(fpi->fs_no); |
|
157 if(strstr(fpi->fs_type, "FCC")) |
|
158 return fs_fcc_index2id(fpi->fs_no); |
|
159 if(strstr(fpi->fs_type, "FEC")) |
|
160 return fs_fec_index2id(fpi->fs_no); |
|
161 return fpi->fs_no; |
|
162 } |
|
163 |
|
164 #endif |