changeset 2663:5e816776379b

* Ethernet driver for LPC-L2294 development board * cdl/olpcl2294_eth_drivers.cdl * include/devs_eth_arm_olpcl2294.h * include/devs_eth_arm_olpcl2294.inl
author asl
date Sun, 23 Nov 2008 12:55:55 +0000
parents a3b3f7d5019f
children 7dbab411425b
files packages/devs/eth/arm/olpcl2294/current/ChangeLog packages/devs/eth/arm/olpcl2294/current/cdl/olpcl2294_eth_drivers.cdl packages/devs/eth/arm/olpcl2294/current/include/devs_eth_arm_olpcl2294.h packages/devs/eth/arm/olpcl2294/current/include/devs_eth_arm_olpcl2294.inl
diffstat 4 files changed, 372 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/olpcl2294/current/ChangeLog
@@ -0,0 +1,39 @@
+2008-08-31  Sergei Gavrikov <sergei.gavrikov@gmail.com>
+
+	* Ethernet driver for LPC-L2294 development board
+	* cdl/olpcl2294_eth_drivers.cdl
+	* include/devs_eth_arm_olpcl2294.h
+	* include/devs_eth_arm_olpcl2294.inl
+
+//===========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 2008 FSF.
+//
+// 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/olpcl2294/current/cdl/olpcl2294_eth_drivers.cdl
@@ -0,0 +1,109 @@
+# ====================================================================
+#
+#      olpcl2294_eth_drivers.cdl
+#
+#      Ethernet drivers - platform dependent support for OLPCL2294
+#
+# ====================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+## Copyright (C) 2008 eCosCentric Limited
+##
+## 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):      Sergei Gavrikov
+# Contributors:   Sergei Gavrikov
+# Date:           2008-08-31
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_ETH_ARM_OLPCL2294 {
+    display       "LAN ethernet driver for Olimex LPC-L2294-1MB"
+
+    parent        CYGPKG_IO_ETH_DRIVERS
+    active_if     CYGPKG_IO_ETH_DRIVERS
+    active_if     CYGPKG_HAL_ARM_LPC2XXX_OLPCL2294
+
+   include_dir   cyg/io
+
+    description   "
+        Ethernet driver for Olimex LPC-L2294-1MB board."
+
+    # FIXME: This really belongs in the CL CS8900A package
+    cdl_interface CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED {
+        display   "Cirrus Logic CS8900A ethernet driver required"
+    }
+
+    define_proc {
+        puts $::cdl_system_header "/***** ethernet driver proc output start *****/"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_CL_CS8900A_INL <cyg/io/devs_eth_arm_olpcl2294.inl>"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_CL_CS8900A_CFG <pkgconf/devs_eth_arm_olpcl2294.h>"
+        puts $::cdl_system_header "/*****  ethernet driver proc output end  *****/"
+    }
+
+   cdl_component CYGPKG_DEVS_ETH_ARM_OLPCL2294_ETH0 {
+        display       "OLPCL2294 ethernet port driver"
+        flavor        bool
+        default_value 1
+        description   "
+            This option includes the ethernet device driver for the
+            OLPCL2294 port."
+
+        implements CYGHWR_NET_DRIVER_ETH0
+        implements CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED
+
+        cdl_option CYGDAT_DEVS_ETH_ARM_OLPCL2294_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_ARM_OLPCL2294_ETH0_SET_ESA {
+            display       "Set the ethernet station address"
+            flavor        bool
+            calculated    1
+            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_ARM_OLPCL2294_ETH0_ESA {
+                display       "The ethernet station address"
+                flavor        data
+                default_value {"{0x08, 0x88, 0x12, 0x34, 0x56, 0x78}"}
+                description   "The ethernet station address"
+            }
+        }
+    }
+}
+
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/olpcl2294/current/include/devs_eth_arm_olpcl2294.h
@@ -0,0 +1,56 @@
+#ifndef _CYGONCE_DEVS_ETH_ARM_OLPCL2294_H
+#define _CYGONCE_DEVS_ETH_ARM_OLPCL2294_H
+//==========================================================================
+//
+//      devs_eth_arm_olpcl2294.h
+//
+//      OLPCL2294 ethernet configuration
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2008 eCosCentric Limited
+//
+// 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):     Sergei Gavrikov
+// Contributors:  Sergei Gavrikov
+// Date:          2008-08-31
+// Purpose:       OLPCL2294 ethernet configuration
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//========================================================================*/
+
+
+#endif // _CYGONCE_DEVS_ETH_ARM_OLPCL2294_H
+//--------------------------------------------------------------------------
+// EOF devs_eth_arm_olpcl2294.h
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/olpcl2294/current/include/devs_eth_arm_olpcl2294.inl
@@ -0,0 +1,168 @@
+//==========================================================================
+//
+//      devs_eth_arm_olpcl2294.inl
+//
+//      OLPCL2294 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) 2008 eCosCentric Limited
+//
+// 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):     Sergei Gavrikov
+// Contributors:  Sergei Gavrikov
+// Date:          2008-08-31
+// Purpose:       OLPCL2294 ethernet definitions
+// Description:
+//
+//####DESCRIPTIONEND####
+//
+//========================================================================*/
+
+#include <cyg/hal/hal_var_ints.h>
+#include <cyg/hal/hal_if.h>
+
+#ifdef CYGPKG_REDBOOT
+# include <pkgconf/redboot.h>
+# ifdef CYGSEM_REDBOOT_FLASH_CONFIG
+#  include <redboot.h>
+#  include <flash_config.h>
+# endif
+#endif
+
+#ifdef __WANT_CONFIG
+//#define DEBUG 0x0f
+#endif // __WANT_CONFIG
+
+#ifdef __WANT_DEVS
+
+#ifdef CYGPKG_DEVS_ETH_ARM_OLPCL2294_ETH0
+
+#ifndef CYGSEM_DEVS_ETH_ARM_OLPCL2294_ETH0_SET_ESA
+# if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG)
+RedBoot_config_option("Set " CYGDAT_DEVS_ETH_ARM_OLPCL2294_ETH0_NAME " network hardware address [MAC]",
+                      eth0_esa,
+                      ALWAYS_ENABLED, true,
+                      CONFIG_BOOL, false
+    );
+RedBoot_config_option(CYGDAT_DEVS_ETH_ARM_OLPCL2294_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
+_olpcl2294_provide_eth0_esa(struct cs8900a_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->esa, CONFIG_ESA);
+    }
+    return ok && set_esa;
+}
+
+# endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+#endif // ! CYGSEM_DEVS_ETH_ARM_OLPCL2294_ETH0_SET_ESA
+
+static __inline__ void
+post_reset(cyg_addrword_t base)
+{
+    // Toggle A0 connected to the SBHE# line
+    HAL_WRITE_UINT8( 0x82000000, 1 );
+    HAL_WRITE_UINT8( 0x82000001, 2 );
+    HAL_WRITE_UINT8( 0x82000000, 3 );
+    HAL_WRITE_UINT8( 0x82000001, 0 );
+}
+
+#undef CYGHWR_CL_CS8900A_PLF_POST_RESET
+#define CYGHWR_CL_CS8900A_PLF_POST_RESET(base) post_reset(base)
+
+static cs8900a_priv_data_t cs8900a_eth0_priv_data = {
+    base : (cyg_addrword_t) 0x82000000,
+    interrupt : CYGNUM_HAL_INTERRUPT_EINT2,
+#ifdef CYGSEM_DEVS_ETH_ARM_OLPCL2294_ETH0_SET_ESA
+    esa : CYGDAT_DEVS_ETH_ARM_OLPCL2294_ETH0_ESA,
+    hardwired_esa : true,
+#else
+    hardwired_esa : false,
+# ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+    provide_esa : &_olpcl2294_provide_eth0_esa,
+# else
+    provide_esa : NULL,
+# endif
+#endif
+};
+
+ETH_DRV_SC(cs8900a_sc,
+           &cs8900a_eth0_priv_data, // Driver specific data
+           CYGDAT_DEVS_ETH_ARM_OLPCL2294_ETH0_NAME,
+           cs8900a_start,
+           cs8900a_stop,
+           cs8900a_control,
+           cs8900a_can_send,
+           cs8900a_send,
+           cs8900a_recv,
+           cs8900a_deliver,     // "pseudoDSR" called from fast net thread
+           cs8900a_poll,        // poll function, encapsulates ISR and DSR
+           cs8900a_int_vector);
+
+NETDEVTAB_ENTRY(cs8900a_netdev,
+                "cs8900a_" CYGDAT_DEVS_ETH_ARM_OLPCL2294_ETH0_NAME,
+                cs8900a_init,
+                &cs8900a_sc);
+
+#endif // CYGPKG_DEVS_ETH_ARM_OLPCL2294_ETH0
+
+#endif // __WANT_DEVS
+
+// indent: --indent-level4 -br -nut; vim: expandtab tabstop=4 shiftwidth=4
+//--------------------------------------------------------------------------
+// EOF devs_eth_arm_olpcl2294.inl
+