<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems (2010-12-16)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>sh</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-12-16 Sebastian Huber <sebastian.huber@embedded-brains.de>

        * configure.ac, include/bspopts.h.in: More options.
        * include/lpc32xx.h: Added watchdog definitions.
        * include/mmu.h, misc/mmu.c: Added const qualifier.
        * startup/bspreset.c: Use watchdog reset.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog.diff?r1=text&tr1=1.22&r2=text&tr2=1.23&diff_format=h">M</a></td><td width='1%'>1.23</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/configure.ac.diff?r1=text&tr1=1.8&r2=text&tr2=1.9&diff_format=h">M</a></td><td width='1%'>1.9</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/configure.ac</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in.diff?r1=text&tr1=1.7&r2=text&tr2=1.8&diff_format=h">M</a></td><td width='1%'>1.8</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.12&diff_format=h">M</a></td><td width='1%'>1.12</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/include/mmu.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.22 rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.23
--- rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.22   Fri Dec  3 04:13:07 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog        Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -1,3 +1,10 @@
</font><font color='#000088'>+2010-12-16    Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+       * configure.ac, include/bspopts.h.in: More options.
+       * include/lpc32xx.h: Added watchdog definitions.
+       * include/mmu.h, misc/mmu.c: Added const qualifier.
+       * startup/bspreset.c: Use watchdog reset.
+
</font> 2010-12-03        Sebastian Huber <sebastian.huber@embedded-brains.de>
 
        * startup/linkcmds.lpc32xx_mzx, startup/linkcmds.lpc32xx_mzx_stage_1,

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/configure.ac:1.8 rtems/c/src/lib/libbsp/arm/lpc32xx/configure.ac:1.9
--- rtems/c/src/lib/libbsp/arm/lpc32xx/configure.ac:1.8 Tue Sep 28 09:38:26 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/configure.ac     Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -86,9 +86,15 @@
</font> RTEMS_BSPOPTS_SET([LPC32XX_STOP_USB],[*],[1])
 RTEMS_BSPOPTS_HELP([LPC32XX_STOP_USB],[stop USB controller at start-up to avoid DMA interference])
 
<font color='#000088'>+RTEMS_BSPOPTS_SET([LPC32XX_ENABLE_WATCHDOG_RESET],[*],[1])
+RTEMS_BSPOPTS_HELP([LPC32XX_ENABLE_WATCHDOG_RESET],[bsp_reset() will use the watchdog to reset the chip])
+
</font> RTEMS_BSPOPTS_SET([BSP_START_RESET_VECTOR],[*],[])
 RTEMS_BSPOPTS_HELP([BSP_START_RESET_VECTOR],[reset vector address for BSP start])
 
<font color='#000088'>+RTEMS_BSPOPTS_SET([TESTS_USE_PRINTK],[*],[1])
+RTEMS_BSPOPTS_HELP([TESTS_USE_PRINTK],[tests use printk() for output])
+
</font> RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
 RTEMS_BSP_LINKCMDS
 

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in:1.7 rtems/c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in:1.8
--- rtems/c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in:1.7 Tue Sep 28 09:38:26 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/include/bspopts.h.in     Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -45,6 +45,9 @@
</font> /* disable cache for read-write data sections */
 #undef LPC32XX_DISABLE_READ_WRITE_DATA_CACHE
 
<font color='#000088'>+/* bsp_reset() will use the watchdog to reset the chip */
+#undef LPC32XX_ENABLE_WATCHDOG_RESET
+
</font> /* enable RMII for Ethernet */
 #undef LPC32XX_ETHERNET_RMII
 
<font color='#997700'>@@ -95,3 +98,6 @@
</font> 
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
<font color='#000088'>+
+/* tests use printk() for output */
+#undef TESTS_USE_PRINTK
</font>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h:1.11 rtems/c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h:1.12
--- rtems/c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h:1.11   Fri Dec  3 03:29:07 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/include/lpc32xx.h        Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -221,6 +221,17 @@
</font> 
 /** @} */
 
<font color='#000088'>+/**
+ * @name Timer Clock Control Register (TIMCLK_CTRL)
+ *
+ * @{
+ */
+
+#define TIMCLK_CTRL_WDT BSP_BIT32(0)
+#define TIMCLK_CTRL_HST BSP_BIT32(1)
+
+/** @} */
+
</font> #define LPC32XX_RESERVED(a, b, s) (((b) - (a) - sizeof(s)) / 4)
 
 typedef struct {
<font color='#997700'>@@ -259,8 +270,76 @@
</font> typedef struct {
 } lpc32xx_hs_timer;
 
<font color='#000088'>+/**
+ * @name Watchdog Timer Interrupt Status Register (WDTIM_INT)
+ *
+ * @{
+ */
+
+#define WDTTIM_INT_MATCH_INT BSP_BIT32(0)
+
+/** @} */
+
+/**
+ * @name Watchdog Timer Control Register (WDTIM_CTRL)
+ *
+ * @{
+ */
+
+#define WDTTIM_CTRL_COUNT_ENAB BSP_BIT32(0)
+#define WDTTIM_CTRL_RESET_COUNT BSP_BIT32(1)
+#define WDTTIM_CTRL_PAUSE_EN BSP_BIT32(2)
+
+/** @} */
+
+/**
+ * @name Watchdog Timer Match Control Register (WDTIM_MCTRL)
+ *
+ * @{
+ */
+
+#define WDTTIM_MCTRL_MR0_INT BSP_BIT32(0)
+#define WDTTIM_MCTRL_RESET_COUNT0 BSP_BIT32(1)
+#define WDTTIM_MCTRL_STOP_COUNT0 BSP_BIT32(2)
+#define WDTTIM_MCTRL_M_RES1 BSP_BIT32(3)
+#define WDTTIM_MCTRL_M_RES2 BSP_BIT32(4)
+#define WDTTIM_MCTRL_RESFRC1 BSP_BIT32(5)
+#define WDTTIM_MCTRL_RESFRC2 BSP_BIT32(6)
+
+/** @} */
+
+/**
+ * @name Watchdog Timer External Match Control Register (WDTIM_EMR)
+ *
+ * @{
+ */
+
+#define WDTTIM_EMR_EXT_MATCH0 BSP_BIT32(0)
+#define WDTTIM_EMR_MATCH_CTRL(val) BSP_FLD32(val, 4, 5)
+#define WDTTIM_EMR_MATCH_CTRL_SET(reg, val) BSP_FLD32SET(reg, val, 4, 5)
+
+/** @} */
+
+/**
+ * @name Watchdog Timer Reset Source Register (WDTIM_RES)
+ *
+ * @{
+ */
+
+#define WDTTIM_RES_WDT BSP_BIT32(0)
+
+/** @} */
+
</font> typedef struct {
<font color='#880000'>-} lpc32xx_wdg_timer;
</font><font color='#000088'>+  uint32_t intr;
+  uint32_t ctrl;
+  uint32_t counter;
+  uint32_t mctrl;
+  uint32_t match0;
+  uint32_t emr;
+  uint32_t pulse;
+  uint32_t res;
+} lpc32xx_wdt;
</font> 
 typedef struct {
 } lpc32xx_debug;
<font color='#997700'>@@ -545,8 +624,8 @@
</font>   uint32_t reserved_26 [LPC32XX_RESERVED(0x40034000, 0x40038000, lpc32xx_ms_timer)];
   lpc32xx_hs_timer hs_timer;
   uint32_t reserved_27 [LPC32XX_RESERVED(0x40038000, 0x4003c000, lpc32xx_hs_timer)];
<font color='#880000'>-  lpc32xx_wdg_timer wdg_timer;
-  uint32_t reserved_28 [LPC32XX_RESERVED(0x4003c000, 0x40040000, lpc32xx_wdg_timer)];
</font><font color='#000088'>+  lpc32xx_wdt wdt;
+  uint32_t reserved_28 [LPC32XX_RESERVED(0x4003c000, 0x40040000, lpc32xx_wdt)];
</font>   lpc32xx_debug debug;
   uint32_t reserved_29 [LPC32XX_RESERVED(0x40040000, 0x40044000, lpc32xx_debug)];
   lpc_timer timer_0;

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h:1.3 rtems/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h:1.4
--- rtems/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h:1.3        Tue Sep 28 09:38:26 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/include/mmu.h    Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -56,8 +56,8 @@
</font>   (LPC32XX_MMU_READ_WRITE | ARM_MMU_SECT_C | ARM_MMU_SECT_B)
 
 void lpc32xx_set_translation_table_entries(
<font color='#880000'>-  void *begin,
-  void *end,
</font><font color='#000088'>+  const void *begin,
+  const void *end,
</font>   uint32_t section_flags
 );
 

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c:1.1 rtems/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c:1.2
--- rtems/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c:1.1   Tue Sep 28 09:38:26 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/misc/mmu.c       Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -23,8 +23,8 @@
</font> #include <bsp/mmu.h>
 
 void lpc32xx_set_translation_table_entries(
<font color='#880000'>-  void *begin,
-  void *end,
</font><font color='#000088'>+  const void *begin,
+  const void *end,
</font>   uint32_t section_flags
 )
 {

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c:1.1 rtems/c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c:1.2
--- rtems/c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c:1.1   Tue Dec 15 09:20:47 2009
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/startup/bspreset.c       Thu Dec 16 07:35:06 2010
</font><font color='#997700'>@@ -7,24 +7,39 @@
</font>  */
 
 /*
<font color='#880000'>- * Copyright (c) 2009
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
</font><font color='#000088'>+ * Copyright (c) 2009-2010 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Obere Lagerstr. 30
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
</font>  *
  * 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.
  */
 
<font color='#880000'>-#include <rtems.h>
-
</font><font color='#000088'>+#include <bspopts.h>
</font> #include <bsp/bootcard.h>
<font color='#000088'>+#include <bsp/lpc32xx.h>
+
+static void watchdog_reset(void)
+{
+  #ifdef LPC32XX_ENABLE_WATCHDOG_RESET
+    LPC32XX_TIMCLK_CTRL |= TIMCLK_CTRL_WDT;
+    lpc32xx.wdt.mctrl |= WDTTIM_MCTRL_M_RES1 | WDTTIM_MCTRL_M_RES2;
+    lpc32xx.wdt.emr = WDTTIM_EMR_MATCH_CTRL_SET(lpc32xx.wdt.emr, 0x2);
+    lpc32xx.wdt.ctrl |= WDTTIM_CTRL_COUNT_ENAB;
+    lpc32xx.wdt.match0 = 1;
+    lpc32xx.wdt.counter = 0;
+  #endif
+}
</font> 
 void bsp_reset( void)
 {
<font color='#000088'>+  watchdog_reset();
+
</font>   while (true) {
     /* Do nothing */
   }
</pre>
<p> </p>
<a name='cs2'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>sh</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-12-16 Sebastian Huber <sebastian.huber@embedded-brains.de>

        * shared/lpc/include/lpc-i2s.h: Documentation.  Fixed defines.
        * shared/lpc/include/lpc-timer.h: Documentation.
        * shared/lpc/network/lpc-ethernet.c: Added support for 10MBit/s links.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/ChangeLog.diff?r1=text&tr1=1.84&r2=text&tr2=1.85&diff_format=h">M</a></td><td width='1%'>1.85</td><td width='100%'>c/src/lib/libbsp/arm/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/ChangeLog:1.84 rtems/c/src/lib/libbsp/arm/ChangeLog:1.85
--- rtems/c/src/lib/libbsp/arm/ChangeLog:1.84   Fri Dec  3 04:09:59 2010
+++ rtems/c/src/lib/libbsp/arm/ChangeLog        Thu Dec 16 07:35:26 2010
</font><font color='#997700'>@@ -1,3 +1,9 @@
</font><font color='#000088'>+2010-12-16    Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+       * shared/lpc/include/lpc-i2s.h: Documentation.  Fixed defines.
+       * shared/lpc/include/lpc-timer.h: Documentation.
+       * shared/lpc/network/lpc-ethernet.c: Added support for 10MBit/s links.
+
</font> 2010-12-03        Sebastian Huber <sebastian.huber@embedded-brains.de>
 
        * shared/startup/linkcmds.base: Split up fast region.

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h:1.1 rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h:1.2
--- rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h:1.1 Fri Dec  3 03:23:52 2010
+++ rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-i2s.h     Thu Dec 16 07:35:26 2010
</font><font color='#997700'>@@ -30,9 +30,10 @@
</font> #endif
 
 /**
<font color='#880000'>- * @defgroup lpc_dma I2S Support
</font><font color='#000088'>+ * @defgroup lpc_i2s I2S Support
</font>  *
<font color='#880000'>- * @ingroup lpc
</font><font color='#000088'>+ * @ingroup lpc24xx
+ * @ingroup lpc32xx
</font>  *
  * @brief I2S support.
  *
<font color='#997700'>@@ -117,8 +118,8 @@
</font>  */
 
 #define LPC24XX_I2S_RATE(val) BSP_FLD32(val, 0, 9)
<font color='#880000'>-#define LPC32XX_I2S_RATE_X_DIVIDER BSP_FLD32(val, 0, 7)
-#define LPC32XX_I2S_RATE_Y_DIVIDER BSP_FLD32(val, 8, 15)
</font><font color='#000088'>+#define LPC32XX_I2S_RATE_X_DIVIDER(val) BSP_FLD32(val, 0, 7)
+#define LPC32XX_I2S_RATE_Y_DIVIDER(val) BSP_FLD32(val, 8, 15)
</font> 
 /** @} */
 

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h:1.2 rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h:1.3
--- rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h:1.2       Fri Apr  9 07:22:57 2010
+++ rtems/c/src/lib/libbsp/arm/shared/lpc/include/lpc-timer.h   Thu Dec 16 07:35:26 2010
</font><font color='#997700'>@@ -31,7 +31,8 @@
</font> /**
  * @defgroup lpc_timer Timer Support
  *
<font color='#880000'>- * @ingroup lpc
</font><font color='#000088'>+ * @ingroup lpc24xx
+ * @ingroup lpc32xx
</font>  *
  * @brief Timer support.
  *

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c:1.3 rtems/c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c:1.4
--- rtems/c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c:1.3    Fri Apr  9 15:24:57 2010
+++ rtems/c/src/lib/libbsp/arm/shared/lpc/network/lpc-ethernet.c        Thu Dec 16 07:35:26 2010
</font><font color='#997700'>@@ -47,6 +47,7 @@
</font> #include <bsp.h>
 #include <bsp/irq.h>
 #include <bsp/lpc-ethernet-config.h>
<font color='#000088'>+#include <bsp/utility.h>
</font> 
 #include <rtems/status-checks.h>
 
<font color='#997700'>@@ -60,6 +61,9 @@
</font>   #define LPC_ETH_CONFIG_TX_BUF_SIZE 1518U
 #endif
 
<font color='#000088'>+#define DEFAULT_PHY 0
+#define WATCHDOG_TIMEOUT 5
+
</font> typedef struct {
   uint32_t start;
   uint32_t control;
<font color='#997700'>@@ -216,6 +220,35 @@
</font> #define ETH_STAT_RX_ACTIVE 0x00000001U
 #define ETH_STAT_TX_ACTIVE 0x00000002U
 
<font color='#000088'>+/* ETH_MAC2 */
+
+#define ETH_MAC2_FULL_DUPLEX BSP_BIT32(8)
+
+/* ETH_SUPP */
+
+#define ETH_SUPP_SPEED BSP_BIT32(8)
+
+/* ETH_MCFG */
+
+#define ETH_MCFG_CLOCK_SELECT(val) BSP_FLD32(val, 2, 4)
+
+/* ETH_MCMD */
+
+#define ETH_MCMD_READ BSP_BIT32(0)
+#define ETH_MCMD_SCAN BSP_BIT32(1)
+
+/* ETH_MADR */
+
+#define ETH_MADR_REG(val) BSP_FLD32(val, 0, 4)
+#define ETH_MADR_PHY(val) BSP_FLD32(val, 8, 12)
+
+/* ETH_MIND */
+
+#define ETH_MIND_BUSY BSP_BIT32(0)
+#define ETH_MIND_SCANNING BSP_BIT32(1)
+#define ETH_MIND_NOT_VALID BSP_BIT32(2)
+#define ETH_MIND_MII_LINK_FAIL BSP_BIT32(3)
+
</font> /* Events */
 
 #define LPC_ETH_EVENT_INITIALIZE RTEMS_EVENT_1
<font color='#997700'>@@ -266,8 +299,9 @@
</font> 
 typedef struct {
   struct arpcom arpcom;
<font color='#880000'>-  struct rtems_mdio_info mdio_info;
</font>   lpc_eth_state state;
<font color='#000088'>+  struct rtems_mdio_info mdio;
+  uint32_t anlpar;
</font>   rtems_id receive_task;
   rtems_id transmit_task;
   unsigned rx_unit_count;
<font color='#997700'>@@ -1041,6 +1075,80 @@
</font>   (void) rtems_task_delete(RTEMS_SELF);
 }
 
<font color='#000088'>+static void lpc_eth_mdio_wait_for_not_busy(void)
+{
+  while ((lpc_eth->mind & ETH_MIND_BUSY) != 0) {
+    rtems_task_wake_after(2);
+  }
+}
+
+static uint32_t lpc_eth_mdio_read_anlpar(void)
+{
+  uint32_t madr = ETH_MADR_REG(MII_ANLPAR) | ETH_MADR_PHY(DEFAULT_PHY);
+  uint32_t anlpar = 0;
+
+  if (lpc_eth->madr != madr) {
+    lpc_eth->madr = madr;
+  }
+
+  if (lpc_eth->mcmd != ETH_MCMD_READ) {
+    lpc_eth->mcmd = 0;
+    lpc_eth->mcmd = ETH_MCMD_READ;
+  }
+
+  lpc_eth_mdio_wait_for_not_busy();
+
+  anlpar = lpc_eth->mrdd;
+
+  /* Start next read */
+  lpc_eth->mcmd = 0;
+  lpc_eth->mcmd = ETH_MCMD_READ;
+
+  return anlpar;
+}
+
+static int lpc_eth_mdio_read(
+  int phy __attribute__((unused)),
+  void *arg __attribute__((unused)),
+  unsigned reg,
+  uint32_t *val
+)
+{
+  int eno = 0;
+
+  if (phy == -1 || phy == 0) {
+    lpc_eth->madr = ETH_MADR_REG(reg) | ETH_MADR_PHY(DEFAULT_PHY);
+    lpc_eth->mcmd = 0;
+    lpc_eth->mcmd = ETH_MCMD_READ;
+    lpc_eth_mdio_wait_for_not_busy();
+    *val = lpc_eth->mrdd;
+  } else {
+    eno = EINVAL;
+  }
+
+  return eno;
+}
+
+static int lpc_eth_mdio_write(
+  int phy __attribute__((unused)),
+  void *arg __attribute__((unused)),
+  unsigned reg,
+  uint32_t val
+)
+{
+  int eno = 0;
+
+  if (phy == -1 || phy == 0) {
+    lpc_eth->madr = ETH_MADR_REG(reg) | ETH_MADR_PHY(DEFAULT_PHY);
+    lpc_eth->mwtd = val;
+    lpc_eth_mdio_wait_for_not_busy();
+  } else {
+    eno = EINVAL;
+  }
+
+  return eno;
+}
+
</font> static void lpc_eth_interface_init(void *arg)
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
<font color='#997700'>@@ -1060,6 +1168,7 @@
</font>     lpc_eth->mac1 = 0x0;
 
     /* Initialize PHY */
<font color='#000088'>+    lpc_eth->mcfg = ETH_MCFG_CLOCK_SELECT(0x7);
</font>     /* TODO */
 
     /* Reinitialize registers */
<font color='#997700'>@@ -1068,7 +1177,7 @@
</font>     lpc_eth->ipgr = 0x12;
     lpc_eth->clrt = 0x370f;
     lpc_eth->maxf = 0x0600;
<font color='#880000'>-    lpc_eth->supp = 0x0100;
</font><font color='#000088'>+    lpc_eth->supp = ETH_SUPP_SPEED;
</font>     lpc_eth->test = 0;
     #ifdef LPC_ETH_CONFIG_RMII
       lpc_eth->command = 0x0600;
<font color='#997700'>@@ -1140,10 +1249,18 @@
</font>   }
 }
 
<font color='#880000'>-static void lpc_eth_interface_stats(const lpc_eth_driver_entry *e)
</font><font color='#000088'>+static void lpc_eth_interface_stats(lpc_eth_driver_entry *e)
</font> {
<font color='#000088'>+  int media = IFM_MAKEWORD(0, 0, 0, 0);
+  int eno = rtems_mii_ioctl(&e->mdio, e, SIOCGIFMEDIA, &media);
+
</font>   rtems_bsdnet_semaphore_release();
 
<font color='#000088'>+  if (eno == 0) {
+    rtems_ifmedia2str(media, NULL, 0);
+    printf("\n");
+  }
+
</font>   printf("received frames:                     %u\n", e->received_frames);
   printf("receive interrupts:                  %u\n", e->receive_interrupts);
   printf("transmitted frames:                  %u\n", e->transmitted_frames);
<font color='#997700'>@@ -1181,7 +1298,7 @@
</font>   switch (command)  {
     case SIOCGIFMEDIA:
     case SIOCSIFMEDIA:
<font color='#880000'>-      rtems_mii_ioctl(&e->mdio_info, e, (int) command, (int *) data);
</font><font color='#000088'>+      rtems_mii_ioctl(&e->mdio, e, command, (int *) data);
</font>       break;
     case SIOCGIFADDR:
     case SIOCSIFADDR:
<font color='#997700'>@@ -1220,7 +1337,40 @@
</font> 
 static void lpc_eth_interface_watchdog(struct ifnet *ifp __attribute__((unused)))
 {
<font color='#880000'>-  LPC_ETH_PRINTF("%s\n", __func__);
</font><font color='#000088'>+  lpc_eth_driver_entry *e = (lpc_eth_driver_entry *) ifp->if_softc;
+  uint32_t anlpar = lpc_eth_mdio_read_anlpar();
+
+  if (e->anlpar != anlpar) {
+    bool full_duplex = false;
+    bool speed = false;
+
+    e->anlpar = anlpar;
+
+    if ((anlpar & ANLPAR_TX_FD) != 0) {
+      full_duplex = true;
+      speed = true;
+    } else if ((anlpar & ANLPAR_T4) != 0) {
+      speed = true;
+    } else if ((anlpar & ANLPAR_TX) != 0) {
+      speed = true;
+    } else if ((anlpar & ANLPAR_10_FD) != 0) {
+      full_duplex = true;
+    }
+
+    if (full_duplex) {
+      lpc_eth->mac2 |= ETH_MAC2_FULL_DUPLEX;
+    } else {
+      lpc_eth->mac2 &= ~ETH_MAC2_FULL_DUPLEX;
+    }
+
+    if (speed) {
+      lpc_eth->supp |= ETH_SUPP_SPEED;
+    } else {
+      lpc_eth->supp &= ~ETH_SUPP_SPEED;
+    }
+  }
+
+  ifp->if_timer = WATCHDOG_TIMEOUT;
</font> }
 
 static unsigned lpc_eth_fixup_unit_count(int count, int default_value, int max)
<font color='#997700'>@@ -1261,6 +1411,12 @@
</font>     RTEMS_DO_CLEANUP(cleanup, "already attached");
   }
 
<font color='#000088'>+  /* MDIO */
+  e->mdio.mdio_r = lpc_eth_mdio_read;
+  e->mdio.mdio_w = lpc_eth_mdio_write;
+  e->mdio.has_gmii = 0;
+  e->anlpar = 0;
+
</font>   /* Interrupt number */
   config->irno = LPC_ETH_CONFIG_INTERRUPT;
 
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>