Mercurial > ecos
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 +
