root/include/linux/fs_enet_pd.h

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. fs_get_fec_index
  2. fs_get_fcc_index
  3. fs_get_scc_index
  4. fs_fec_index2id
  5. fs_fcc_index2id
  6. fs_scc_index2id
  7. fs_get_id

/*
 * Platform information definitions for the
 * universal Freescale Ethernet driver.
 *
 * Copyright (c) 2003 Intracom S.A. 
 *  by Pantelis Antoniou <panto@intracom.gr>
 *
 * 2005 (c) MontaVista Software, Inc. 
 * Vitaly Bordug <vbordug@ru.mvista.com>
 *
 * This file is licensed under the terms of the GNU General Public License 
 * version 2. This program is licensed "as is" without any warranty of any 
 * kind, whether express or implied.
 */

#ifndef FS_ENET_PD_H
#define FS_ENET_PD_H

#include <linux/clk.h>
#include <linux/string.h>
#include <linux/of_mdio.h>
#include <linux/if_ether.h>
#include <asm/types.h>

#define FS_ENET_NAME    "fs_enet"

enum fs_id {
        fsid_fec1,
        fsid_fec2,
        fsid_fcc1,
        fsid_fcc2,
        fsid_fcc3,
        fsid_scc1,
        fsid_scc2,
        fsid_scc3,
        fsid_scc4,
};

#define FS_MAX_INDEX    9

static inline int fs_get_fec_index(enum fs_id id)
{
        if (id >= fsid_fec1 && id <= fsid_fec2)
                return id - fsid_fec1;
        return -1;
}

static inline int fs_get_fcc_index(enum fs_id id)
{
        if (id >= fsid_fcc1 && id <= fsid_fcc3)
                return id - fsid_fcc1;
        return -1;
}

static inline int fs_get_scc_index(enum fs_id id)
{
        if (id >= fsid_scc1 && id <= fsid_scc4)
                return id - fsid_scc1;
        return -1;
}

static inline int fs_fec_index2id(int index)
{
        int id = fsid_fec1 + index - 1;
        if (id >= fsid_fec1 && id <= fsid_fec2)
                return id;
        return FS_MAX_INDEX;
                }

static inline int fs_fcc_index2id(int index)
{
        int id = fsid_fcc1 + index - 1;
        if (id >= fsid_fcc1 && id <= fsid_fcc3)
                return id;
        return FS_MAX_INDEX;
}

static inline int fs_scc_index2id(int index)
{
        int id = fsid_scc1 + index - 1;
        if (id >= fsid_scc1 && id <= fsid_scc4)
                return id;
        return FS_MAX_INDEX;
}

enum fs_mii_method {
        fsmii_fixed,
        fsmii_fec,
        fsmii_bitbang,
};

enum fs_ioport {
        fsiop_porta,
        fsiop_portb,
        fsiop_portc,
        fsiop_portd,
        fsiop_porte,
};

struct fs_mii_bit {
        u32 offset;
        u8 bit;
        u8 polarity;
};
struct fs_mii_bb_platform_info {
        struct fs_mii_bit       mdio_dir;
        struct fs_mii_bit       mdio_dat;
        struct fs_mii_bit       mdc_dat;
        int delay;      /* delay in us         */
        int irq[32];    /* irqs per phy's */
};

struct fs_platform_info {

        void(*init_ioports)(struct fs_platform_info *);
        /* device specific information */
        int fs_no;              /* controller index            */
        char fs_type[4];        /* controller type             */

        u32 cp_page;            /* CPM page */
        u32 cp_block;           /* CPM sblock */
        u32 cp_command;         /* CPM page/sblock/mcn */

        u32 clk_trx;            /* some stuff for pins & mux configuration*/
        u32 clk_rx;
        u32 clk_tx;
        u32 clk_route;
        u32 clk_mask;

        u32 mem_offset;
        u32 dpram_offset;
        u32 fcc_regs_c;
        
        u32 device_flags;

        struct device_node *phy_node;
        const struct fs_mii_bus_info *bus_info;

        int rx_ring, tx_ring;   /* number of buffers on rx     */
        __u8 macaddr[ETH_ALEN]; /* mac address                 */
        int rx_copybreak;       /* limit we copy small frames  */
        int napi_weight;        /* NAPI weight                 */

        int use_rmii;           /* use RMII mode               */
        int has_phy;            /* if the network is phy container as well...*/

        struct clk *clk_per;    /* 'per' clock for register access */
};
struct fs_mii_fec_platform_info {
        u32 irq[32];
        u32 mii_speed;
};

static inline int fs_get_id(struct fs_platform_info *fpi)
{
        if(strstr(fpi->fs_type, "SCC"))
                return fs_scc_index2id(fpi->fs_no);
        if(strstr(fpi->fs_type, "FCC"))
                return fs_fcc_index2id(fpi->fs_no);
        if(strstr(fpi->fs_type, "FEC"))
                return fs_fec_index2id(fpi->fs_no);
        return fpi->fs_no;
}

#endif

/* [<][>][^][v][top][bottom][index][help] */