<!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-07-15)</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>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15  Till Straumann <strauman@slac.stanford.edu>

        * shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
        shared/pci/detect_raven_bridge.c: conditionally compile
        ISA and PCI-interrupt related stuff only if BSP defines
        BSP_ISA_IRQ_NUMBER > 0 and/or BSP_PCI_IRQ_NUMBER > 0,
        respectively.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.252&r2=text&tr2=1.253&diff_format=h">M</a></td><td width='1%'>1.253</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c.diff?r1=text&tr1=1.29&r2=text&tr2=1.30&diff_format=h">M</a></td><td width='1%'>1.30</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/irq/irq_init.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c.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/powerpc/shared/irq/openpic_i8259_irq.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.17&diff_format=h">M</a></td><td width='1%'>1.17</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.252 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.252      Sun Jun 19 02:40:37 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog    Fri Jul 15 20:15:05 2011
</font><font color='#997700'>@@ -1,3 +1,11 @@
</font><font color='#000088'>+2011-07-15  Till Straumann <strauman@slac.stanford.edu>
+
+       * shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
+       shared/pci/detect_raven_bridge.c: conditionally compile
+       ISA and PCI-interrupt related stuff only if BSP defines
+       BSP_ISA_IRQ_NUMBER > 0 and/or BSP_PCI_IRQ_NUMBER > 0,
+       respectively.
+<span style="background-color: #FF0000">       </span>
</font> 2011-06-19        Ralf Corsépius <ralf.corsepius@rtems.org>
 
        * Makefile.am: Remove references to non-existing files.

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.29 rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.30
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c:1.29   Wed Apr 28 13:51:58 2010
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/irq_init.c        Fri Jul 15 20:15:05 2011
</font><font color='#997700'>@@ -22,8 +22,10 @@
</font> #include <libcpu/spr.h>
 #include <bsp/pci.h>
 #include <bsp/residual.h>
<font color='#880000'>-#include <bsp/openpic.h>
</font> #include <bsp/irq.h>
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+#include <bsp/openpic.h>
+#endif
</font> #include <bsp/irq_supp.h>
 #include <bsp.h>
 #include <bsp/motorola.h>
<font color='#997700'>@@ -36,7 +38,9 @@
</font> } pci_isa_bridge_device;
 
 pci_isa_bridge_device* via_82c586 = 0;
<font color='#000088'>+#ifndef qemu
</font> static pci_isa_bridge_device bridge;
<font color='#000088'>+#endif
</font> 
 /*
  * default methods
<font color='#997700'>@@ -83,16 +87,19 @@
</font>   0,0,
   255,
   0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font>   /*
    * PCI Interrupts
    */
   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, /* for raven prio 0 means unactive... */
<font color='#000088'>+#endif
</font>   /*
    * Processor exceptions handled as interrupts
    */
   0
 };
 
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #if defined(mvme2100)
 static unsigned char mvme2100_openpic_initpolarities[16] = {
     0,  /* Not used - should be disabled */
<font color='#997700'>@@ -156,7 +163,9 @@
</font>     1,    /* MCP750_INT_PCI_BUS2_INTD */
 };
 #endif
<font color='#000088'>+#endif
</font> 
<font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0 && !defined(qemu)
</font> void VIA_isa_bridge_interrupts_setup(void)
 {
   pci_isa_bridge_device pci_dev;
<font color='#997700'>@@ -259,6 +268,7 @@
</font> #endif
   }
 }
<font color='#000088'>+#endif
</font> 
   /*
    * This code assumes the exceptions management setup has already
<font color='#997700'>@@ -268,7 +278,7 @@
</font>    */
 void BSP_rtems_irq_mng_init(unsigned cpuId)
 {
<font color='#880000'>-#if !defined(mvme2100)
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0 && !defined(mvme2100)
</font>   int known_cpi_isa_bridge = 0;
 #endif
   int i;
<font color='#997700'>@@ -285,6 +295,7 @@
</font>    */
   openpic_init(1, mvme2100_openpic_initpolarities, mvme2100_openpic_initsenses, 16, 16, BSP_bus_frequency);
 #else
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #ifdef TRACE_IRQ_INIT
   printk("Going to initialize raven interrupt controller (openpic compliant)\n");
 #endif
<font color='#997700'>@@ -292,8 +303,13 @@
</font> #ifdef TRACE_IRQ_INIT
   printk("Going to initialize the PCI/ISA bridge IRQ related setting (VIA 82C586)\n");
 #endif
<font color='#000088'>+#endif
+
+#if BSP_ISA_IRQ_NUMBER > 0
</font>   if ( currentBoard == MESQUITE ) {
<font color='#000088'>+#ifndef qemu
</font>     VIA_isa_bridge_interrupts_setup();
<font color='#000088'>+#endif
</font>     known_cpi_isa_bridge = 1;
   }
   if ( currentBoard == MVME_2300 ) {
<font color='#997700'>@@ -316,6 +332,8 @@
</font>   BSP_i8259s_init();
 #endif
 
<font color='#000088'>+#endif
+
</font>   /*
    * Initialize RTEMS management interrupt table
    */

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.11 rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.12
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c:1.11  Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/openpic_i8259_irq.c       Fri Jul 15 20:15:06 2011
</font><font color='#997700'>@@ -20,15 +20,22 @@
</font> #ifndef BSP_HAS_NO_VME
 #include <bsp/VMEConfig.h>
 #endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #include <bsp/openpic.h>
<font color='#000088'>+#endif
</font> #include <libcpu/io.h>
 #include <bsp/vectors.h>
 #include <stdlib.h>
 
 #include <rtems/bspIo.h> /* for printk */
<font color='#000088'>+
+#ifndef qemu
</font> #define RAVEN_INTR_ACK_REG 0xfeff0030
<font color='#000088'>+#else
+#define RAVEN_INTR_ACK_REG 0xbffffff0
+#endif
</font> 
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
  * pointer to the mask representing the additionnal irq vectors
  * that must be disabled when a particular entry is activated.
<font color='#997700'>@@ -47,33 +54,35 @@
</font> 
 static rtems_irq_connect_data*         rtems_hdl_tbl;
 
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
  * Check if IRQ is an ISA IRQ
  */
 static inline int is_isa_irq(const rtems_irq_number irqLine)
 {
<font color='#880000'>-  return (((int) irqLine <= BSP_ISA_IRQ_MAX_OFFSET) &
</font><font color='#000088'>+  return (((int) irqLine <= BSP_ISA_IRQ_MAX_OFFSET) &&
</font>     ((int) irqLine >= BSP_ISA_IRQ_LOWEST_OFFSET)
         );
 }
 #endif
 
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> /*
  * Check if IRQ is an OPENPIC IRQ
  */
 static inline int is_pci_irq(const rtems_irq_number irqLine)
 {
<font color='#880000'>-  return (((int) irqLine <= BSP_PCI_IRQ_MAX_OFFSET) &
</font><font color='#000088'>+  return OpenPIC && (((int) irqLine <= BSP_PCI_IRQ_MAX_OFFSET) &&
</font>     ((int) irqLine >= BSP_PCI_IRQ_LOWEST_OFFSET)
         );
 }
<font color='#000088'>+#endif
</font> 
 /*
  * ------------------------ RTEMS Irq helper functions ----------------
  */
 
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> /*
  * Caution : this function assumes the variable "*config"
  * is already set and that the tables it contains are still valid
<font color='#997700'>@@ -103,7 +112,7 @@
</font> void
 BSP_enable_irq_at_pic(const rtems_irq_number name)
 {
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font>     if (is_isa_irq(name)) {
       /*
        * Enable interrupt at PIC level
<font color='#997700'>@@ -112,18 +121,20 @@
</font>     }
 #endif
 
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font>     if (is_pci_irq(name)) {
       /*
        * Enable interrupt at OPENPIC level
        */
       openpic_enable_irq ((int) name - BSP_PCI_IRQ_LOWEST_OFFSET);
     }
<font color='#000088'>+#endif
</font> }
 
 int
 BSP_disable_irq_at_pic(const rtems_irq_number name)
 {
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font>     if (is_isa_irq(name)) {
       /*
        * disable interrupt at PIC level
<font color='#997700'>@@ -131,12 +142,14 @@
</font>       return BSP_irq_disable_at_i8259s ((int) name - BSP_ISA_IRQ_LOWEST_OFFSET);
     }
 #endif
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font>     if (is_pci_irq(name)) {
       /*
        * disable interrupt at OPENPIC level
        */
       return openpic_disable_irq ((int) name - BSP_PCI_IRQ_LOWEST_OFFSET);
     }
<font color='#000088'>+#endif
</font>   return -1;
 }
 
<font color='#997700'>@@ -156,7 +169,7 @@
</font>      * set up internal tables used by rtems interrupt prologue
      */
 
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font>     /*
      * start with ISA IRQ
      */
<font color='#997700'>@@ -179,6 +192,9 @@
</font>   }
 #endif
 
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+       if ( ! OpenPIC )
+               return 1;
</font>     /*
      * continue with PCI IRQ
      */
<font color='#997700'>@@ -197,12 +213,11 @@
</font>     }
 
 #ifdef BSP_PCI_ISA_BRIDGE_IRQ
<font color='#880000'>-   if ( BSP_ISA_IRQ_NUMBER > 0 ) {
-<span style="background-color: #FF0000">    </span>      /*
-            * Must enable PCI/ISA bridge IRQ
-            */
-<span style="background-color: #FF0000">    </span>      openpic_enable_irq (0);
-       }
</font><font color='#000088'>+<span style="background-color: #FF0000">   </span>      /*
+     * Must enable PCI/ISA bridge IRQ
+     */
+<span style="background-color: #FF0000">   </span>       openpic_enable_irq (BSP_PCI_ISA_BRIDGE_IRQ);
+#endif
</font> #endif
 
     return 1;
<font color='#997700'>@@ -218,7 +233,7 @@
</font> int C_dispatch_irq_handler (BSP_Exception_frame *frame, unsigned int excNum)
 {
   register unsigned int irq;
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font>   register unsigned isaIntr;                  /* boolean */
   register unsigned oldMask = 0;             /* old isa pic masks */
   register unsigned newMask;                  /* new isa pic masks */
<font color='#997700'>@@ -231,17 +246,39 @@
</font>     return 0;
 
   }
<font color='#880000'>-  irq = openpic_irq(0);
-  if (irq == OPENPIC_VEC_SPURIOUS) {
-    ++BSP_spuriousIntr;
-    return 0;
-  }
</font> 
<font color='#880000'>-  /* some BSPs might want to use a different numbering... */
-  irq = irq - OPENPIC_VEC_SOURCE + BSP_PCI_IRQ_LOWEST_OFFSET;
</font><font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+  if ( OpenPIC ) {
+    irq = openpic_irq(0);
+    if (irq == OPENPIC_VEC_SPURIOUS) {
+      ++BSP_spuriousIntr;
+      return 0;
+    }
+
+    /* some BSPs might want to use a different numbering... */
+    irq = irq - OPENPIC_VEC_SOURCE + BSP_PCI_IRQ_LOWEST_OFFSET;
+  } else {
+#if BSP_ISA_IRQ_NUMBER > 0
+#ifdef BSP_PCI_ISA_BRIDGE_IRQ
+       irq = BSP_PCI_ISA_BRIDGE_IRQ;
+#else
+#error "Configuration Error -- BSP with ISA + PCI IRQs MUST define BSP_PCI_ISA_BRIDGE_IRQ"
+#endif
+#else
+       rtems_panic("MUST have an OpenPIC if BSP has PCI IRQs but no ISA IRQs");
+#endif
+  }
+#endif
</font> 
<font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font> #ifdef BSP_PCI_ISA_BRIDGE_IRQ
<font color='#000088'>+#if 0 == BSP_PCI_IRQ_NUMBER<span style="background-color: #FF0000"> </span>
+#error "Configuration Error -- BSP w/o PCI IRQs MUST NOT define BSP_PCI_ISA_BRIDGE_IRQ"
+#endif
</font>   isaIntr = (irq == BSP_PCI_ISA_BRIDGE_IRQ);
<font color='#000088'>+#else
+  isaIntr = 1;
+#endif
</font>   if (isaIntr)  {
     /*
      * Acknowledge and read 8259 vector
<font color='#997700'>@@ -256,14 +293,17 @@
</font>     outport_byte(PIC_MASTER_IMR_IO_PORT, i8259s_cache & 0xff);
     outport_byte(PIC_SLAVE_IMR_IO_PORT, ((i8259s_cache & 0xff00) >> 8));
     BSP_irq_ack_at_i8259s (irq);
<font color='#880000'>-    openpic_eoi(0);
</font><font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
+       if ( OpenPIC )
+      openpic_eoi(0);
+#endif
</font>   }
 #endif
 
   /* dispatch handlers */
   bsp_irq_dispatch_list(rtems_hdl_tbl, irq, default_rtems_entry.hdl);
 
<font color='#880000'>-#ifdef BSP_PCI_ISA_BRIDGE_IRQ
</font><font color='#000088'>+#if BSP_ISA_IRQ_NUMBER > 0
</font>   if (isaIntr)  {
     i8259s_cache = oldMask;
     outport_byte(PIC_MASTER_IMR_IO_PORT, i8259s_cache & 0xff);
<font color='#997700'>@@ -272,14 +312,18 @@
</font>   else
 #endif
   {
<font color='#000088'>+#if BSP_PCI_IRQ_NUMBER > 0
</font> #ifdef BSP_PCI_VME_DRIVER_DOES_EOI
        /* leave it to the VME bridge driver to do EOI, so
      * it can re-enable the openpic while handling
      * VME interrupts (-> VME priorities in software)
         */
<font color='#880000'>-   if (_BSP_vme_bridge_irq != irq)
</font><font color='#000088'>+      if (_BSP_vme_bridge_irq != irq && OpenPIC)
</font> #endif
                openpic_eoi(0);
<font color='#000088'>+#else
+       do {} while (0);
+#endif
</font>   }
   return 0;
 }

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.16 rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.17
--- rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c:1.16        Wed Jan 19 10:54:20 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/pci/detect_raven_bridge.c     Fri Jul 15 20:15:06 2011
</font><font color='#997700'>@@ -10,6 +10,7 @@
</font> #include <bsp/consoleIo.h>
 #include <bsp/residual.h>
 #include <bsp/openpic.h>
<font color='#000088'>+#include <bsp/irq.h>
</font> 
 #include <rtems/bspIo.h>
 #include <libcpu/cpuIdent.h>
<font color='#997700'>@@ -187,9 +188,12 @@
</font>       printk("OpenPIC found at %x.\n", OpenPIC);
     }
   }
<font color='#000088'>+
+#if BSP_PCI_IRQ_NUMBER > 0
</font>   if (OpenPIC == (volatile struct OpenPIC *)0) {
     BSP_panic("OpenPic Not found\n");
   }
<font color='#000088'>+#endif
</font> 
 }
 
</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>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15  Till Straumann <strauman@slac.stanford.edu>

        * shared/startup/ppc_idle.c: added an 'idle task' body
        which switches the CPU into power-save mode. IIRC, this
        cannot be used on real hardware due to errata :-( but
        it still saves valuable host-CPU cycles when used by
        the qemuprep BSP.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.253&r2=text&tr2=1.254&diff_format=h">M</a></td><td width='1%'>1.254</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c</font></td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.253      Fri Jul 15 20:15:05 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog    Fri Jul 15 20:18:25 2011
</font><font color='#997700'>@@ -1,5 +1,13 @@
</font> 2011-07-15  Till Straumann <strauman@slac.stanford.edu>
 
<font color='#000088'>+   * shared/startup/ppc_idle.c: added an 'idle task' body
+       which switches the CPU into power-save mode. IIRC, this
+       cannot be used on real hardware due to errata :-( but
+       it still saves valuable host-CPU cycles when used by
+       the qemuprep BSP.
+
+2011-07-15  Till Straumann <strauman@slac.stanford.edu>
+
</font>   * shared/irq/init_irq.c, shared/irq/openpic_i8259_irq.c,
        shared/pci/detect_raven_bridge.c: conditionally compile
        ISA and PCI-interrupt related stuff only if BSP defines

<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c:1.1
--- /dev/null   Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/startup/ppc_idle.c    Fri Jul 15 20:18:25 2011
</font><font color='#997700'>@@ -0,0 +1,87 @@
</font><font color='#000088'>+/* $Id$ */
+
+/*
+ *  ppc_idle.c
+ *
+ * Authorship
+ * ----------
+ * This software was created by
+ *     Till Straumann <strauman@slac.stanford.edu>, 2010,
+ *<span style="background-color: #FF0000"> </span>          Stanford Linear Accelerator Center, Stanford University.
+ *
+ * Acknowledgement of sponsorship
+ * ------------------------------
+ * This software was produced by
+ *     the Stanford Linear Accelerator Center, Stanford University,
+ *<span style="background-color: #FF0000"> </span>          under Contract DE-AC03-76SFO0515 with the Department of Energy.
+ *
+ * Government disclaimer of liability
+ * ----------------------------------
+ * Neither the United States nor the United States Department of Energy,
+ * nor any of their employees, makes any warranty, express or implied, or
+ * assumes any legal liability or responsibility for the accuracy,
+ * completeness, or usefulness of any data, apparatus, product, or process
+ * disclosed, or represents that its use would not infringe privately owned
+ * rights.
+ *
+ * Stanford disclaimer of liability
+ * --------------------------------
+ * Stanford University makes no representations or warranties, express or
+ * implied, nor assumes any liability for the use of this software.
+ *
+ * Stanford disclaimer of copyright
+ * --------------------------------
+ * Stanford University, owner of the copyright, hereby disclaims its
+ * copyright and all other rights in this software.  Hence, anyone may
+ * freely use it for any purpose without restriction.
+ *
+ * Maintenance of notices
+ * ----------------------
+ * In the interest of clarity regarding the origin and status of this
+ * SLAC software, this and all the preceding Stanford University notices
+ * are to remain affixed to any copy or derivative of this software made
+ * or distributed by the recipient and are to be affixed to any copy of
+ * software made or distributed by the recipient that contains a copy or
+ * derivative of this software.
+ *
+ * ------------------ SLAC Software Notices, Set 4 OTT.002a, 2004 FEB 03
+ */
+#include <bsp.h>
+#include <stdint.h>
+
+#ifdef BSP_IDLE_TASK_BODY
+
+/* Provide an idle-task body which switches the
+ * CPU into power-save mode when idle. Any exception
+ * (including an interrupt/external-exception)
+ * wakes it up.
+ *
+ * IIRC - this cannot be used on real hardware due
+ *        to errata on many chips which is a real
+ *        pity. However, when used under qemu it
+ *        saves host-CPU cycles.
+ *        While qemu-0.12.4 needed to be patched
+ *        (would otherwise hang because an exception
+ *        didn't clear MSR_POW) qemu-0.14.1 seems
+ *        to work fine.
+ */
+
+#include <rtems/powerpc/registers.h>
+
+void *
+bsp_ppc_idle_task_body(uintptr_t ignored)
+{
+uint32_t msr;
+       _CPU_MSR_GET(msr);
+       msr |= MSR_POW;
+       asm volatile(
+       "1: sync       \n"
+       "  mtmsr %0   \n"
+       "   isync      \n"
+       "   b 1b       \n"
+       ::"r"(msr)
+       );
+       return 0;
+}
+
+#endif
</font></pre>
<p> </p>
<a name='cs3'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15  Till Straumann <strauman@slac.stanford.edu>

        * shared/bootloader/misc.c: Copy residual data
        _before_ decompressing the kernel since the firmware
        may have stored it in an area that is overwritten
        by decompress_kernel().
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.254&r2=text&tr2=1.255&diff_format=h">M</a></td><td width='1%'>1.255</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.13&diff_format=h">M</a></td><td width='1%'>1.13</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/bootloader/misc.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.254      Fri Jul 15 20:18:25 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog    Fri Jul 15 20:21:36 2011
</font><font color='#997700'>@@ -1,5 +1,12 @@
</font> 2011-07-15  Till Straumann <strauman@slac.stanford.edu>
 
<font color='#000088'>+   * shared/bootloader/misc.c: Copy residual data<span style="background-color: #FF0000"> </span>
+       _before_ decompressing the kernel since the firmware
+       may have stored it in an area that is overwritten
+       by decompress_kernel().
+
+2011-07-15  Till Straumann <strauman@slac.stanford.edu>
+
</font>   * shared/startup/ppc_idle.c: added an 'idle task' body
        which switches the CPU into power-save mode. IIRC, this
        cannot be used on real hardware due to errata :-( but

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.12 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.13
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c:1.12        Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/misc.c     Fri Jul 15 20:21:36 2011
</font><font color='#997700'>@@ -176,15 +176,17 @@
</font>           printk("Not enough memory to uncompress the kernel.");
                exit();
        }
<font color='#000088'>+
+       rescopy=salloc(sizeof(RESIDUAL));
+       /* Let us hope that residual data is aligned on word boundary */
+       *rescopy =  *bd->residual;
+       bd->residual = (void *)PAGE_ALIGN(kernel_size);
+
</font>   /* Note that this clears the bss as a side effect, so some code
         * with ugly special case for SMP could be removed from the kernel!
         */
        memset(parea, 0, kernel_size);
        printk("\nUncompressing the kernel...\n");
<font color='#880000'>-   rescopy=salloc(sizeof(RESIDUAL));
-       /* Let us hope that residual data is aligned on word boundary */
-       *rescopy =  *bd->residual;
-       bd->residual = (void *)PAGE_ALIGN(kernel_size);
</font> 
        gunzip(parea, kernel_size, zimage_start, &zimage_size);
 
<font color='#997700'>@@ -287,13 +289,15 @@
</font>   printk("\nModel: %s\nSerial: %s\n"
               "Processor/Bus frequencies (Hz): %ld/%ld\n"
               "Time Base Divisor: %ld\n"
<font color='#880000'>-          "Memory Size: %lx\n",
</font><font color='#000088'>+             "Memory Size: %lx\n"
+                  "Residual: %lx (length %u)\n",
</font>          vpd.PrintableModel,
               vpd.Serial,
               vpd.ProcessorHz,
                vpd.ProcessorBusHz,
               (vpd.TimeBaseDivisor ? vpd.TimeBaseDivisor : 4000),
<font color='#880000'>-          res->TotalMemory);
</font><font color='#000088'>+             res->TotalMemory,
+                  (unsigned long)res, res->ResidualLength);
</font> 
        /* This reconfigures all the PCI subsystem */
         pci_init();
</pre>
<p> </p>
<a name='cs4'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15  Till Straumann <strauman@slac.stanford.edu>

        * shared/bootloader/mm.c, shared/bootloader/pci.c,
        shared/bootloader/qemu_fakeres.c, shared/bootloader/qemu_fakerom.S,
        shared/irq/irq.h, shared/motorola/motorola.c, shared/residual/residual.h,
        shared/startup/bspstart.c,
        Added 'qemuprep' BSP variant.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/ChangeLog.diff?r1=text&tr1=1.255&r2=text&tr2=1.256&diff_format=h">M</a></td><td width='1%'>1.256</td><td width='100%'>c/src/lib/libbsp/powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c.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/powerpc/shared/bootloader/mm.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.18&diff_format=h">M</a></td><td width='1%'>1.18</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/bootloader/pci.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h.diff?r1=text&tr1=1.16&r2=text&tr2=1.17&diff_format=h">M</a></td><td width='1%'>1.17</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/irq/irq.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c.diff?r1=text&tr1=1.17&r2=text&tr2=1.18&diff_format=h">M</a></td><td width='1%'>1.18</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/motorola/motorola.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.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/shared/residual/residual.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.56&diff_format=h">M</a></td><td width='1%'>1.56</td><td width='100%'>c/src/lib/libbsp/powerpc/shared/startup/bspstart.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255 rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.256
--- rtems/c/src/lib/libbsp/powerpc/ChangeLog:1.255      Fri Jul 15 20:21:36 2011
+++ rtems/c/src/lib/libbsp/powerpc/ChangeLog    Fri Jul 15 20:29:04 2011
</font><font color='#997700'>@@ -1,5 +1,13 @@
</font> 2011-07-15  Till Straumann <strauman@slac.stanford.edu>
 
<font color='#000088'>+   * shared/bootloader/mm.c, shared/bootloader/pci.c,
+       shared/bootloader/qemu_fakeres.c, shared/bootloader/qemu_fakerom.S,
+       shared/irq/irq.h, shared/motorola/motorola.c, shared/residual/residual.h,
+       shared/startup/bspstart.c,
+       Added 'qemuprep' BSP variant.
+
+2011-07-15  Till Straumann <strauman@slac.stanford.edu>
+
</font>   * shared/bootloader/misc.c: Copy residual data<span style="background-color: #FF0000"> </span>
        _before_ decompressing the kernel since the firmware
        may have stored it in an area that is overwritten

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.7 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.8
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c:1.7   Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/mm.c       Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -474,6 +474,19 @@
</font>   register RESIDUAL *res = bd->residual;
        u_long minpages = PAGE_ALIGN(image_size)>>PAGE_SHIFT;
 
<font color='#000088'>+   if ( residual_fw_is_qemu( res ) ) {
+               /* save command-line - QEMU firmware sets R6/R7 to
+                * commandline start/end (NON-PReP STD)
+                */
+               int len = bd->r7 - bd->r6;
+               if ( len > 0 ) {
+                       if ( len > sizeof(bd->cmd_line) - 1 )
+                               len = sizeof(bd->cmd_line) - 1;
+                       codemove(bd->cmd_line, bd->r6, len, bd->cache_lsize);
+                       bd->cmd_line[len] = 0;
+               }
+       }
+
</font>   /* Fix residual if we are loaded by Motorola NT firmware */
        if ( res && res->VitalProductData.FirmwareSupplier == 0x10000 )
            fix_residual( res );

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.17 rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.18
--- rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c:1.17 Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/pci.c      Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -24,6 +24,7 @@
</font> #include <libcpu/page.h>
 #include <bsp/consoleIo.h>
 #include <string.h>
<font color='#000088'>+#include <bsp.h>
</font> 
 #include <string.h>
 
<font color='#997700'>@@ -480,6 +481,14 @@
</font>    pci_resource *r;
    struct pci_dev *dev;
 
<font color='#000088'>+   u_long bus0_mem_start = BUS0_MEM_START;
+   u_long bus0_mem_end   = BUS0_MEM_END;
+
+   if ( residual_fw_is_qemu( bd->residual ) ) {
+     bus0_mem_start += PREP_ISA_MEM_BASE;
+     bus0_mem_end   += PREP_ISA_MEM_BASE;
+   }
+
</font>    /* FIXME: for now memory is relocated from low, it's better
     * to start from higher addresses.
     */
<font color='#997700'>@@ -489,7 +498,7 @@
</font>    */
 
    init_free_area(&pci->io, BUS0_IO_START, BUS0_IO_END, 0xfff, 0);
<font color='#880000'>-   init_free_area(&pci->mem, BUS0_MEM_START, BUS0_MEM_END, 0xfffff, 0);
</font><font color='#000088'>+   init_free_area(&pci->mem, bus0_mem_start, bus0_mem_end, 0xfffff, 0);
</font> 
    /* First reconfigure the I/O space, this will be more
     * complex when there is more than 1 bus. And 64 bits
<font color='#997700'>@@ -520,6 +529,14 @@
</font>       pci_bootloader_write_config_dword(r->dev,
                              PCI_BASE_ADDRESS_0+(r->reg<<2),
                              r->base);
<font color='#000088'>+
+      if ( residual_fw_is_qemu( bd->residual ) && r->dev->sysdata ) {
+        if ( PCI_BASE_ADDRESS_SPACE_IO == (r->type &  PCI_BASE_ADDRESS_SPACE) )
+                       ((pci_resource*)r->dev->sysdata)->cmd |= PCI_COMMAND_IO;
+               else
+                       ((pci_resource*)r->dev->sysdata)->cmd |= PCI_COMMAND_MEMORY;
+      }
+
</font>       if ((r->type&
            (PCI_BASE_ADDRESS_SPACE|
             PCI_BASE_ADDRESS_MEM_TYPE_MASK)) ==

<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c:1.1
--- /dev/null   Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakeres.c     Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -0,0 +1,226 @@
</font><font color='#000088'>+#include <bsp/residual.h>
+#include <stdint.h>
+
+/* Magic knowledge - qemu loads image here.<span style="background-color: #FF0000"> </span>
+ * However, we use the value from NVRAM if possible...
+ */
+#define KERNELBASE 0x01000000
+
+/* When starting qemu make sure to give the correct
+ * amount of memory!
+ *
+ * NOTE: Code now supports reading the actual memory
+ *       amount from NVRAM. The residual copy in RAM
+ *       is fixed-up accordingly.
+ */
+#define MEM_MEGS 32
+
+/* Mock up a minimal/fake residual; just enough to make the
+ * bootloader happy.
+ */
+struct fake_data {
+       unsigned long dat_len;
+       unsigned long res_off;
+       unsigned long cmd_off;
+       unsigned long cmd_len;
+       unsigned long img_adr;
+       RESIDUAL      fake_residual;
+       char          cmdline[1024];
+} fake_data = {
+dat_len: sizeof(fake_data),
+res_off: (unsigned long) &fake_data.fake_residual
+        -(unsigned long) &fake_data,
+cmd_off: (unsigned long) &fake_data.cmdline
+        -(unsigned long) &fake_data,
+cmd_len: sizeof(fake_data.cmdline),
+img_adr: KERNELBASE,
+fake_residual:<span style="background-color: #FF0000"> </span>
+{
+  ResidualLength: sizeof(RESIDUAL),
+  Version:          0,
+  Revision:         0,
+  EC:               0,
+  VitalProductData: {
+       FirmwareSupplier:  QEMU,
+       ProcessorHz:    300000000, /* fantasy */
+       ProcessorBusHz: 100000000, /* qemu timebase clock */
+       TimeBaseDivisor:1*1000,
+  },
+  MaxNumCpus:       1,
+  ActualNumCpus:    1,
+  Cpus: {
+    {
+       CpuType:        0x00040103, /* FIXME: fill from PVR */
+       CpuNumber:      0,<span style="background-color: #FF0000">  </span>
+    CpuState:       0,
+    },
+  },
+  /* Memory */
+  TotalMemory:      1024*1024*MEM_MEGS,
+  GoodMemory:       1024*1024*MEM_MEGS,
+  ActualNumMemSegs: 13,
+  Segs: {
+    { 0x2000, 0xFFF00, 0x00100 },
+    { 0x0020, MEM_MEGS*0x100, 0x80000 - MEM_MEGS*0x100 },
+    { 0x0008, 0x00800, 0x00168 },
+    { 0x0004, 0x00000, 0x00005 },
+    { 0x0001, 0x006F1, 0x0010F },
+    { 0x0002, 0x006AD, 0x00044 },
+    { 0x0010, 0x00005, 0x006A8 },
+    { 0x0010, 0x00968, MEM_MEGS*0x100 - 0x00968 },
+    { 0x0800, 0xC0000, 0x3F000 },
+    { 0x0600, 0xBF800, 0x00800 },
+    { 0x0500, 0x81000, 0x3E800 },
+    { 0x0480, 0x80800, 0x00800 },
+    { 0x0440, 0x80000, 0x00800 }<span style="background-color: #FF0000">  </span>
+  },
+  ActualNumMemories: 0,
+  Memories: {
+       {0},
+  },
+  /* Devices */
+  ActualNumDevices:  1,
+  Devices: {
+       {
+       DeviceId: {
+               BusId:     PROCESSORDEVICE,
+               BaseType:  BridgeController,
+               SubType:   PCIBridge,
+               Interface: PCIBridgeIndirect,
+       },
+       }
+  },
+  DevicePnPHeap: {0}
+},
+/* This is overwritten by command line passed by qemu. */
+cmdline: {
+       '-','-','n','e','2','k','-','i','r','q','=','9',
+       0,
+}
+};
+
+/* Read one byte from NVRAM */
+static inline uint8_t
+nvram_rd(void)
+{
+uint8_t rval = *(volatile uint8_t*)0x80000077;
+       asm volatile("eieio");
+       return rval;
+}
+
+/* Set NVRAM address pointer */
+static inline void
+nvram_addr(uint16_t addr)
+{
+       *(volatile uint8_t*)0x80000074 = (addr & 0xff);
+       asm volatile("eieio");
+       *(volatile uint8_t*)0x80000075 = ((addr>>8) & 0xff);
+       asm volatile("eieio");
+}
+
+/* Read a 32-bit (big-endian) work from NVRAM */
+uint32_t
+nvram_rdl_be(uint16_t addr)
+{
+int i;
+uint32_t rval = 0;
+       for ( i=0; i<sizeof(rval); i++ ) {<span style="background-color: #FF0000"> </span>
+               nvram_addr( addr + i );
+               rval = (rval<<8) | nvram_rd();
+       }
+       return rval;
+}
+
+
+/* !!! NOTE !!!
+ *
+ * We use a special hack to propagate command-line info to the bootloader.
+ * This is NOT PreP compliant (but who cares).
+ * We set R6 and R7 to point to the start/end of the command line string
+ * and hacked the bootloader so it uses R6/R7 (provided that the firmware
+ * is detected as 'QEMU').
+ *
+ * (see bootloader/mm.c, bootloader/misc.c,  bootloader/bootldr.h, -- boot_data.cmd_line[])
+ */
+uint32_t
+res_copy(void)
+{
+struct   fake_data *p;
+uint32_t addr, cmdl, l, imga;
+uint32_t mem_sz, pgs;
+int      i;
+int      have_nvram;
+
+       /* Make sure we have a valid NVRAM -- just check for 'QEMU' at the
+        * beginning<span style="background-color: #FF0000"> </span>
+        */
+       have_nvram = ( (('Q'<<24) | ('E'<<16) | ('M'<< 8) | ('U'<< 0)) == nvram_rdl_be( 0x0000 ) );
+
+       if ( !have_nvram ) {
+               /* reading NVRAM failed - fall back to using the static residual copy;
+                * this means no support for variable memory size or 'true' command line.
+                */
+               return (uint32_t)&fake_data;
+       }
+
+       /* Dilemma - we don't really know where to put the residual copy
+     * (original is in ROM and cannot be modified).
+        * We can't put it at the top of memory since the bootloader starts
+        * allocating memory from there, before saving the residual, that is.
+        * Too close to the final image might not work either because RTEMS
+        * zeroes its BSS *before* making its copies of the residual and commandline.
+        *
+<span style="background-color: #FF0000"> </span>  * For now we hope that appending to the kernel image works (and that
+        * the bootloader puts it somewhere safe).
+        */
+       imga  = nvram_rdl_be( 0x0038 );
+       addr  = imga + nvram_rdl_be( 0x003c );
+       addr += 0x1f;
+       addr &= ~(0x1f);
+
+       p     = (struct fake_data *)addr;
+
+       /* commandline + length from NVRAM */
+       cmdl  = nvram_rdl_be( 0x0040 );
+       l     = nvram_rdl_be( 0x0044 );
+
+       if ( l > 0 ) {
+               /* have a command-line; copy it into our local buffer */
+               if ( l > sizeof( p->cmdline ) - 1 ) {
+                       l = sizeof( p->cmdline ) - 1;
+               }
+               /* original may overlap our buffer; must safely move around */
+               if ( p->cmdline < (char*)cmdl ) {
+                       for ( i=0; i<l; i++ ) {
+                               p->cmdline[i] = ((char*)cmdl)[i];
+                       }
+               } else {
+                       for ( i=l-1; i>=0; i-- ) {
+                               p->cmdline[i] = ((char*)cmdl)[i];
+                       }
+               }
+       }
+       p->cmdline[l]      = 0;
+       /* Copy rest of residual */
+       for ( i=0; i<sizeof(p->fake_residual); i++ )
+               ((char*)&p->fake_residual)[i] = ((char*)&fake_data.fake_residual)[i];
+       p->dat_len         = fake_data.dat_len;
+       p->res_off         = fake_data.res_off;
+       p->cmd_off         = fake_data.cmd_off;
+       p->cmd_len         = l+1;
+       p->img_adr         = imga;
+
+       /* Fix up memory in residual from NVRAM settings */
+
+       mem_sz = nvram_rdl_be( 0x0030 );
+       pgs    = mem_sz >> 12;
+
+       p->fake_residual.TotalMemory = mem_sz;
+       p->fake_residual.GoodMemory  = mem_sz;
+
+       p->fake_residual.Segs[1].BasePage  = pgs;
+       p->fake_residual.Segs[1].PageCount = 0x80000 - pgs;
+       p->fake_residual.Segs[7].PageCount = pgs - 0x00968;
+
+       return (uint32_t)p;
+}
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S:1.1
--- /dev/null   Fri Jul 15 21:10:49 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/bootloader/qemu_fakerom.S     Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -0,0 +1,198 @@
</font><font color='#000088'>+/* A fake 'bios' which does nothing but move a kernel image<span style="background-color: #FF0000"> </span>
+ * to RAM address zero and then starts that...
+ */
+#define LD_CACHE_LINE_SIZE  5
+#define INIT_STACK (0x100 - 16) /* 16-byte/svr4 aligned */
+
+/* These offsets must correspond to declaration in qemu_fakeres.c */
+#define DAT_LEN    0
+#define RES_OFF    4
+#define CMD_OFF    8
+#define CMD_LEN   12
+#define IMG_ADR   16
+
+/* Non-volatile registers */
+#define OBASE     30
+#define PCID      25
+#define PCIA      26
+
+#define PCI_MAX_DEV 32
+
+       .global fake_data
+       .global res_set_memsz
+
+       .global _start
+_start:
+       lis    1,  INIT_STACK@h
+       ori    1,1,INIT_STACK@l
+       bl     pci_irq_set
+               /* copy residual to RAM and fix up;<span style="background-color: #FF0000"> </span>
+                * this routine returns a pointer to
+                * a 'fake_data' struct. If reading
+                * NVRAM failed then the return value
+                * points to a fall-back version in
+                * ROM...
+                */
+       bl     res_copy
+               /* fake_data pointer to R29 */
+       mr     29, 3
+
+               /* Load up R3..R5 with PreP mandated<span style="background-color: #FF0000"> </span>
+                * values (R3: residual, R4: kernel image,
+                * R5: OpenFirmware PTR (or NULL).
+                */
+
+               /* load R3 with residual pointer  */
+       lwz    3, RES_OFF(29)
+       add    3, 3, 29
+
+               /* load R4 with image address     */
+       lwz    4, IMG_ADR(29)
+
+               /* load R5 with zero (OFW = NULL) */
+       li     5, 0
+               /* EXTENSION: R6 = cmdline start  */
+       lwz    6, CMD_OFF(29)
+       add    6, 6, 29
+               /* EXTENSION: R7 = cmdline end    */
+       lwz    7, CMD_LEN(29)
+       add    7, 7, 6
+
+               /* jump to image address          */
+       mtctr  4
+       bctr
+
+       .org 0x100
+       b    _start
+
+       .org 0x110
+template:
+       mfsrr0 30
+       mfsrr1 31
+1:  b      1b
+template_end:
+
+       .org 0xc00
+       b    monitor
+<span style="background-color: #FF0000">       </span>
+
+       .org 0x4000
+codemove: /* src/dst are cache-aligned */
+       addi   5,5,(1<<LD_CACHE_LINE_SIZE)-1
+       srwi   5,5,LD_CACHE_LINE_SIZE
+       addi   3,3,-4
+       addi   4,4,-4
+1:
+       li     0,  (1<<LD_CACHE_LINE_SIZE)
+       mtctr  0
+2:
+       lwzu   0,  4(3)
+       stwu   0,  4(4)
+       bdnz   2b
+       dcbf   0,4
+       icbi   0,4
+       addic. 5,5,-1
+       bne  1b
+       blr
+
+cpexc:
+       lis    3,template@h
+       ori    3,3,template@l
+       li     5,template_end-template
+       b      codemove
+
+monitor:
+       stwu   1,-16(1)
+       stw    OBASE, 8(1)
+       lis    OBASE, 0x80000000@h
+       cmplwi 10,0x63 /* enter_monitor -> RESET */
+       bne    10f
+hwreset:
+       li   3,1
+       stb  3,0x92(OBASE)
+1:  b 1b
+10: cmplwi 10,0x1d /* .NETCTRL -> ignore */
+       bne    10f
+       b      ret_from_mon
+10: b hwreset      /* unknown -> RESET */<span style="background-color: #FF0000"> </span>
+
+ret_from_mon:
+       lwz    OBASE,8(1)
+       lwz    1,0(1)
+       rfi
+
+rcb:
+       stwbrx 3, 0, PCIA
+       lbzx   3, 0, PCID
+       blr
+
+wcb:
+       stwbrx 3, 0, PCIA
+       stbx   4, 0, PCID
+       blr
+
+rcd:
+       stwbrx 3, 0, PCIA
+       lwbrx  3, 0, PCID
+       blr
+
+/* fixup pci interrupt line register according to what
+ * qemu does: line = ((pin-1) +  slot_no) & 1 ? 11 : 9;
+ */
+pci_irq_set:
+               /* set up stack frame */
+       stwu    1, -32(1)
+       mflr    0
+       stw     0,  32+4(1)
+               /* load counter with # of PCI devs */<span style="background-color: #FF0000">   </span>
+       li      0, PCI_MAX_DEV
+       mtctr   0
+               /* save non-volatile registers we use
+                * in stack frame
+                */
+       stw    20,               8(1)
+       stw  PCIA,              12(1)
+       stw  PCID,              16(1)
+               /* load non-volatile registers with
+                * intended values.
+                */
+       lis  20,         0x80000000@h /* key for slot # 0             */
+       lis  PCIA,       0x80000cf8@h /* PCI config space address reg */
+       ori  PCIA, PCIA, 0x80000cf8@l<span style="background-color: #FF0000"> </span>
+       addi PCID, PCIA, 4            /* PCI config space data    reg */
+
+               /* loop over all slots and fix up PCI IRQ LINE */
+1:
+       mr   3, 20
+       bl   rcd
+       addi 3, 3, 1
+       cmplwi 3, 0      /* slot empty (= -1 + 1 = 0) ? */
+       beq  2f
+       addi 3, 20, 0x3d
+       bl   rcb
+       cmplwi 3, 0
+       beq  2f
+       slwi  4, 3, 11
+       addi  3, 20, 0x3c
+       xor   4, 4, 3    /* bit 11 = slot # + irq_num [zero-based] + 1 */
+       andi. 4, 4, 0x0800
+       li   4, 11
+       beq  3f
+       li   4,  9
+3:
+       bl   wcb
+2:
+       addi 20, 20, 0x0800 /* next slot */
+    bdnz 1b
+
+               /* restore and return */
+       lwz 20,  32+4(1)
+       mtlr 20
+       lwz PCID, 16(1)
+       lwz PCIA, 12(1)
+       lwz 20,    8(1)
+       lwz 1,     0(1)
+       blr
+
+       .section .romentry, "ax"
+       b     _start
</font>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.16 rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.17
--- rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h:1.16        Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/irq/irq.h     Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -78,7 +78,11 @@
</font>  * PCI IRQ handlers related definitions
  * CAUTION : BSP_PCI_IRQ_LOWEST_OFFSET should be equal to OPENPIC_VEC_SOURCE
  */
<font color='#000088'>+#ifndef qemu
</font> #define BSP_PCI_IRQ_NUMBER                (16)
<font color='#000088'>+#else
+#define BSP_PCI_IRQ_NUMBER             (0)
+#endif
</font> #define BSP_PCI_IRQ_LOWEST_OFFSET (BSP_ISA_IRQ_NUMBER)
 #define BSP_PCI_IRQ_MAX_OFFSET         (BSP_PCI_IRQ_LOWEST_OFFSET + BSP_PCI_IRQ_NUMBER - 1)
 /*
<font color='#997700'>@@ -90,7 +94,12 @@
</font> #define BSP_PROCESSOR_IRQ_MAX_OFFSET      (BSP_PROCESSOR_IRQ_LOWEST_OFFSET + BSP_PROCESSOR_IRQ_NUMBER - 1)
 /* Misc vectors for OPENPIC irqs (IPI, timers)
  */
<font color='#000088'>+#ifndef qemu
</font> #define BSP_MISC_IRQ_NUMBER               (8)
<font color='#000088'>+#else
+#define BSP_MISC_IRQ_NUMBER            (0)
+#endif
+
</font> #define BSP_MISC_IRQ_LOWEST_OFFSET        (BSP_PROCESSOR_IRQ_MAX_OFFSET + 1)
 #define BSP_MISC_IRQ_MAX_OFFSET                (BSP_MISC_IRQ_LOWEST_OFFSET + BSP_MISC_IRQ_NUMBER - 1)
 /*
<font color='#997700'>@@ -112,7 +121,9 @@
</font>  * Some PCI IRQ symbolic name definition
  */
 #define BSP_PCI_IRQ0                   (BSP_PCI_IRQ_LOWEST_OFFSET)
<font color='#000088'>+#if     BSP_PCI_IRQ_NUMBER > 0
</font> #define BSP_PCI_ISA_BRIDGE_IRQ            (BSP_PCI_IRQ0)
<font color='#000088'>+#endif
</font> 
 #if defined(mvme2100)
 #define BSP_DEC21143_IRQ                (BSP_PCI_IRQ_LOWEST_OFFSET + 1)

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.17 rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.18
--- rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c:1.17      Fri Jan 28 14:29:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/shared/motorola/motorola.c   Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -67,6 +67,16 @@
</font> #define NULL_PINMAP     {-1,{-1,-1,-1,-1}}
 #define NULL_INTMAP     {-1,-1,-1,{}}
 
<font color='#000088'>+#ifdef qemu
+static struct _int_map qemu_prep_intmap[] = {
+    { 0, -1, PCI_FIXUP_OPT_OVERRIDE_NAME,
+                   { { 1, { 9, -1, -1, -1}},
+                  { 2, {11, -1  -1, -1}},
+                  NULL_PINMAP }},
+       NULL_INTMAP
+};
+#endif
+
</font> static struct _int_map mcp750_intmap[] = {
 
    { 0, 16, 0, {{1,  {5, 19,-1,-1}}, /* pmc slot */
<font color='#997700'>@@ -304,7 +314,11 @@
</font>   {0x050, 0x00, PPC_UNKNOWN, "Omaha (PowerStack II Pro3000)", NULL, NULL},
   {0x060, 0x00, PPC_UNKNOWN, "Utah (Powerstack II Pro4000)", NULL, NULL},
   {0x0A0, 0x00, PPC_UNKNOWN, "Powerstack (Series EX)", NULL, NULL},
<font color='#000088'>+#ifdef qemu
+  {0x1E0, 0xE0, PPC_UNKNOWN, "QEMU", qemu_prep_intmap, prep_pci_swizzle},
+#else
</font>   {0x1E0, 0xE0, PPC_UNKNOWN, "Mesquite cPCI (MCP750)", mcp750_intmap, prep_pci_swizzle},
<font color='#000088'>+#endif
</font>   {0x1E0, 0xE1, PPC_UNKNOWN, "Sitka cPCI (MCPN750)", mcp750_intmap, prep_pci_swizzle},
   {0x1E0, 0xE2, PPC_UNKNOWN, "Mesquite cPCI (MCP750) w/ HAC", mcp750_intmap, prep_pci_swizzle},
   {0x1E0, 0xF6, PPC_UNKNOWN, "MTX Plus", NULL, NULL},

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.2 rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.3
--- rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h:1.2       Thu Apr 15 08:26:19 2004
+++ rtems/c/src/lib/libbsp/powerpc/shared/residual/residual.h   Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -63,6 +63,7 @@
</font>   MotoFirmware = 0x01,                  /* 7/18/95                            */
   FirmWorks = 0x02,                     /* 10/5/95                            */
   Bull = 0x03,                          /* 04/03/96                           */
<font color='#000088'>+  QEMU = ('q'<<24) | ('e'<<16) | ('m'<<8) | ('u'<<0),
</font>   } FIRMWARE_SUPPLIERS;
 
 typedef enum _ENDIAN_SWITCH_METHODS {
<font color='#997700'>@@ -321,6 +322,12 @@
</font> #define NULL      0
 #endif
 
<font color='#000088'>+static inline int
+residual_fw_is_qemu(RESIDUAL *r)
+{
+       return QEMU == r->VitalProductData.FirmwareSupplier;
+}
+
</font> extern RESIDUAL residualCopy;
 
 extern void print_residual_device_info(void);

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.55 rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.56
--- rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c:1.55       Wed Apr 28 13:51:58 2010
+++ rtems/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c    Fri Jul 15 20:29:05 2011
</font><font color='#997700'>@@ -41,7 +41,6 @@
</font> extern void set_L2CR(unsigned);
 extern Triv121PgTbl BSP_pgtbl_setup(unsigned int *);
 extern void                    BSP_pgtbl_activate(Triv121PgTbl);
<font color='#880000'>-extern void                        BSP_vme_config(void);
</font> 
 SPR_RW(SPRG1)
 
<font color='#997700'>@@ -180,7 +179,11 @@
</font>   /*
    * Must have acces to open pic PCI ACK registers provided by the RAVEN
    */
<font color='#000088'>+#ifndef qemu
</font>   setdbat(3, 0xf0000000, 0xf0000000, 0x10000000, IO_PAGE);
<font color='#000088'>+#else
+  setdbat(3, 0xb0000000, 0xb0000000, 0x10000000, IO_PAGE);
+#endif
</font> 
 #if defined(mvme2100)
   /* Need 0xfec00000 mapped for this */
<font color='#997700'>@@ -253,7 +256,6 @@
</font> #ifdef SHOW_MORE_INIT_SETTINGS
   printk("Residuals are located at %x\n", (unsigned) &residualCopy);
   printk("Additionnal boot options are %s\n", loaderParam);
<font color='#880000'>-  printk("Initial system stack at %x\n",stack);
</font>   printk("Software IRQ stack starts at %x with size %u\n", intrStackStart, intrStackSize);
   printk("-----------------------------------------\n");
 #endif
<font color='#997700'>@@ -329,7 +331,13 @@
</font>   pt = BSP_pgtbl_setup(&BSP_mem_size);
 
   if (!pt || TRIV121_MAP_SUCCESS != triv121PgTblMap(
<font color='#880000'>-            pt, TRIV121_121_VSID, 0xfeff0000, 1,
</font><font color='#000088'>+            pt, TRIV121_121_VSID,
+#ifndef qemu
+            0xfeff0000,
+#else
+            0xbffff000,
+#endif
+            1,
</font>             TRIV121_ATTR_IO_PAGE, TRIV121_PP_RW_PAGE)) {
        printk("WARNING: unable to setup page tables VME "
                "bridge must share PCI space\n");
</pre>
<p> </p>
<a name='cs5'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>strauman</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-07-15  Till Straumann <strauman@slac.stanford.edu>

        * motorola_powerpc/Makefile.am,
        motorola_powerpc/configure.ac, motorola_powerpc/preinstall.am,
        motorola_powerpc/include/bsp.h, motorola_powerpc/make/custom/qemuprep.cfg,
        motorola_powerpc/qemu_fakerom/Makefile.am,
        motorola_powerpc/qemu_fakerom/.cvsignore:
        Added 'qemuprep' BSP variant.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog.diff?r1=text&tr1=1.162&r2=text&tr2=1.163&diff_format=h">M</a></td><td width='1%'>1.163</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am.diff?r1=text&tr1=1.60&r2=text&tr2=1.61&diff_format=h">M</a></td><td width='1%'>1.61</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac.diff?r1=text&tr1=1.38&r2=text&tr2=1.39&diff_format=h">M</a></td><td width='1%'>1.39</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h.diff?r1=text&tr1=1.26&r2=text&tr2=1.27&diff_format=h">M</a></td><td width='1%'>1.27</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am.diff?r1=text&tr1=1.12&r2=text&tr2=1.13&diff_format=h">M</a></td><td width='1%'>1.13</td><td width='100%'>c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore</font></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am?rev=1.1&content-type=text/vnd.viewcvs-markup">A</a></td><td width='1%'><font color="#000088">1.1</font></td><td width='100%'><font color="#000088">c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am</font></td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.162 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.163
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog:1.162     Sat Jun 18 02:26:24 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/ChangeLog   Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -1,3 +1,12 @@
</font><font color='#000088'>+2011-07-15  Till Straumann <strauman@slac.stanford.edu>
+
+       * motorola_powerpc/Makefile.am,
+       motorola_powerpc/configure.ac, motorola_powerpc/preinstall.am,
+       motorola_powerpc/include/bsp.h, motorola_powerpc/make/custom/qemuprep.cfg,
+       motorola_powerpc/qemu_fakerom/Makefile.am,
+       motorola_powerpc/qemu_fakerom/.cvsignore:
+       Added 'qemuprep' BSP variant.
+
</font> 2011-06-18        Ralf Corsépius <ralf.corsepius@rtems.org>
 
        * Makefile.am: Remove references to non-existing files.

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.60 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.61
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am:1.60    Sat Jun 18 02:26:24 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/Makefile.am Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -4,7 +4,11 @@
</font> 
 ACLOCAL_AMFLAGS = -I ../../../../aclocal
 
<font color='#880000'>-SUBDIRS = . bootloader
</font><font color='#000088'>+SUBDIRS = .
+SUBDIRS+= bootloader
+if QEMU
+SUBDIRS+= qemu_fakerom
+endif
</font> 
 include $(top_srcdir)/../../../../automake/compile.am
 
<font color='#997700'>@@ -49,9 +53,12 @@
</font>   ../../powerpc/shared/startup/zerobss.c \
     ../../powerpc/shared/startup/pgtbl_setup.c \
     ../../powerpc/shared/startup/pgtbl_activate.c \
<font color='#000088'>+   ../../powerpc/shared/startup/ppc_idle.c \
</font>     ../../powerpc/shared/startup/sbrk.c ../../shared/bootcard.c \
     ../../shared/bspclean.c ../../shared/bsplibc.c ../../shared/bsppost.c \
     ../../shared/gnatinstallhandler.c
<font color='#000088'>+
+
</font> # tod
 libbsp_a_SOURCES += ../../shared/tod.c ../../powerpc/shared/tod/todcfg.c
 # pclock
<font color='#997700'>@@ -127,6 +134,18 @@
</font>     ../../powerpc/shared/vme/vme_universe.c \
     ../../powerpc/shared/vme/VMEConfig.h
 
<font color='#000088'>+if QEMU
+if HAS_NETWORKING
+nodist_include_HEADERS  += $(srcdir)/../../i386/pc386/include/wd80x3.h
+ne2000_CPPFLAGS          = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
+ne2000_CPPFLAGS         += '-Dbsp_cmdline_arg=rtems_bsp_cmdline_get_param_raw'
+noinst_PROGRAMS         += ne2000.rel
+ne2000_rel_SOURCES       = ../../i386/pc386/ne2000/ne2000.c
+ne2000_rel_CPPFLAGS      = $(AM_CPPFLAGS) $(ne2000_CPPFLAGS)
+ne2000_rel_LDFLAGS       = $(RTEMS_RELLDFLAGS)
+endif
+endif
+
</font> libbsp_a_LIBADD = \
     polledIO.rel \
     ../../../libcpu/@RTEMS_CPU@/shared/cache.rel \
<font color='#997700'>@@ -139,6 +158,10 @@
</font>     ../../../libcpu/@RTEMS_CPU@/mpc6xx/mmu.rel \
     ../../../libcpu/@RTEMS_CPU@/mpc6xx/timer.rel
 
<font color='#000088'>+if QEMU
+libbsp_a_LIBADD+=ne2000.rel
+endif
+
</font> EXTRA_DIST = BOOTING README.mtx603e README.MVME2100 README.MVME2300 \
               README.MVME2400 \
     README.OTHERBOARDS

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.38 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.39
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac:1.38   Tue Jun  7 08:33:18 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/configure.ac        Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -48,12 +48,21 @@
</font> RTEMS_BSPOPTS_HELP([mpc8240],
 [Defined for boards with MPC8240 -- undefined for others])
 
<font color='#000088'>+RTEMS_BSPOPTS_SET([qemu],[qemuprep],[1])
+RTEMS_BSPOPTS_SET([qemu],[*],[])
+RTEMS_BSPOPTS_HELP([qemu],[Defined for QEMU BSP -- undefined for others])
+
</font> RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
 
 # Explicitly list all Makefiles here
<font color='#880000'>-AC_CONFIG_FILES([Makefile
-bootloader/Makefile])
</font><font color='#000088'>+AC_CONFIG_FILES([Makefile])
+if test xx"${RTEMS_BSP}" = xxqemuprep ; then
+AC_CONFIG_FILES([qemu_fakerom/Makefile])
+fi
+AC_CONFIG_FILES([bootloader/Makefile])
</font> 
 RTEMS_PPC_EXCEPTIONS
 
<font color='#000088'>+AM_CONDITIONAL([QEMU],[test xx"${RTEMS_BSP}" = xxqemuprep])
+
</font> AC_OUTPUT

<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.26 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.27
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:1.26  Wed May 18 00:26:52 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h       Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -19,6 +19,14 @@
</font> #include <libcpu/io.h>
 #include <rtems/clockdrv.h>
 #include <bsp/vectors.h>
<font color='#000088'>+<span style="background-color: #FF0000">  </span>
+#ifdef qemu
+#include <rtems/bspcmdline.h>
+#endif
+<span style="background-color: #FF0000">  </span>
+#ifdef __cplusplus
+extern "C" {
+#endif
</font> 
 /*
  *  confdefs.h overrides for this BSP:
<font color='#997700'>@@ -86,11 +94,17 @@
</font> #else
 #define        _IO_BASE                PREP_ISA_IO_BASE
 #define        _ISA_MEM_BASE           PREP_ISA_MEM_BASE
<font color='#000088'>+#ifndef qemu
</font> /* address of our ram on the PCI bus   */
 #define        PCI_DRAM_OFFSET         PREP_PCI_DRAM_OFFSET
 /* offset of pci memory as seen from the CPU */
 #define PCI_MEM_BASE           PREP_ISA_MEM_BASE
 #define PCI_MEM_WIN0           0
<font color='#000088'>+#else
+#define        PCI_DRAM_OFFSET         0
+#define PCI_MEM_BASE           0
+#define PCI_MEM_WIN0           PREP_ISA_MEM_BASE
+#endif
</font> #endif
 
 
<font color='#997700'>@@ -112,8 +126,10 @@
</font> #define BSP_UART_IOBASE_COM1 ((_IO_BASE)+0x3f8)
 #define BSP_UART_IOBASE_COM2 ((_IO_BASE)+0x2f8)
 
<font color='#000088'>+#if ! defined(qemu)
</font> #define BSP_KBD_IOBASE       ((_IO_BASE)+0x60)
 #define BSP_VGA_IOBASE       ((_IO_BASE)+0x3c0)
<font color='#000088'>+#endif
</font> 
 #if defined(mvme2300)
 #define MVME_HAS_DEC21140
<font color='#997700'>@@ -130,6 +146,17 @@
</font> extern int rtems_dec21140_driver_attach();
 #endif
 
<font color='#000088'>+#ifdef qemu
+#define RTEMS_BSP_NETWORK_DRIVER_NAME "ne1"
+#define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_ne_driver_attach
+extern int rtems_ne_driver_attach();
+#endif
+
+#ifdef qemu
+#define BSP_IDLE_TASK_BODY bsp_ppc_idle_task_body
+extern void *bsp_ppc_idle_task_body(uintptr_t arg);
+#endif
+
</font> #include <bsp/openpic.h>
 /* BSP_PIC_DO_EOI is optionally used by the 'vmeUniverse' driver
  * to implement VME IRQ priorities in software.
<font color='#997700'>@@ -208,4 +235,8 @@
</font> 
 #endif
 
<font color='#000088'>+#ifdef __cplusplus
+};
+#endif
+
</font> #endif

<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg:1.1
--- /dev/null   Fri Jul 15 21:10:50 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/make/custom/qemuprep.cfg    Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1,36 @@
</font><font color='#000088'>+#
+#  Config file for the PowerPC 604 based mvme2307
+#
+#  $Id$
+#
+
+include $(RTEMS_ROOT)/make/custom/default.cfg
+
+RTEMS_CPU=powerpc
+RTEMS_CPU_MODEL=mpc604
+
+#  This contains the compiler options necessary to select the CPU model
+#  and (hopefully) optimize for it.<span style="background-color: #FF0000"> </span>
+#
+CPU_CFLAGS = -mcpu=powerpc -mmultiple -mstring -mstrict-align -D__ppc_generic
+
+# optimize flag: typically -O2
+CFLAGS_OPTIMIZE_V = -O2 -g
+
+ifdef PURE_BINARY
+define bsp-post-link
+       $(default-bsp-post-link)
+<span style="background-color: #FF0000"> </span> $(OBJCOPY) -O binary -R .comment -S $(basename $@).exe $(basename $@)$(DOWNEXT)
+endef
+else
+define bsp-post-link
+       $(default-bsp-post-link)
+<span style="background-color: #FF0000"> </span> $(OBJCOPY) -O binary -R .comment -S $(basename $@).exe rtems
+<span style="background-color: #FF0000"> </span> gzip -vf9 rtems
+<span style="background-color: #FF0000"> </span> $(LD) -o $(basename $@)$(DOWNEXT)  $(PROJECT_RELEASE)/lib/bootloader.o \
+           --just-symbols=$(basename $@).exe \
+<span style="background-color: #FF0000"> </span>     -b binary rtems.gz -T $(PROJECT_RELEASE)/lib/ppcboot.lds \
+<span style="background-color: #FF0000"> </span>     -Map $(basename $@).map && chmod 755 $@
+<span style="background-color: #FF0000"> </span> rm -f rtems.gz
+endef
+endif
</font>
<font color='#006600'>diff -u rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.12 rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.13
--- rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am:1.12  Fri Oct 23 02:32:44 2009
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/preinstall.am       Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -145,3 +145,10 @@
</font>   $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/VMEDMA.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/VMEDMA.h
 
<font color='#000088'>+if QEMU
+if HAS_NETWORKING
+$(PROJECT_INCLUDE)/wd80x3.h: $(srcdir)/../../i386/pc386/include/wd80x3.h $(PROJECT_INCLUDE)/$(dirstamp)
+       $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/wd80x3.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/wd80x3.h
+endif
+endif
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore:1.1
--- /dev/null   Fri Jul 15 21:10:50 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/.cvsignore     Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1 @@
</font><font color='#000088'>+Makefile.in
</font>
<font color='#006600'>diff -u /dev/null rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am:1.1
--- /dev/null   Fri Jul 15 21:10:51 2011
+++ rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/qemu_fakerom/Makefile.am    Fri Jul 15 20:29:45 2011
</font><font color='#997700'>@@ -0,0 +1,31 @@
</font><font color='#000088'>+##
+## $Id$
+##
+
+## NOTE: This Makefile.am does not apply RTEMS's compilation rules.
+ACLOCAL_AMFLAGS = -I ../../../../aclocal
+
+include $(top_srcdir)/../../../../automake/compile.am
+include $(top_srcdir)/../../bsp.am
+
+AUTOMAKE_OPTIONS = no-exeext
+
+project_lib_DATA  = qemu_fakerom.$(OBJEXT)
+project_lib_DATA += qemu_fakerom.elf
+project_lib_DATA += qemu_fakerom.bin
+
+
+## IMPORTANT: head.S must be first, T. Straumann 12/17/2001
+qemu_fakerom.$(OBJEXT): ../../../powerpc/shared/bootloader/qemu_fakerom.S
+       $(CPPASCOMPILE) -c -o $@ $^
+
+qemu_fakeres.$(OBJEXT): ../../../powerpc/shared/bootloader/qemu_fakeres.c
+       $(CC) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o $@ $^
+
+qemu_fakerom.elf: qemu_fakerom.$(OBJEXT) qemu_fakeres.$(OBJEXT)
+       $(LD) -o $@ $^ -nostdlib -Ttext 0xfff00000 --section-start=.romentry=0xfffffffc
+
+qemu_fakerom.bin: qemu_fakerom.$(OBJEXT) qemu_fakeres.$(OBJEXT)
+       $(LD) -o $@ $^ --oformat binary -nostdlib -Ttext 0xfff00000 --section-start=.romentry=0xfffffffc
+
+include $(top_srcdir)/../../../../automake/local.am
</font></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>