diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-07-21 15:18:02 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-07-21 15:18:02 +0000 |
commit | dc0a7df67469f1170cfb95114c03f5980710c1be (patch) | |
tree | 202b566de761b1f6090696c89ccf4b787f3dc0cb /c/src/lib/libbsp/powerpc/qoriq/network/network.c | |
parent | 2011-07-21 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-dc0a7df67469f1170cfb95114c03f5980710c1be.tar.bz2 |
2011-07-21 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1799/bsps
* .cvsignore, ChangeLog, Makefile.am, README, bsp_specs, configure.ac,
clock/clock-config.c, console/console-config.c,
console/uart-bridge-master.c, console/uart-bridge-slave.c,
include/.cvsignore, include/bsp.h, include/hwreg_vals.h,
include/intercom.h, include/irq.h, include/mmu.h, include/qoriq.h,
include/tm27.h, include/tsec-config.h, include/u-boot-config.h,
include/uart-bridge.h, irq/irq.c, make/custom/qoriq.inc,
make/custom/qoriq_core_0.cfg, make/custom/qoriq_core_1.cfg,
make/custom/qoriq_p1020rdb.cfg, network/if_intercom.c,
network/network.c, rtc/rtc-config.c, shmsupp/intercom-mpci.c,
shmsupp/intercom.c, shmsupp/lock.S, start/start.S,
startup/bsppredriverhook.c, startup/bspreset.c, startup/bspstart.c,
startup/linkcmds.base, startup/linkcmds.qoriq_core_0,
startup/linkcmds.qoriq_core_1, startup/linkcmds.qoriq_p1020rdb,
startup/mmu-config.c, startup/mmu-tlb1.S, startup/mmu.c: New files.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/qoriq/network/network.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/network/network.c | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/network/network.c b/c/src/lib/libbsp/powerpc/qoriq/network/network.c new file mode 100644 index 0000000000..db04809429 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/qoriq/network/network.c @@ -0,0 +1,135 @@ +/** + * @file + * + * @ingroup QorIQ + * + * @brief Network configuration. + */ + +/* + * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#define __INSIDE_RTEMS_BSD_TCPIP_STACK__ 1 +#define __BSD_VISIBLE 1 + +#include <assert.h> +#include <string.h> + +#include <rtems/rtems_bsdnet.h> +#include <rtems/rtems_bsdnet_internal.h> + +#include <libcpu/powerpc-utility.h> + +#include <bsp.h> +#include <bsp/tsec.h> +#include <bsp/u-boot.h> +#include <bsp/qoriq.h> + +int BSP_tsec_attach( + struct rtems_bsdnet_ifconfig *config, + int attaching +) +{ + char *unit_name = NULL; + int unit_number = rtems_bsdnet_parse_driver_name(config, &unit_name); + tsec_config tsec_cfg; + bool has_groups = false; + + memset(&tsec_cfg, 0, sizeof(tsec_cfg)); + config->drv_ctrl = &tsec_cfg; + + if (unit_number <= 0 || unit_number > TSEC_COUNT) { + return 0; + } + + switch (ppc_fsl_system_version_sid(ppc_fsl_system_version())) { + /* P1010 and P1020 */ + case 0x0ec: + case 0x0e4: + case 0x0ed: + case 0x0e5: + has_groups = true; + break; + } + + if (config->hardware_address == NULL) { + #ifdef HAS_UBOOT + switch (unit_number) { + case 1: + config->hardware_address = bsp_uboot_board_info.bi_enetaddr; + break; + case 2: + config->hardware_address = bsp_uboot_board_info.bi_enet1addr; + break; + case 3: + config->hardware_address = bsp_uboot_board_info.bi_enet2addr; + break; + default: + assert(0); + break; + } + #else + assert(0); + #endif + } + + switch (unit_number) { + case 1: + if (has_groups) { + tsec_cfg.reg_ptr = &qoriq.tsec_1_group_0; + } else { + tsec_cfg.reg_ptr = &qoriq.tsec_1; + } + tsec_cfg.mdio_ptr = &qoriq.tsec_1; + tsec_cfg.irq_num_tx = QORIQ_IRQ_ETSEC_TX_1; + tsec_cfg.irq_num_rx = QORIQ_IRQ_ETSEC_RX_1; + tsec_cfg.irq_num_err = QORIQ_IRQ_ETSEC_ER_1; + tsec_cfg.phy_default = QORIQ_ETSEC_1_PHY_ADDR; + break; + case 2: + if (has_groups) { + tsec_cfg.reg_ptr = &qoriq.tsec_2_group_0; + } else { + tsec_cfg.reg_ptr = &qoriq.tsec_2; + } + tsec_cfg.mdio_ptr = &qoriq.tsec_1; + tsec_cfg.irq_num_tx = QORIQ_IRQ_ETSEC_TX_2; + tsec_cfg.irq_num_rx = QORIQ_IRQ_ETSEC_RX_2; + tsec_cfg.irq_num_err = QORIQ_IRQ_ETSEC_ER_2; + tsec_cfg.phy_default = QORIQ_ETSEC_2_PHY_ADDR; + break; + case 3: + if (has_groups) { + tsec_cfg.reg_ptr = &qoriq.tsec_3_group_0; + } else { + tsec_cfg.reg_ptr = &qoriq.tsec_3; + } + tsec_cfg.mdio_ptr = &qoriq.tsec_1; + tsec_cfg.irq_num_tx = QORIQ_IRQ_ETSEC_TX_3; + tsec_cfg.irq_num_rx = QORIQ_IRQ_ETSEC_RX_3; + tsec_cfg.irq_num_err = QORIQ_IRQ_ETSEC_ER_3; + tsec_cfg.phy_default = QORIQ_ETSEC_3_PHY_ADDR; + break; + default: + assert(0); + break; + } + + tsec_cfg.unit_number = unit_number; + tsec_cfg.unit_name = unit_name; + + return tsec_driver_attach_detach(config, attaching); +} |