Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Platform information definitions for the
0003  * universal Freescale Ethernet driver.
0004  *
0005  * Copyright (c) 2003 Intracom S.A. 
0006  *  by Pantelis Antoniou <panto@intracom.gr>
0007  *
0008  * 2005 (c) MontaVista Software, Inc. 
0009  * Vitaly Bordug <vbordug@ru.mvista.com>
0010  *
0011  * This file is licensed under the terms of the GNU General Public License 
0012  * version 2. This program is licensed "as is" without any warranty of any 
0013  * kind, whether express or implied.
0014  */
0015 
0016 #ifndef FS_ENET_PD_H
0017 #define FS_ENET_PD_H
0018 
0019 #include <linux/clk.h>
0020 #include <linux/string.h>
0021 #include <linux/of_mdio.h>
0022 #include <linux/if_ether.h>
0023 #include <asm/types.h>
0024 
0025 #define FS_ENET_NAME    "fs_enet"
0026 
0027 enum fs_id {
0028     fsid_fec1,
0029     fsid_fec2,
0030     fsid_fcc1,
0031     fsid_fcc2,
0032     fsid_fcc3,
0033     fsid_scc1,
0034     fsid_scc2,
0035     fsid_scc3,
0036     fsid_scc4,
0037 };
0038 
0039 #define FS_MAX_INDEX    9
0040 
0041 static inline int fs_get_fec_index(enum fs_id id)
0042 {
0043     if (id >= fsid_fec1 && id <= fsid_fec2)
0044         return id - fsid_fec1;
0045     return -1;
0046 }
0047 
0048 static inline int fs_get_fcc_index(enum fs_id id)
0049 {
0050     if (id >= fsid_fcc1 && id <= fsid_fcc3)
0051         return id - fsid_fcc1;
0052     return -1;
0053 }
0054 
0055 static inline int fs_get_scc_index(enum fs_id id)
0056 {
0057     if (id >= fsid_scc1 && id <= fsid_scc4)
0058         return id - fsid_scc1;
0059     return -1;
0060 }
0061 
0062 static inline int fs_fec_index2id(int index)
0063 {
0064     int id = fsid_fec1 + index - 1;
0065     if (id >= fsid_fec1 && id <= fsid_fec2)
0066         return id;
0067     return FS_MAX_INDEX;
0068         }
0069 
0070 static inline int fs_fcc_index2id(int index)
0071 {
0072     int id = fsid_fcc1 + index - 1;
0073     if (id >= fsid_fcc1 && id <= fsid_fcc3)
0074         return id;
0075     return FS_MAX_INDEX;
0076 }
0077 
0078 static inline int fs_scc_index2id(int index)
0079 {
0080     int id = fsid_scc1 + index - 1;
0081     if (id >= fsid_scc1 && id <= fsid_scc4)
0082         return id;
0083     return FS_MAX_INDEX;
0084 }
0085 
0086 enum fs_mii_method {
0087     fsmii_fixed,
0088     fsmii_fec,
0089     fsmii_bitbang,
0090 };
0091 
0092 enum fs_ioport {
0093     fsiop_porta,
0094     fsiop_portb,
0095     fsiop_portc,
0096     fsiop_portd,
0097     fsiop_porte,
0098 };
0099 
0100 struct fs_mii_bit {
0101     u32 offset;
0102     u8 bit;
0103     u8 polarity;
0104 };
0105 struct fs_mii_bb_platform_info {
0106     struct fs_mii_bit   mdio_dir;
0107     struct fs_mii_bit   mdio_dat;
0108     struct fs_mii_bit   mdc_dat;
0109     int delay;  /* delay in us         */
0110     int irq[32];    /* irqs per phy's */
0111 };
0112 
0113 struct fs_platform_info {
0114 
0115     void(*init_ioports)(struct fs_platform_info *);
0116     /* device specific information */
0117     int fs_no;      /* controller index            */
0118     char fs_type[4];    /* controller type             */
0119 
0120     u32 cp_page;        /* CPM page */
0121     u32 cp_block;       /* CPM sblock */
0122     u32 cp_command;     /* CPM page/sblock/mcn */
0123 
0124     u32 clk_trx;        /* some stuff for pins & mux configuration*/
0125     u32 clk_rx;
0126     u32 clk_tx;
0127     u32 clk_route;
0128     u32 clk_mask;
0129 
0130     u32 mem_offset;
0131     u32 dpram_offset;
0132     u32 fcc_regs_c;
0133     
0134     u32 device_flags;
0135 
0136     struct device_node *phy_node;
0137     const struct fs_mii_bus_info *bus_info;
0138 
0139     int rx_ring, tx_ring;   /* number of buffers on rx     */
0140     __u8 macaddr[ETH_ALEN]; /* mac address                 */
0141     int rx_copybreak;   /* limit we copy small frames  */
0142     int napi_weight;    /* NAPI weight                 */
0143 
0144     int use_rmii;       /* use RMII mode           */
0145     int has_phy;            /* if the network is phy container as well...*/
0146 
0147     struct clk *clk_per;    /* 'per' clock for register access */
0148 };
0149 struct fs_mii_fec_platform_info {
0150     u32 irq[32];
0151     u32 mii_speed;
0152 };
0153 
0154 static inline int fs_get_id(struct fs_platform_info *fpi)
0155 {
0156     if(strstr(fpi->fs_type, "SCC"))
0157         return fs_scc_index2id(fpi->fs_no);
0158     if(strstr(fpi->fs_type, "FCC"))
0159         return fs_fcc_index2id(fpi->fs_no);
0160     if(strstr(fpi->fs_type, "FEC"))
0161         return fs_fec_index2id(fpi->fs_no);
0162     return fpi->fs_no;
0163 }
0164 
0165 #endif