changeset 2457:e081135af675

* cdl/phycore229x_eth_drivers.cdl: * include/devs_eth_phycore229x.inl: release of phyCORE-LPC229x ethernet driver package
author asl
date Sun, 06 Jan 2008 13:19:25 +0000
parents 845a99596640
children 2cd7b619ace8
files packages/devs/eth/arm/phycore229x/current/ChangeLog packages/devs/eth/arm/phycore229x/current/cdl/phycore229x_eth_drivers.cdl packages/devs/eth/arm/phycore229x/current/include/devs_eth_phycore229x.inl
diffstat 3 files changed, 357 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/phycore229x/current/ChangeLog
@@ -0,0 +1,38 @@
+2008-01-01  Uwe Kindler <uwe_kindler@web.de>
+
+	* cdl/phycore229x_eth_drivers.cdl:
+	* include/devs_eth_phycore229x.inl:
+	  release of phyCORE-LPC229x ethernet driver package
+
+# ====================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 2008 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/phycore229x/current/cdl/phycore229x_eth_drivers.cdl
@@ -0,0 +1,116 @@
+# ====================================================================
+#
+#      phycore229x_eth_drivers.cdl
+#
+#      Ethernet drivers - platform support for phyCORE-LPC229x
+#
+# ====================================================================
+#####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):      Uwe Kindler
+# Contributors:
+# Date:           2007-11-24
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_ETH_ARM_PHYCORE229X {
+    display       "LAN ethernet driver for phyCORE-LPC229x"
+
+    parent        CYGPKG_IO_ETH_DRIVERS
+    active_if	  CYGPKG_IO_ETH_DRIVERS
+    active_if	  CYGPKG_HAL_ARM_LPC2XXX_PHYCORE229X
+
+    include_dir   cyg/io
+		
+    # 32-bit mode, with EEPROM
+    implements    CYGHWR_NET_DRIVERS
+    implements    CYGHWR_NET_DRIVER_ETH0
+    implements    CYGINT_DEVS_ETH_SMSC_LAN91CXX_REQUIRED
+    
+    requires      CYGPKG_DEVS_ETH_SMSC_LAN91CXX
+    requires      CYGNUM_DEVS_ETH_SMSC_LAN91CXX_INT_PRIO == CYGHWR_HAL_ARM_PHYCORE229X_ETH_INT_PRIO
+    
+    description   "This option includes the ethernet device driver for the
+                   phyCORE-LPC229x board."
+	
+    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_phycore229x.inl>"
+        puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91CXX_CFG <pkgconf/devs_eth_arm_phycore229x.h>"
+        puts $::cdl_system_header "/*****  ethernet driver proc output end  *****/"
+    }
+    
+    # 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"
+    }
+
+    cdl_option CYGDAT_DEVS_ETH_ARM_PHYCORE229X_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_PHYCORE229X_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. The phyCORE
+                board contains an EEPROM so setting the ESA here is not
+                required. If RedBoot supports FLASH configuration then
+                the MAC address is configurable and a static MAC address
+                is not required."
+
+            cdl_option CYGDAT_DEVS_ETH_ARM_PHYCORE229X_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."     
+            }
+    }
+}
+
+# EOF phycore229x_eth_drivers.cdl
new file mode 100644
--- /dev/null
+++ b/packages/devs/eth/arm/phycore229x/current/include/devs_eth_phycore229x.inl
@@ -0,0 +1,203 @@
+#ifndef CYGONCE_DEVS_ETH_PHYCORE229X_INL
+#define CYGONCE_DEVS_ETH_PHYCORE229X_INL
+//==========================================================================
+//
+//  devs_eth_phycore_229x.inl
+//
+//  phyCORE-LPC229x 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):    Uwe Kindler
+// Contributors: 
+// Date:         2007-11-24 
+// Purpose:      
+//####DESCRIPTIONEND####
+//==========================================================================
+
+
+//==========================================================================
+//                               INCLUDES
+//==========================================================================
+#include <pkgconf/system.h>
+#include <pkgconf/devs_eth_arm_phycore229x.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 // CYGSEM_REDBOOT_FLASH_CONFIG
+#endif // CYGPKG_REDBOOT 
+
+
+
+//--------------------------------------------------------------------------
+// Configure LAN91CXX driver
+//
+#define LAN91CXX_IS_LAN91C111	1
+#define LAN91CXX_FORCE_10MHZ    1 // due a PCB tracking problem only
+                                  // 10 MHz is possible
+#define LAN91CXX_32BIT_RX       1 // 32 bit access
+
+
+//--------------------------------------------------------------------------
+// RedBoot ESA Flash configuration options
+// When this option is enabled, RedBoot will keep configuration
+// data in a separate block of FLASH memory. 
+//
+#if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG)
+RedBoot_config_option("Set " CYGDAT_DEVS_ETH_ARM_PHYCORE229X_NAME " network hardware address [MAC]",
+                      eth0_esa,
+                      ALWAYS_ENABLED, true,
+                      CONFIG_BOOL, false
+    );
+RedBoot_config_option(CYGDAT_DEVS_ETH_ARM_PHYCORE229X_NAME " network hardware address [MAC]",
+                      eth0_esa_data,
+                      "eth0_esa", true,
+                      CONFIG_ESA, 0
+    );
+#endif // CYGPKG_REDBOOT && CYGSEM_REDBOOT_FLASH_CONFIG
+
+
+//--------------------------------------------------------------------------
+// Application ESA Flash configuration options
+// Note that this section *is* active in an application, outside 
+// RedBoot, where the above section is not included. 
+//
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+#include <cyg/hal/hal_if.h>
+
+#ifndef CONFIG_ESA
+    #define CONFIG_ESA (6)
+#endif
+#ifndef CONFIG_BOOL
+    #define CONFIG_BOOL (1)
+#endif
+
+
+//--------------------------------------------------------------------------
+// Provide ESA function
+// Returns true if ESA is configured by flash, else false 
+//
+cyg_bool phycore229x_provide_esa(struct lan91cxx_priv_data *cpd)
+{
+    cyg_bool set_esa;
+    int      ok;
+    
+    
+    //
+    // first we check, if the ESA should be set according to flash
+    // configuration
+    //
+    ok = CYGACC_CALL_IF_FLASH_CFG_OP(CYGNUM_CALL_IF_FLASH_CFG_GET,
+                                     "eth0_esa", 
+                                     &set_esa, 
+                                     CONFIG_BOOL);
+    //
+    // if esa should be set by flash configuration, then we store the
+    // esa from flash in driver configuration data and return true
+    //
+    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
+
+
+//---------------------------------------------------------------------------
+// Stores configuration data for generic smsc91xxx driver
+//
+static lan91cxx_priv_data lan91cxx_eth0_priv_data = {  
+    base :          (unsigned short *)(CYGHWR_HAL_ARM_PHYCORE229X_ETH_MEM_AREA 
+                                       + 0x0300),
+    interrupt :      ( CYGHWR_HAL_ARM_PHYCORE229X_ETH_EINT + 
+                       CYGNUM_HAL_INTERRUPT_EINT0) ,   
+    //
+    // if user selects a hardwired ESA in configuration then
+    // we fill the ESA here
+    //
+#ifdef CYGSEM_DEVS_ETH_PHYCORE229X_SET_ESA
+    enaddr        : CYGDAT_DEVS_ETH_PHYCORE229X_ESA,
+    hardwired_esa : true,
+#else
+    hardwired_esa : false,
+#endif 
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+    provide_esa   : &phycore229x_provide_esa,
+#else
+    provide_esa   : NULL,             // read MAC from associated EEPROM
+#endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
+}; // lan91cxx_priv_data
+
+
+//---------------------------------------------------------------------------
+// Driver configuration
+//
+ETH_DRV_SC(
+    lan91cxx_sc,
+    &lan91cxx_eth0_priv_data,                   // driver specific data
+    CYGDAT_DEVS_ETH_ARM_PHYCORE229X_NAME,       // device name
+    lan91cxx_start,
+    lan91cxx_stop,
+    lan91cxx_control,
+    lan91cxx_can_send,
+    lan91cxx_send,
+    lan91cxx_recv,
+    lan91cxx_deliver,
+    lan91cxx_poll,
+    lan91cxx_int_vector
+);
+
+
+//---------------------------------------------------------------------------
+// Entry into net device table
+//
+NETDEVTAB_ENTRY( 
+    lan91cxx_netdev, 
+    "lan91cxx_" CYGDAT_DEVS_ETH_ARM_PHYCORE229X_NAME,
+    smsc_lan91cxx_init,
+    &lan91cxx_sc
+);
+
+//---------------------------------------------------------------------------
+#endif // CYGONCE_DEVS_ETH_PHYCORE229X_INL