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 <asm/types.h> 20 21#define FS_ENET_NAME "fs_enet" 22 23enum fs_id { 24 fsid_fec1, 25 fsid_fec2, 26 fsid_fcc1, 27 fsid_fcc2, 28 fsid_fcc3, 29 fsid_scc1, 30 fsid_scc2, 31 fsid_scc3, 32 fsid_scc4, 33}; 34 35#define FS_MAX_INDEX 9 36 37static inline int fs_get_fec_index(enum fs_id id) 38{ 39 if (id >= fsid_fec1 && id <= fsid_fec2) 40 return id - fsid_fec1; 41 return -1; 42} 43 44static inline int fs_get_fcc_index(enum fs_id id) 45{ 46 if (id >= fsid_fcc1 && id <= fsid_fcc3) 47 return id - fsid_fcc1; 48 return -1; 49} 50 51static inline int fs_get_scc_index(enum fs_id id) 52{ 53 if (id >= fsid_scc1 && id <= fsid_scc4) 54 return id - fsid_scc1; 55 return -1; 56} 57 58static inline int fs_fec_index2id(int index) 59{ 60 int id = fsid_fec1 + index - 1; 61 if (id >= fsid_fec1 && id <= fsid_fec2) 62 return id; 63 return FS_MAX_INDEX; 64 } 65 66static inline int fs_fcc_index2id(int index) 67{ 68 int id = fsid_fcc1 + index - 1; 69 if (id >= fsid_fcc1 && id <= fsid_fcc3) 70 return id; 71 return FS_MAX_INDEX; 72} 73 74static inline int fs_scc_index2id(int index) 75{ 76 int id = fsid_scc1 + index - 1; 77 if (id >= fsid_scc1 && id <= fsid_scc4) 78 return id; 79 return FS_MAX_INDEX; 80} 81 82enum fs_mii_method { 83 fsmii_fixed, 84 fsmii_fec, 85 fsmii_bitbang, 86}; 87 88enum fs_ioport { 89 fsiop_porta, 90 fsiop_portb, 91 fsiop_portc, 92 fsiop_portd, 93 fsiop_porte, 94}; 95 96struct fs_mii_bit { 97 u32 offset; 98 u8 bit; 99 u8 polarity; 100}; 101struct fs_mii_bb_platform_info { 102 struct fs_mii_bit mdio_dir; 103 struct fs_mii_bit mdio_dat; 104 struct fs_mii_bit mdc_dat; 105 int mdio_port; /* port & bit for MDIO */ 106 int mdio_bit; 107 int mdc_port; /* port & bit for MDC */ 108 int mdc_bit; 109 int delay; /* delay in us */ 110 int irq[32]; /* irqs per phy's */ 111}; 112 113struct fs_platform_info { 114 115 void(*init_ioports)(struct fs_platform_info *); 116 /* device specific information */ 117 int fs_no; /* controller index */ 118 char fs_type[4]; /* controller type */ 119 120 u32 cp_page; /* CPM page */ 121 u32 cp_block; /* CPM sblock */ 122 123 u32 clk_trx; /* some stuff for pins & mux configuration*/ 124 u32 clk_rx; 125 u32 clk_tx; 126 u32 clk_route; 127 u32 clk_mask; 128 129 u32 mem_offset; 130 u32 dpram_offset; 131 u32 fcc_regs_c; 132 133 u32 device_flags; 134 135 int phy_addr; /* the phy address (-1 no phy) */ 136 const char* bus_id; 137 int phy_irq; /* the phy irq (if it exists) */ 138 139 const struct fs_mii_bus_info *bus_info; 140 141 int rx_ring, tx_ring; /* number of buffers on rx */ 142 __u8 macaddr[6]; /* mac address */ 143 int rx_copybreak; /* limit we copy small frames */ 144 int use_napi; /* use NAPI */ 145 int napi_weight; /* NAPI weight */ 146 147 int use_rmii; /* use RMII mode */ 148 int has_phy; /* if the network is phy container as well...*/ 149}; 150struct fs_mii_fec_platform_info { 151 u32 irq[32]; 152 u32 mii_speed; 153}; 154 155static inline int fs_get_id(struct fs_platform_info *fpi) 156{ 157 if(strstr(fpi->fs_type, "SCC")) 158 return fs_scc_index2id(fpi->fs_no); 159 if(strstr(fpi->fs_type, "FCC")) 160 return fs_fcc_index2id(fpi->fs_no); 161 if(strstr(fpi->fs_type, "FEC")) 162 return fs_fec_index2id(fpi->fs_no); 163 return fpi->fs_no; 164} 165 166#endif 167