<!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 (2011-06-07)</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>2011-06-07 Sebastian Huber <sebastian.huber@embedded-brains.de>

        * clock/clock-config.c: Fixes to pass psnsext01.
        * startup/bspstart.c: Workaround for GCC 4.6 bug.
        * include/smsc9218i.h, network/smsc9218i.c, Makefile.am: Changes
        throughout.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog.diff?r1=text&tr1=1.64&r2=text&tr2=1.65&diff_format=h">M</a></td><td width='1%'>1.65</td><td width='100%'>c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am.diff?r1=text&tr1=1.24&r2=text&tr2=1.25&diff_format=h">M</a></td><td width='1%'>1.25</td><td width='100%'>c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c.diff?r1=text&tr1=1.4&r2=text&tr2=1.5&diff_format=h">M</a></td><td width='1%'>1.5</td><td width='100%'>c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/include/smsc9218i.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/powerpc/mpc55xxevb/include/smsc9218i.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.7&diff_format=h">M</a></td><td width='1%'>1.7</td><td width='100%'>c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c.diff?r1=text&tr1=1.19&r2=text&tr2=1.20&diff_format=h">M</a></td><td width='1%'>1.20</td><td width='100%'>c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog:1.64 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog:1.65
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog:1.64    Fri Feb 11 06:46:36 2011
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog Tue Jun  7 04:14:05 2011
</font><font color='#997700'>@@ -1,3 +1,10 @@
</font><font color='#000088'>+2011-06-07    Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+       * clock/clock-config.c: Fixes to pass psnsext01.
+       * startup/bspstart.c: Workaround for GCC 4.6 bug.
+       * include/smsc9218i.h, network/smsc9218i.c, Makefile.am: Changes
+       throughout.
+
</font> 2011-02-11        Ralf Corsépius <ralf.corsepius@rtems.org>
 
        * network/smsc9218i.c, startup/bspstart.c:

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am:1.24 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am:1.25
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am:1.24  Wed Dec 29 04:54:56 2010
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am       Tue Jun  7 04:14:06 2011
</font><font color='#997700'>@@ -70,10 +70,7 @@
</font> 
 # Network
 if HAS_NETWORKING
<font color='#880000'>-noinst_PROGRAMS += network.rel
-network_rel_SOURCES = network/smsc9218i.c
-network_rel_CPPFLAGS = $(AM_CPPFLAGS) -D__INSIDE_RTEMS_BSD_TCPIP_STACK__ -D__BSD_VISIBLE
-network_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
</font><font color='#000088'>+libbsp_a_SOURCES += network/smsc9218i.c
</font> endif
 
 # BSP library
<font color='#997700'>@@ -91,9 +88,6 @@
</font>     ../../../libcpu/@RTEMS_CPU@/@exceptions@/rtems-cpu.rel \
     ../../../libcpu/@RTEMS_CPU@/@exceptions@/exc_bspsupport.rel \
     ../../../libcpu/@RTEMS_CPU@/@RTEMS_CPU_MODEL@/timer.rel
<font color='#880000'>-if HAS_NETWORKING
-libbsp_a_LIBADD += network.rel
-endif
</font> 
 include $(srcdir)/preinstall.am
 include $(top_srcdir)/../../../../automake/local.am

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c:1.4 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c:1.5
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c:1.4  Wed Apr  7 01:44:41 2010
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/clock/clock-config.c      Tue Jun  7 04:14:06 2011
</font><font color='#997700'>@@ -43,7 +43,9 @@
</font>     EMIOS.CH [MPC55XX_CLOCK_EMIOS_CHANNEL].CSR.R = csr.R; \
  } while (0)
 
<font color='#880000'>-static void mpc55xx_clock_handler_install( rtems_isr_entry isr,<span style="background-color: #FF0000"> </span>
</font><font color='#000088'>+static uint64_t mpc55xx_clock_factor;
+
+static void mpc55xx_clock_handler_install( rtems_isr_entry isr,
</font>                                      rtems_isr_entry *old_isr)
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
<font color='#997700'>@@ -69,6 +71,8 @@
</font>   uint64_t interval = ((uint64_t) bsp_clock_speed
     * (uint64_t) rtems_configuration_get_microseconds_per_tick()) / 1000000;
 
<font color='#000088'>+  mpc55xx_clock_factor = (1000000000ULL << 32) / bsp_clock_speed;
+
</font>   /* Apply prescaler */
   if (prescaler > 0) {
     interval /= (uint64_t) prescaler;
<font color='#997700'>@@ -131,11 +135,16 @@
</font> 
 static uint32_t mpc55xx_clock_nanoseconds_since_last_tick( void)
 {
<font color='#880000'>-  uint64_t clicks = EMIOS.CH [MPC55XX_CLOCK_EMIOS_CHANNEL].CCNTR.R;
-  uint64_t clock = bsp_clock_speed;
-  uint64_t ns = (clicks * 1000000000) / clock;
</font><font color='#000088'>+  volatile struct EMIOS_CH_tag *regs = &EMIOS.CH [MPC55XX_CLOCK_EMIOS_CHANNEL];
+  uint64_t c = regs->CCNTR.R;
+  union EMIOS_CSR_tag csr = { .R = regs->CSR.R };
+  uint64_t k = mpc55xx_clock_factor;
+
+  if (csr.B.FLAG != 0) {
+    c = regs->CCNTR.R + regs->CADR.R + 1;
+  }
</font> 
<font color='#880000'>-  return (uint32_t) ns;
</font><font color='#000088'>+  return (uint32_t) ((c * k) >> 32);
</font> }
 
 #define Clock_driver_support_initialize_hardware() mpc55xx_clock_initialize()

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/include/smsc9218i.h:1.2 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/include/smsc9218i.h:1.3
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/include/smsc9218i.h:1.2   Sun Nov 29 22:26:50 2009
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/include/smsc9218i.h       Tue Jun  7 04:14:06 2011
</font><font color='#997700'>@@ -189,62 +189,32 @@
</font> /** @} */
 
 /**
<font color='#880000'>- * @name Interrupt Status
</font><font color='#000088'>+ * @name Interrupt Enable and Status
</font>  * @{
  */
 
<font color='#880000'>-#define SMSC9218I_INT_STS_SW SMSC9218I_FLAG(31)
-#define SMSC9218I_INT_STS_TXSTOP SMSC9218I_FLAG(25)
-#define SMSC9218I_INT_STS_RXSTOP SMSC9218I_FLAG(24)
-#define SMSC9218I_INT_STS_RXDFH SMSC9218I_FLAG(23)
-#define SMSC9218I_INT_STS_TIOC SMSC9218I_FLAG(21)
-#define SMSC9218I_INT_STS_RXD SMSC9218I_FLAG(20)
-#define SMSC9218I_INT_STS_GPT SMSC9218I_FLAG(19)
-#define SMSC9218I_INT_STS_PHY SMSC9218I_FLAG(18)
-#define SMSC9218I_INT_STS_PME SMSC9218I_FLAG(17)
-#define SMSC9218I_INT_STS_TXSO SMSC9218I_FLAG(16)
-#define SMSC9218I_INT_STS_RWT SMSC9218I_FLAG(15)
-#define SMSC9218I_INT_STS_RXE SMSC9218I_FLAG(14)
-#define SMSC9218I_INT_STS_TXE SMSC9218I_FLAG(13)
-#define SMSC9218I_INT_STS_TDFO SMSC9218I_FLAG(10)
-#define SMSC9218I_INT_STS_TDFA SMSC9218I_FLAG(9)
-#define SMSC9218I_INT_STS_TSFF SMSC9218I_FLAG(8)
-#define SMSC9218I_INT_STS_TSFL SMSC9218I_FLAG(7)
-#define SMSC9218I_INT_STS_RSFF SMSC9218I_FLAG(4)
-#define SMSC9218I_INT_STS_RSFL SMSC9218I_FLAG(3)
-#define SMSC9218I_INT_STS_GPIO2 SMSC9218I_FLAG(2)
-#define SMSC9218I_INT_STS_GPIO1 SMSC9218I_FLAG(1)
-#define SMSC9218I_INT_STS_GPIO0 SMSC9218I_FLAG(0)
-
-/** @} */
-
-/**
- * @name Interrupt Enable
- * @{
- */
-
-#define SMSC9218I_INT_EN_SW SMSC9218I_FLAG(31)
-#define SMSC9218I_INT_EN_TXSTOP SMSC9218I_FLAG(25)
-#define SMSC9218I_INT_EN_RXSTOP SMSC9218I_FLAG(24)
-#define SMSC9218I_INT_EN_RXDFH SMSC9218I_FLAG(23)
-#define SMSC9218I_INT_EN_TIOC SMSC9218I_FLAG(21)
-#define SMSC9218I_INT_EN_RXD SMSC9218I_FLAG(20)
-#define SMSC9218I_INT_EN_GPT SMSC9218I_FLAG(19)
-#define SMSC9218I_INT_EN_PHY SMSC9218I_FLAG(18)
-#define SMSC9218I_INT_EN_PME SMSC9218I_FLAG(17)
-#define SMSC9218I_INT_EN_TXSO SMSC9218I_FLAG(16)
-#define SMSC9218I_INT_EN_RWT SMSC9218I_FLAG(15)
-#define SMSC9218I_INT_EN_RXE SMSC9218I_FLAG(14)
-#define SMSC9218I_INT_EN_TXE SMSC9218I_FLAG(13)
-#define SMSC9218I_INT_EN_TDFO SMSC9218I_FLAG(10)
-#define SMSC9218I_INT_EN_TDFA SMSC9218I_FLAG(9)
-#define SMSC9218I_INT_EN_TSFF SMSC9218I_FLAG(8)
-#define SMSC9218I_INT_EN_TSFL SMSC9218I_FLAG(7)
-#define SMSC9218I_INT_EN_RSFF SMSC9218I_FLAG(4)
-#define SMSC9218I_INT_EN_RSFL SMSC9218I_FLAG(3)
-#define SMSC9218I_INT_EN_GPIO2 SMSC9218I_FLAG(2)
-#define SMSC9218I_INT_EN_GPIO1 SMSC9218I_FLAG(1)
-#define SMSC9218I_INT_EN_GPIO0 SMSC9218I_FLAG(0)
</font><font color='#000088'>+#define SMSC9218I_INT_SW SMSC9218I_FLAG(31)
+#define SMSC9218I_INT_TXSTOP SMSC9218I_FLAG(25)
+#define SMSC9218I_INT_RXSTOP SMSC9218I_FLAG(24)
+#define SMSC9218I_INT_RXDFH SMSC9218I_FLAG(23)
+#define SMSC9218I_INT_TIOC SMSC9218I_FLAG(21)
+#define SMSC9218I_INT_RXD SMSC9218I_FLAG(20)
+#define SMSC9218I_INT_GPT SMSC9218I_FLAG(19)
+#define SMSC9218I_INT_PHY SMSC9218I_FLAG(18)
+#define SMSC9218I_INT_PME SMSC9218I_FLAG(17)
+#define SMSC9218I_INT_TXSO SMSC9218I_FLAG(16)
+#define SMSC9218I_INT_RWT SMSC9218I_FLAG(15)
+#define SMSC9218I_INT_RXE SMSC9218I_FLAG(14)
+#define SMSC9218I_INT_TXE SMSC9218I_FLAG(13)
+#define SMSC9218I_INT_TDFO SMSC9218I_FLAG(10)
+#define SMSC9218I_INT_TDFA SMSC9218I_FLAG(9)
+#define SMSC9218I_INT_TSFF SMSC9218I_FLAG(8)
+#define SMSC9218I_INT_TSFL SMSC9218I_FLAG(7)
+#define SMSC9218I_INT_RSFF SMSC9218I_FLAG(4)
+#define SMSC9218I_INT_RSFL SMSC9218I_FLAG(3)
+#define SMSC9218I_INT_GPIO2 SMSC9218I_FLAG(2)
+#define SMSC9218I_INT_GPIO1 SMSC9218I_FLAG(1)
+#define SMSC9218I_INT_GPIO0 SMSC9218I_FLAG(0)
</font> 
 /** @} */
 
<font color='#997700'>@@ -439,6 +409,15 @@
</font> /** @} */
 
 /**
<font color='#000088'>+ * @name EEPROM Command Register
+ * @{
+ */
+
+#define SMSC9218I_E2P_CMD_EPC_BUSY SMSC9218I_FLAG(31)
+
+/** @} */
+
+/**
</font>  * @name MAC Control and Status Synchronizer Command
  * @{
  */
<font color='#997700'>@@ -599,51 +578,11 @@
</font> /** @} */
 
 /**
<font color='#880000'>- * @name Basic Control
- * @{
- */
-
-#define SMSC9218I_PHY_BCR 0x00000000U
-#define SMSC9218I_PHY_BCR_RST 0x00008000U
-#define SMSC9218I_PHY_BCR_LOOPBK 0x00004000U
-#define SMSC9218I_PHY_BCR_SS 0x00002000U
-#define SMSC9218I_PHY_BCR_ANE 0x00001000U
-#define SMSC9218I_PHY_BCR_PWRDN 0x00000800U
-#define SMSC9218I_PHY_BCR_RSTAN 0x00000200U
-#define SMSC9218I_PHY_BCR_FDPLX 0x00000100U
-#define SMSC9218I_PHY_BCR_COLLTST 0x00000080U
-
-/** @} */
-
-/**
- * @name Basic Status
- * @{
- */
-
-#define SMSC9218I_PHY_BSR 0x00000001U
-#define SMSC9218I_PHY_BSR_100_T4_ABLE 0x00008000U
-#define SMSC9218I_PHY_BSR_100_TX_FDPLX 0x00004000U
-#define SMSC9218I_PHY_BSR_100_TX_HDPLX 0x00002000U
-#define SMSC9218I_PHY_BSR_10_FDPLX 0x00001000U
-#define SMSC9218I_PHY_BSR_10_HDPLX 0x00000800U
-#define SMSC9218I_PHY_BSR_ANC 0x00000020U
-#define SMSC9218I_PHY_BSR_REM_FAULT 0x00000010U
-#define SMSC9218I_PHY_BSR_AN_ABLE 0x00000008U
-#define SMSC9218I_PHY_BSR_LINK_STATUS 0x00000004U
-#define SMSC9218I_PHY_BSR_JAB_DET 0x00000002U
-#define SMSC9218I_PHY_BSR_EXT_CAP 0x00000001U
-
-/** @} */
-
-/**
</font>  * @name PHY Identifier 1
  * @{
  */
 
<font color='#880000'>-#define SMSC9218I_PHY_ID1 0x00000002U
-#define SMSC9218I_PHY_ID1_MASK 0x0000ffffU
-#define SMSC9218I_PHY_ID1_LAN9118 0x00000007U
-#define SMSC9218I_PHY_ID1_LAN9218 (PHY_ID1_LAN9118)
</font><font color='#000088'>+#define SMSC9218I_PHY_ID1_LAN9118 0x7
</font> 
 /** @} */
 
<font color='#997700'>@@ -652,65 +591,7 @@
</font>  * @{
  */
 
<font color='#880000'>-#define SMSC9218I_PHY_ID2 0x00000003U
-#define SMSC9218I_PHY_ID2_MASK 0x0000ffffU
-#define SMSC9218I_PHY_ID2_MODEL_MASK 0x000003f0U
-#define SMSC9218I_PHY_ID2_REV_MASK 0x0000000fU
-#define SMSC9218I_PHY_ID2_LAN9118 0x0000c0d1U
-#define SMSC9218I_PHY_ID2_LAN9218 0x0000c0c3U
-
-/** @} */
-
-/**
- * @name Auto-negotiation Advertisment
- * @{
- */
-
-#define SMSC9218I_PHY_ANAR 0x00000004U
-#define SMSC9218I_PHY_ANAR_NXTPG_CAP 0x00008000U
-#define SMSC9218I_PHY_ANAR_REM_FAULT 0x00002000U
-#define SMSC9218I_PHY_ANAR_PAUSE_OP_MASK 0x00000c00U
-#define SMSC9218I_PHY_ANAR_PAUSE_OP_NONE 0x00000000U
-#define SMSC9218I_PHY_ANAR_PAUSE_OP_ASLP 0x00000400U
-#define SMSC9218I_PHY_ANAR_PAUSE_OP_SLP 0x00000800U
-#define SMSC9218I_PHY_ANAR_PAUSE_OP_BOTH 0x00000c00U
-#define SMSC9218I_PHY_ANAR_100_T4_ABLE 0x00000200U
-#define SMSC9218I_PHY_ANAR_100_TX_FDPLX 0x00000100U
-#define SMSC9218I_PHY_ANAR_100_TX_ABLE 0x00000080U
-#define SMSC9218I_PHY_ANAR_10_FDPLX 0x00000040U
-#define SMSC9218I_PHY_ANAR_10_ABLE 0x00000020U
-
-/** @} */
-
-/**
- * @name Auto-negotiation Link Partner Ability
- * @{
- */
-
-#define SMSC9218I_PHY_ANLPAR 0x00000005U
-#define SMSC9218I_PHY_ANLPAR_NXTPG_CAP 0x00008000U
-#define SMSC9218I_PHY_ANLPAR_ACK 0x00004000U
-#define SMSC9218I_PHY_ANLPAR_REM_FAULT 0x00002000U
-#define SMSC9218I_PHY_ANLPAR_PAUSE_CAP 0x00000400U
-#define SMSC9218I_PHY_ANLPAR_100_T4_ABLE 0x00000200U
-#define SMSC9218I_PHY_ANLPAR_100_TX_FDPLX 0x00000100U
-#define SMSC9218I_PHY_ANLPAR_100_TX_ABLE 0x00000080U
-#define SMSC9218I_PHY_ANLPAR_10_FDPLX 0x00000040U
-#define SMSC9218I_PHY_ANLPAR_10_ABLE 0x00000020U
-
-/** @} */
-
-/**
- * @name Auto-negotiation Expansion
- * @{
- */
-
-#define SMSC9218I_PHY_ANEXPR 0x00000006U
-#define SMSC9218I_PHY_ANEXPR_PARDET_FAULT 0x00000010U
-#define SMSC9218I_PHY_ANEXPR_LP_NXTPG_CAP 0x00000008U
-#define SMSC9218I_PHY_ANEXPR_NXTPG_CAP 0x00000004U
-#define SMSC9218I_PHY_ANEXPR_NEWPG_REC 0x00000002U
-#define SMSC9218I_PHY_ANEXPR_LP_AN_ABLE 0x00000001U
</font><font color='#000088'>+#define SMSC9218I_PHY_ID2_LAN9218 0xc0c3
</font> 
 /** @} */
 

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c:1.6 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c:1.7
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c:1.6   Fri Feb 11 06:46:36 2011
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c       Tue Jun  7 04:14:06 2011
</font><font color='#997700'>@@ -7,18 +7,24 @@
</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-2011 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='#000088'>+ *
+ * $Id$
</font>  */
 
<font color='#000088'>+#define __INSIDE_RTEMS_BSD_TCPIP_STACK__ 1
+#define __BSD_VISIBLE 1
+
</font> #include <mpc55xx/regs.h>
 
 #include <errno.h>
<font color='#997700'>@@ -76,7 +82,7 @@
</font> /* Adjust by two bytes for proper IP header alignment */
 #define SMSC9218I_RX_DATA_OFFSET 2
 
<font color='#880000'>-#define SMSC9218I_TX_JOBS 16U
</font><font color='#000088'>+#define SMSC9218I_TX_JOBS 128U
</font> 
 #define SMSC9218I_TX_JOBS_MAX (SMSC9218I_TX_JOBS - 1U)
 
<font color='#997700'>@@ -88,13 +94,13 @@
</font> 
 #define SMSC9218I_IRQ_CFG_GLOBAL_DISABLE SMSC9218I_IRQ_CFG_IRQ_TYPE
 
<font color='#880000'>-#define SMSC9218I_EDMA_RX_CHANNEL 48
</font><font color='#000088'>+#define SMSC9218I_EDMA_RX_CHANNEL 49
</font> 
 #define SMSC9218I_EDMA_RX_TCD_CDF 0x10004
 
 #define SMSC9218I_EDMA_RX_TCD_BMF 0x10003
 
<font color='#880000'>-#define SMSC9218I_EDMA_TX_CHANNEL 49
</font><font color='#000088'>+#define SMSC9218I_EDMA_TX_CHANNEL 48
</font> 
 #define SMSC9218I_EDMA_TX_TCD_BMF_LINK 0x10011
 
<font color='#997700'>@@ -102,6 +108,12 @@
</font> 
 #define SMSC9218I_EDMA_TX_TCD_BMF_CLEAR 0x10000
 
<font color='#000088'>+#define SMSC9218I_ERROR_INTERRUPTS \
+  (SMSC9218I_INT_TXSO \
+     | SMSC9218I_INT_RWT \
+     | SMSC9218I_INT_RXE \
+     | SMSC9218I_INT_TXE)
+
</font> #ifdef DEBUG
   #define SMSC9218I_PRINTF(...) printf(__VA_ARGS__)
   #define SMSC9218I_PRINTK(...) printk(__VA_ARGS__)
<font color='#997700'>@@ -119,7 +131,7 @@
</font> 
 typedef struct {
   struct arpcom arpcom;
<font color='#880000'>-  struct rtems_mdio_info mdio_info;
</font><font color='#000088'>+  struct rtems_mdio_info mdio;
</font>   smsc9218i_state state;
   rtems_id receive_task;
   rtems_id transmit_task;
<font color='#997700'>@@ -129,11 +141,16 @@
</font>   unsigned receive_interrupts;
   unsigned transmitted_frames;
   unsigned transmit_interrupts;
<font color='#000088'>+  unsigned receiver_errors;
</font>   unsigned receive_too_long_errors;
   unsigned receive_collision_errors;
   unsigned receive_crc_errors;
   unsigned receive_edma_errors;
<font color='#880000'>-  unsigned transmit_errors;
</font><font color='#000088'>+  unsigned receive_drop;
+  unsigned receive_watchdog_timeouts;
+  unsigned transmitter_errors;
+  unsigned transmit_status_overflows;
+  unsigned transmit_frame_errors;
</font>   unsigned transmit_edma_errors;
 } smsc9218i_driver_entry;
 
<font color='#997700'>@@ -160,6 +177,8 @@
</font>   uint32_t command_b;
   uint16_t tag;
   bool done;
<font color='#000088'>+  unsigned fixme_tiny_fragments;
+  unsigned fixme_too_many;
</font> } smsc9218i_transmit_job_control;
 
 static void smsc9218i_edma_done(
<font color='#997700'>@@ -390,13 +409,13 @@
</font>   printf("mac: wuff: 0x%08" PRIx32 "\n", smsc9218i_mac_read(regs, SMSC9218I_MAC_WUFF));
   printf("mac: wucsr: 0x%08" PRIx32 "\n", smsc9218i_mac_read(regs, SMSC9218I_MAC_WUCSR));
 
<font color='#880000'>-  printf("phy: bcr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_BCR));
-  printf("phy: bsr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_BSR));
-  printf("phy: id1: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_ID1));
-  printf("phy: id2: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_ID2));
-  printf("phy: anar: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_ANAR));
-  printf("phy: anlpar: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_ANLPAR));
-  printf("phy: anexpr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_ANEXPR));
</font><font color='#000088'>+  printf("phy: bcr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_BMCR));
+  printf("phy: bsr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_BMSR));
+  printf("phy: id1: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_PHYIDR1));
+  printf("phy: id2: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_PHYIDR2));
+  printf("phy: anar: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_ANAR));
+  printf("phy: anlpar: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_ANLPAR));
+  printf("phy: anexpr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, MII_ANER));
</font>   printf("phy: mcsr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_MCSR));
   printf("phy: spmodes: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_SPMODES));
   printf("phy: cisr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_CSIR));
<font color='#997700'>@@ -435,15 +454,31 @@
</font>   /* Clear interrupts */
   regs->int_sts = int_sts;
 
<font color='#000088'>+  /* Error interrupts */
+  if ((int_sts & SMSC9218I_ERROR_INTERRUPTS) != 0) {
+    if ((int_sts & SMSC9218I_INT_TXSO) != 0) {
+      ++e->transmit_status_overflows;
+    }
+    if ((int_sts & SMSC9218I_INT_RWT) != 0) {
+      ++e->receive_watchdog_timeouts;
+    }
+    if ((int_sts & SMSC9218I_INT_RXE) != 0) {
+      ++e->receiver_errors;
+    }
+    if ((int_sts & SMSC9218I_INT_TXE) != 0) {
+      ++e->transmitter_errors;
+    }
+  }
+
</font>   /* Check receive interrupts */
<font color='#880000'>-  if ((int_sts & SMSC9218I_INT_STS_RSFL) != 0) {
-    int_en &= ~SMSC9218I_INT_EN_RSFL;
</font><font color='#000088'>+  if ((int_sts & SMSC9218I_INT_RSFL) != 0) {
+    int_en &= ~SMSC9218I_INT_RSFL;
</font>     re = SMSC9218I_EVENT_RX;
   }
 
   /* Check PHY interrupts */
<font color='#880000'>-  if ((int_sts & SMSC9218I_INT_STS_PHY) != 0) {
-    int_en &= ~SMSC9218I_INT_EN_PHY;
</font><font color='#000088'>+  if ((int_sts & SMSC9218I_INT_PHY) != 0) {
+    int_en &= ~SMSC9218I_INT_PHY;
</font>     re |= SMSC9218I_EVENT_PHY;
   }
 
<font color='#997700'>@@ -455,8 +490,8 @@
</font>   }
 
   /* Check transmit interrupts */
<font color='#880000'>-  if ((int_sts & SMSC9218I_INT_STS_TDFA) != 0) {
-    int_en &= ~SMSC9218I_INT_EN_TDFA;
</font><font color='#000088'>+  if ((int_sts & SMSC9218I_INT_TDFA) != 0) {
+    int_en &= ~SMSC9218I_INT_TDFA;
</font>     te = SMSC9218I_EVENT_TX;
   }
 
<font color='#997700'>@@ -481,7 +516,7 @@
</font>   rtems_interrupt_level level;
 
   rtems_interrupt_disable(level);
<font color='#880000'>-  regs->int_en |= SMSC9218I_INT_EN_RSFL;
</font><font color='#000088'>+  regs->int_en |= SMSC9218I_INT_RSFL;
</font>   rtems_interrupt_enable(level);
 }
 
<font color='#997700'>@@ -492,7 +527,7 @@
</font>   rtems_interrupt_level level;
 
   rtems_interrupt_disable(level);
<font color='#880000'>-  regs->int_en |= SMSC9218I_INT_EN_TDFA;
</font><font color='#000088'>+  regs->int_en |= SMSC9218I_INT_TDFA;
</font>   rtems_interrupt_enable(level);
 }
 
<font color='#997700'>@@ -503,29 +538,56 @@
</font>   rtems_interrupt_level level;
 
   rtems_interrupt_disable(level);
<font color='#880000'>-  regs->int_en |= SMSC9218I_INT_EN_PHY;
</font><font color='#000088'>+  regs->int_en |= SMSC9218I_INT_PHY;
</font>   rtems_interrupt_enable(level);
 }
 
<font color='#880000'>-static struct mbuf *smsc9218i_new_mbuf(struct ifnet *ifp, bool wait)
</font><font color='#000088'>+static void smsc9218i_phy_clear_interrupts(
+  volatile smsc9218i_registers *regs
+)
+{
+  smsc9218i_phy_read(regs, SMSC9218I_PHY_ISR);
+}
+
+static bool smsc9218i_media_status(smsc9218i_driver_entry *e, int *media)
</font> {
<font color='#880000'>-  struct mbuf *m = NULL;
-  int mw = wait ? M_WAIT : M_DONTWAIT;
</font><font color='#000088'>+  struct ifnet *ifp = &e->arpcom.ac_if;
</font> 
<font color='#880000'>-  MGETHDR(m, mw, MT_DATA);
-  if (m != NULL) {
-    MCLGET(m, mw);
-    if ((m->m_flags & M_EXT) != 0) {
-      /* Set receive interface */
-      m->m_pkthdr.rcvif = ifp;
</font><font color='#000088'>+  *media = IFM_MAKEWORD(0, 0, 0, SMSC9218I_MAC_MII_ACC_PHY_DEFAULT);
</font> 
<font color='#880000'>-      return m;
-    } else {
-      m_freem(m);
-    }
</font><font color='#000088'>+  return (*ifp->if_ioctl)(ifp, SIOCGIFMEDIA, (caddr_t) media) == 0;
+}
+
+static void smsc9218i_media_status_change(
+  smsc9218i_driver_entry *e,
+  volatile smsc9218i_registers *regs
+)
+{
+  int media = 0;
+  bool media_ok = false;
+  uint32_t mac_cr = 0;
+
+  smsc9218i_phy_clear_interrupts(regs);
+  smsc9218i_enable_phy_interrupts(regs);
+
+  media_ok = smsc9218i_media_status(e, &media);
+  mac_cr = smsc9218i_mac_read(regs, SMSC9218I_MAC_CR);
+  if (media_ok && (IFM_OPTIONS(media) & IFM_FDX) == 0) {
+    mac_cr &= ~SMSC9218I_MAC_CR_FDPX;
+  } else {
+    mac_cr |= SMSC9218I_MAC_CR_FDPX;
</font>   }
<font color='#000088'>+  smsc9218i_mac_write(regs, SMSC9218I_MAC_CR, mac_cr);
+}
</font> 
<font color='#880000'>-  return NULL;
</font><font color='#000088'>+static struct mbuf *smsc9218i_new_mbuf(struct ifnet *ifp)
+{
+  struct mbuf *m = m_gethdr(M_WAIT, MT_DATA);
+
+  m->m_pkthdr.rcvif = ifp;
+  MCLGET(m, M_WAIT);
+
+  return m;
</font> }
 
 static void smsc9218i_receive_task(void *arg)
<font color='#997700'>@@ -592,13 +654,7 @@
</font>     RTEMS_CLEANUP_SC(sc, cleanup, "wait for events");
 
     if ((events & SMSC9218I_EVENT_PHY) != 0) {
<font color='#880000'>-      uint32_t phy_isr = smsc9218i_phy_read(regs, SMSC9218I_PHY_ISR);
-
-      /* TODO */
-
-      printf("rx: PHY event: 0x%08" PRIx32 "\n", phy_isr);
-
-      smsc9218i_enable_phy_interrupts(regs);
</font><font color='#000088'>+      smsc9218i_media_status_change(e, regs);
</font>     }
 
     rx_fifo_inf = regs->rx_fifo_inf;
<font color='#997700'>@@ -631,7 +687,7 @@
</font>       );
 
       if ((rx_fifo_status & SMSC9218I_RX_STS_ERROR) == 0) {
<font color='#880000'>-        struct mbuf *m = smsc9218i_new_mbuf(ifp, true);
</font><font color='#000088'>+        struct mbuf *m = smsc9218i_new_mbuf(ifp);
</font>         struct ether_header *eh = (struct ether_header *)
           (mtod(m, char *) + SMSC9218I_RX_DATA_OFFSET);
         int mbuf_length = (int) frame_length - ETHER_HDR_LEN - ETHER_CRC_LEN;
<font color='#997700'>@@ -706,7 +762,7 @@
</font>       }
 
       /* Clear FIFO level status */
<font color='#880000'>-      regs->int_sts = SMSC9218I_INT_STS_RSFL;
</font><font color='#000088'>+      regs->int_sts = SMSC9218I_INT_RSFL;
</font> 
       /* Next FIFO status */
       rx_fifo_inf = regs->rx_fifo_inf;
<font color='#997700'>@@ -821,7 +877,7 @@
</font>           frame_length += (uint32_t) len;
 
           if (len < 4) {
<font color='#880000'>-            printf("FIXME\n");
</font><font color='#000088'>+            ++jc->fixme_tiny_fragments;
</font>           }
 
           /* Next fragment */
<font color='#997700'>@@ -841,7 +897,7 @@
</font>       } while (n != NULL);
 
       if (fragments > SMSC9218I_TX_FRAGMENT_MAX) {
<font color='#880000'>-        printf("FIXME\n");
</font><font color='#000088'>+        ++jc->fixme_too_many;
</font>       }
 
       /* Set frame length */
<font color='#997700'>@@ -920,8 +976,6 @@
</font>           data_length
         );
 
<font color='#880000'>-        __asm__ volatile ( "sync");
-
</font>         /* Remember fragement */
         jc->fragment_table [c] = m;
 
<font color='#997700'>@@ -989,7 +1043,7 @@
</font> 
     for (i = 0; i < n; ++i) {
       struct tcd_t *tcd = &jc->data_tcd_table [c];
<font color='#880000'>-      uint32_t data_length = tcd->NBYTES;
</font><font color='#000088'>+      uint32_t data_length = tcd->NBYTES + 14;
</font> 
       if (data_length <= data_free) {
         /* Reduce free FIFO space */
<font color='#997700'>@@ -1042,6 +1096,7 @@
</font> 
       /* Cache flush for last data TCD */
       rtems_cache_flush_multiple_data_lines(last, sizeof(*last));
<font color='#000088'>+      ppc_synchronize_data();
</font> 
       /* Start eDMA transfer */
       channel->SADDR = start->SADDR;
<font color='#997700'>@@ -1088,7 +1143,7 @@
</font>     if ((tx_fifo_status & SMSC9218I_TX_STS_ERROR) == 0) {
       ++e->transmitted_frames;
     } else {
<font color='#880000'>-      ++e->transmit_errors;
</font><font color='#000088'>+      ++e->transmit_frame_errors;
</font>     }
 
     SMSC9218I_PRINTF(
<font color='#997700'>@@ -1296,6 +1351,13 @@
</font> }
 #endif
 
<font color='#000088'>+static void smsc9218i_wait_for_eeprom_access(volatile smsc9218i_registers *regs)
+{
+  while ((regs->e2p_cmd & SMSC9218I_E2P_CMD_EPC_BUSY) != 0) {
+    /* Wait */
+  }
+}
+
</font> static void smsc9218i_set_mac_address(
   volatile smsc9218i_registers *regs,
   unsigned char address [6]
<font color='#997700'>@@ -1314,6 +1376,7 @@
</font>   );
 }
 
<font color='#000088'>+#if defined(DEBUG)
</font> static void smsc9218i_mac_address_dump(volatile smsc9218i_registers *regs)
 {
   uint32_t low = smsc9218i_mac_read(regs, SMSC9218I_MAC_ADDRL);
<font color='#997700'>@@ -1330,6 +1393,7 @@
</font>     (high >> 8) & 0xff
   );
 }
<font color='#000088'>+#endif
</font> 
 static void smsc9218i_interrupt_init(
   smsc9218i_driver_entry *e,
<font color='#997700'>@@ -1415,6 +1479,9 @@
</font> 
   /* Enable interrupts and use push-pull driver (active low) */
   regs->irq_cfg = SMSC9218I_IRQ_CFG_GLOBAL_ENABLE;
<font color='#000088'>+
+  /* Enable error interrupts */
+  regs->int_en = SMSC9218I_ERROR_INTERRUPTS;
</font> }
 
 static void smsc9218i_reset_signal(bool signal)
<font color='#997700'>@@ -1441,6 +1508,18 @@
</font>   SIU.PCR [186].R = pcr.R;
 }
 
<font color='#000088'>+static void smsc9218i_hardware_reset(volatile smsc9218i_registers *regs)
+{
+  smsc9218i_reset_signal_init();
+  smsc9218i_reset_signal(false);
+  rtems_bsp_delay(200);
+  smsc9218i_reset_signal(true);
+
+  while ((regs->pmt_ctrl & SMSC9218I_PMT_CTRL_READY) == 0) {
+    /* Wait */
+  }
+}
+
</font> static void smsc9218i_interface_init(void *arg)
 {
   smsc9218i_driver_entry *e = (smsc9218i_driver_entry *) arg;
<font color='#997700'>@@ -1450,11 +1529,7 @@
</font>   SMSC9218I_PRINTF("%s\n", __func__);
 
   if (e->state == SMSC9218I_CONFIGURED) {
<font color='#880000'>-    /* Hardware reset */
-    smsc9218i_reset_signal_init();
-    smsc9218i_reset_signal(false);
-    rtems_bsp_delay(200);
-    smsc9218i_reset_signal(true);
</font><font color='#000088'>+    smsc9218i_hardware_reset(regs);
</font> 
 #if defined(DEBUG)
     /* Register dump */
<font color='#997700'>@@ -1465,8 +1540,18 @@
</font>     regs->hw_cfg = SMSC9218I_HW_CFG_MBO | SMSC9218I_HW_CFG_TX_FIF_SZ(5);
 
     /* MAC address */
<font color='#000088'>+    smsc9218i_wait_for_eeprom_access(regs);
</font>     smsc9218i_set_mac_address(regs, e->arpcom.ac_enaddr);
<font color='#000088'>+#if defined(DEBUG)
</font>     smsc9218i_mac_address_dump(regs);
<font color='#000088'>+#endif
+
+    /* Auto-negotiation advertisment */
+    smsc9218i_phy_write(
+      regs,
+      MII_ANAR,
+      ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10 | ANAR_CSMA
+    );
</font> 
     /* Initialize interrupts */
     smsc9218i_interrupt_init(e, regs);
<font color='#997700'>@@ -1477,6 +1562,9 @@
</font>     /* Set FIFO interrupts */
     regs->fifo_int = SMSC9218I_FIFO_INT_TDAL(32);
 
<font color='#000088'>+    /* Clear receive drop counter */
+    regs->rx_drop;
+
</font>     /* Start receive task */
     if (e->receive_task == RTEMS_ID_NONE) {
       e->receive_task = rtems_bsdnet_newproc(
<font color='#997700'>@@ -1519,18 +1607,67 @@
</font>   }
 }
 
<font color='#880000'>-static void smsc9218i_interface_stats(const smsc9218i_driver_entry *e)
</font><font color='#000088'>+static int smsc9218i_mdio_read(
+  int phy,
+  void *arg,
+  unsigned phy_reg,
+  uint32_t *val
+)
</font> {
<font color='#880000'>-  printf("received frames:          %u\n", e->received_frames);
-  printf("receive interrupts:       %u\n", e->receive_interrupts);
-  printf("transmitted frames:       %u\n", e->transmitted_frames);
-  printf("transmit interrupts:      %u\n", e->transmit_interrupts);
-  printf("receive to long errors:   %u\n", e->receive_too_long_errors);
-  printf("receive collision errors: %u\n", e->receive_collision_errors);
-  printf("receive CRC errors:       %u\n", e->receive_crc_errors);
-  printf("receive eDMA errors:      %u\n", e->receive_edma_errors);
-  printf("transmit errors:          %u\n", e->transmit_errors);
-  printf("transmit eDMA errors:     %u\n", e->transmit_edma_errors);
</font><font color='#000088'>+  volatile smsc9218i_registers *const regs = smsc9218i;
+
+  *val = smsc9218i_phy_read(regs, phy_reg);
+
+  return 0;
+}
+
+static int smsc9218i_mdio_write(
+  int phy,
+  void *arg,
+  unsigned phy_reg,
+  uint32_t data
+)
+{
+  volatile smsc9218i_registers *const regs = smsc9218i;
+
+  smsc9218i_phy_write(regs, phy_reg, data);
+
+  return 0;
+}
+
+static void smsc9218i_interface_stats(smsc9218i_driver_entry *e)
+{
+  volatile smsc9218i_registers *const regs = smsc9218i;
+  smsc9218i_transmit_job_control *jc = &smsc_jc;
+  int media = 0;
+  bool media_ok = smsc9218i_media_status(e, &media);
+
+  if (media_ok) {
+    rtems_ifmedia2str(media, NULL, 0);
+    printf ("\n");
+  } else {
+    printf ("PHY communication error\n");
+  }
+
+  e->receive_drop += SMSC9218I_SWAP(regs->rx_drop);
+
+  printf("received frames:           %u\n", e->received_frames);
+  printf("receive interrupts:        %u\n", e->receive_interrupts);
+  printf("transmitted frames:        %u\n", e->transmitted_frames);
+  printf("transmit interrupts:       %u\n", e->transmit_interrupts);
+  printf("receiver errors:           %u\n", e->receiver_errors);
+  printf("receive to long errors:    %u\n", e->receive_too_long_errors);
+  printf("receive collision errors:  %u\n", e->receive_collision_errors);
+  printf("receive CRC errors:        %u\n", e->receive_crc_errors);
+  printf("receive eDMA errors:       %u\n", e->receive_edma_errors);
+  printf("receive drops:             %u\n", e->receive_drop);
+  printf("receive watchdog timeouts: %u\n", e->receive_watchdog_timeouts);
+  printf("transmitter errors:        %u\n", e->transmitter_errors);
+  printf("transmit status overflows: %u\n", e->transmit_status_overflows);
+  printf("transmit frame errors:     %u\n", e->transmit_frame_errors);
+  printf("transmit eDMA errors:      %u\n", e->transmit_edma_errors);
+  printf("fixme tiny fragments:      %u\n", jc->fixme_tiny_fragments);
+  printf("fixme too many:            %u\n", jc->fixme_too_many);
</font> }
 
 static int smsc9218i_interface_ioctl(
<font color='#997700'>@@ -1546,7 +1683,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, (int) command, (int *) data);
</font>       break;
     case SIOCGIFADDR:
     case SIOCSIFADDR:
<font color='#997700'>@@ -1640,6 +1777,10 @@
</font>   ifp->if_snd.ifq_maxlen = ifqmaxlen;
   ifp->if_timer = 0;
 
<font color='#000088'>+  /* MDIO */
+  e->mdio.mdio_r = smsc9218i_mdio_read;
+  e->mdio.mdio_w = smsc9218i_mdio_write;
+
</font>   /* Change status */
   e->state = SMSC9218I_CONFIGURED;
 

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c:1.19 rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c:1.20
--- rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c:1.19   Fri Feb 11 06:46:36 2011
+++ rtems/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c        Tue Jun  7 04:14:06 2011
</font><font color='#997700'>@@ -478,27 +478,10 @@
</font> #else /* default, MPC55xxEVB */
     {
         /* External Ethernet Controller (3 wait states, 64kB) */
<font color='#880000'>-        {
-            .B.TLBSEL = 1,          /* MAS0 */
-            .B.ESEL = 5
-        },
-        {
-            .B.VALID = 1,           /* MAS1 */
-            .B.IPROT = 1,
-            .B.TSIZ = 1
-        },
-        {
-            .B.EPN = 0x3fff8,       /* MAS2 */
-            .B.I = 1,
-            .B.G = 1
-        },
-        {
-            .B.RPN = 0x3fff8,       /* MAS3 */
-            .B.UW = 1,
-            .B.SW = 1,
-            .B.UR = 1,
-            .B.SR = 1
-        }
</font><font color='#000088'>+        .MAS0 = { .R = 0x10050000 },
+        .MAS1 = { .R = 0xc0000100 },
+        .MAS2 = { .R = 0x3fff800a },
+        .MAS3 = { .R = 0x3fff800f }
</font>     }
 #endif /* MMU setup */
 };
</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>