summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/qoriq/network/network.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2011-07-21 15:18:02 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2011-07-21 15:18:02 +0000
commitdc0a7df67469f1170cfb95114c03f5980710c1be (patch)
tree202b566de761b1f6090696c89ccf4b787f3dc0cb /c/src/lib/libbsp/powerpc/qoriq/network/network.c
parent2011-07-21 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-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.c135
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);
+}