changeset 1902:27f925f10983

* include/devs_eth_xsengine.inl: * cdl/xsengine_eth_drivers.cdl: New package - support for Exys XSEngine (Xscale PXA255).
author asl
date Thu, 03 Mar 2005 19:25:15 +0000
parents d5547d5dab7a
children 8e75d617b452
files packages/devs/eth/arm/xsengine/current/ChangeLog packages/devs/eth/arm/xsengine/current/cdl/xsengine_eth_drivers.cdl packages/devs/eth/arm/xsengine/current/include/devs_eth_xsengine.inl
diffstat 3 files changed, 296 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/xsengine/current/ChangeLog
@@ -0,0 +1,38 @@
+2005-02-23  Kurt Stremerch  <kurt.stremerch@exys.be>
+
+        * include/devs_eth_xsengine.inl: 
+        * cdl/xsengine_eth_drivers.cdl: 
+        New package - support for Exys XSEngine (Xscale PXA255).
+
+//===========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2005 eCosCentric Ltd
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/xsengine/current/cdl/xsengine_eth_drivers.cdl
@@ -0,0 +1,116 @@
+# ====================================================================
+#
+#      xsengine_eth_drivers.cdl
+#
+#      Ethernet drivers - support for LAN91C111 ethernet controller
+#      on the Exys XSEngine board.
+#
+# ====================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+## Copyright (C) 2003 Nick Garnett 
+## Copyright (C) 2005 eCosCentric Ltd.
+##
+## eCos is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free
+## Software Foundation; either version 2 or (at your option) any later version.
+##
+## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+## WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License along
+## with eCos; if not, write to the Free Software Foundation, Inc.,
+## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+##
+## As a special exception, if other files instantiate templates or use macros
+## or inline functions from this file, or you compile this file and link it
+## with other works to produce a work based on this file, this file does not
+## by itself cause the resulting work to be covered by the GNU General Public
+## License. However the source code for this file must still be made available
+## in accordance with section (3) of the GNU General Public License.
+##
+## This exception does not invalidate any other reasons why a work based on
+## this file might be covered by the GNU General Public License.
+## -------------------------------------------
+#####ECOSGPLCOPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      Kurt Stremerch
+# Contributors:   Jordi Colomer, nickg
+# Date:           2005-02-23
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_XSENGINE {
+    display       "XSEngine SMC91C111 ethernet driver"
+
+    parent        CYGPKG_IO_ETH_DRIVERS
+    active_if	  CYGPKG_IO_ETH_DRIVERS
+    active_if	  CYGPKG_HAL_ARM_XSCALE_XSENGINE
+
+    include_dir   cyg/io
+
+    description   "Ethernet driver for XSEngine boards."
+
+    # Arguably this should do in the generic package
+    # but then there is a logic loop so you can never enable it.
+
+    cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91CXX_REQUIRED {
+        display   "SMSC LAN91CXX driver required"
+    }
+
+    define_proc {
+        puts $::cdl_system_header "/***** ethernet driver proc output start *****/"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91CXX_INL <cyg/io/devs_eth_xsengine.inl>"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91CXX_CFG <pkgconf/devs_eth_arm_xscale_xsengine.h>"
+        puts $::cdl_system_header "/*****  ethernet driver proc output end  *****/"
+    }
+
+    cdl_component CYGPKG_DEVS_ETH_XSENGINE_ETH0 {
+        display       "XSEngine ethernet port driver"
+        flavor        bool
+        default_value 1
+        description   "
+            This option includes the ethernet device driver for the
+            Microdev port."
+
+        implements    CYGHWR_NET_DRIVERS
+        implements    CYGHWR_NET_DRIVER_ETH0
+        implements    CYGINT_DEVS_ETH_SMSC_LAN91CXX_REQUIRED
+
+        cdl_option CYGDAT_DEVS_ETH_XSENGINE_ETH0_NAME {
+            display       "Device name for the ETH0 ethernet driver"
+            flavor        data
+            default_value {"\"eth0\""}
+            description   "
+                This option sets the name of the ethernet device."
+        }
+
+        cdl_component CYGSEM_DEVS_ETH_XSENGINE_ETH0_SET_ESA {
+            display       "Set the ethernet station address"
+            flavor        bool
+            default_value 0
+            description   "Enabling this option will allow the ethernet
+            station address to be forced to the value set by the
+            configuration.  This may be required if the hardware does
+            not include a serial EEPROM for the ESA."
+            
+            cdl_option CYGDAT_DEVS_ETH_XSENGINE_ETH0_ESA {
+                display       "The ethernet station address (MAC)"
+                flavor        data
+                default_value {"{0x12, 0x13, 0x14, 0x15, 0x16, 0x17}"}
+                description   "A static ethernet station address. 
+                    Caution: Booting two systems with the same MAC on the same
+                    network, will cause severe conflicts."
+            }
+        }
+    }
+}
+
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/xsengine/current/include/devs_eth_xsengine.inl
@@ -0,0 +1,142 @@
+//==========================================================================
+//
+//
+//      XSEngine ethernet I/O definitions.
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2003 Nick Garnett 
+// Copyright (C) 2005 eCosCentric Ltd
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    Kurt Stremerch
+// Contributors: Jordi Colomer, nickg
+// Date:         2005-02-23
+// Purpose:      XSEngine ethernet definitions
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <pkgconf/system.h>
+#include <pkgconf/devs_eth_arm_xscale_xsengine.h>
+#include <cyg/hal/hal_intr.h>          
+
+#ifdef CYGPKG_REDBOOT
+# include <pkgconf/redboot.h>
+# ifdef CYGSEM_REDBOOT_FLASH_CONFIG
+#  include <redboot.h>
+#  include <flash_config.h>
+# endif
+#endif
+
+#define LAN91CXX_IS_LAN91C111
+#define CYGNUM_DEVS_ETH_SMSC_LAN91CXX_SHIFT_ADDR 1
+
+#ifdef CYGPKG_DEVS_ETH_XSENGINE_ETH0
+
+#if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG)
+RedBoot_config_option("Set " CYGDAT_DEVS_ETH_XSENGINE_ETH0_NAME " network hardware address [MAC]",
+                       eth0_esa,
+                       ALWAYS_ENABLED, true,
+                       CONFIG_BOOL, false
+);
+RedBoot_config_option(CYGDAT_DEVS_ETH_XSENGINE_ETH0_NAME " network hardware address [MAC]",
+                       eth0_esa_data,
+                       "eth0_esa", true,
+                       CONFIG_ESA, 0
+);
+#endif // CYGPKG_REDBOOT && CYGSEM_REDBOOT_FLASH_CONFIG
+
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+// Note that this section *is* active in an application, outside RedBoot,
+// where the above section is not included.
+
+# include <cyg/hal/hal_if.h>
+
+# ifndef CONFIG_ESA
+#  define CONFIG_ESA (6)
+# endif
+# ifndef CONFIG_BOOL
+#  define CONFIG_BOOL (1)
+# endif
+
+cyg_bool
+_xsengine_provide_eth0_esa(struct lan91cxx_priv_data* cpd)
+{
+    cyg_bool set_esa;
+    int ok;
+    ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
+                                      "eth0_esa", &set_esa, CONFIG_BOOL);
+    if (ok && set_esa) {
+        ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
+                                          "eth0_esa_data", cpd->enaddr, CONFIG_ESA);
+    }
+    return ok && set_esa;
+}
+
+#endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+
+static lan91cxx_priv_data lan91cxx_eth0_priv_data = { 
+    base : (unsigned short *) 0x60000000,
+#ifdef CYGSEM_DEVS_ETH_XSENGINE_ETH0_SET_ESA
+    enaddr        : CYGDAT_DEVS_ETH_XSENGINE_ETH0_ESA,
+    hardwired_esa : true,
+#else
+    hardwired_esa : false,
+#endif
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+    provide_esa   : &_xsengine_provide_eth0_esa,
+#else
+    provide_esa   : NULL,
+#endif
+};
+
+ETH_DRV_SC(lan91cxx_sc,
+           &lan91cxx_eth0_priv_data,          // Driver specific data
+           CYGDAT_DEVS_ETH_XSENGINE_ETH0_NAME, // Name for device
+           lan91cxx_start,
+           lan91cxx_stop,
+           lan91cxx_control,
+           lan91cxx_can_send,
+           lan91cxx_send,
+           lan91cxx_recv,
+           lan91cxx_deliver,
+           lan91cxx_poll,
+           lan91cxx_int_vector
+);
+
+NETDEVTAB_ENTRY(lan91cxx_netdev, 
+                "lan91cxx_" CYGDAT_DEVS_ETH_XSENGINE_ETH0_NAME,
+                smsc_lan91cxx_init,
+                &lan91cxx_sc);
+
+#endif // CYGPKG_DEVS_ETH_XSENGINE_ETH0