[OpenBIOS] r23 - in openbios-devel: arch/sparc32 config/examples drivers include/openbios

svn@openbios.org svn at openbios.org
Thu May 18 23:57:08 CEST 2006


Author: stepan
Date: 2006-05-18 23:57:08 +0200 (Thu, 18 May 2006)
New Revision: 23

Added:
   openbios-devel/drivers/obio.c
Modified:
   openbios-devel/arch/sparc32/openbios.c
   openbios-devel/arch/sparc32/romvec.c
   openbios-devel/arch/sparc32/tree.fs
   openbios-devel/config/examples/cross-sparc32_config.xml
   openbios-devel/config/examples/sparc32_config.xml
   openbios-devel/drivers/build.xml
   openbios-devel/drivers/esp.c
   openbios-devel/include/openbios/drivers.h
Log:
this makes linux on sparc32 boot :-)


Modified: openbios-devel/arch/sparc32/openbios.c
===================================================================
--- openbios-devel/arch/sparc32/openbios.c	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/arch/sparc32/openbios.c	2006-05-18 21:57:08 UTC (rev 23)
@@ -58,6 +58,9 @@
 #ifdef CONFIG_DRIVER_ESP
 	ob_esp_init();
 #endif
+#ifdef CONFIG_DRIVER_OBIO
+	ob_obio_init(0x71000000);
+#endif
 	device_end();
 	bind_func("platform-boot", boot );
 }

Modified: openbios-devel/arch/sparc32/romvec.c
===================================================================
--- openbios-devel/arch/sparc32/romvec.c	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/arch/sparc32/romvec.c	2006-05-18 21:57:08 UTC (rev 23)
@@ -76,7 +76,7 @@
     PUSH(node);
     fword("peer");
     peer = POP();
-    DPRINTF("obp_nextnode(%x) = %x\n", node, peer);
+    DPRINTF("obp_nextnode(0x%x) = 0x%x\n", node, peer);
 
     return peer;
 }
@@ -88,7 +88,7 @@
     PUSH(node);
     fword("child");
     child = POP();
-    DPRINTF("obp_child(%x) = %x\n", node, child);
+    DPRINTF("obp_child(0x%x) = 0x%x\n", node, child);
 
     return child;
 }
@@ -103,9 +103,7 @@
     notfound = POP();
 
     if (notfound) {
-        DPRINTF("obp_proplen(%x, %s) (not found)\n", node, name);
-        (void) POP();
-        (void) POP();
+        DPRINTF("obp_proplen(0x%x, %s) (not found)\n", node, name);
 
         return -1;
     } else {
@@ -113,7 +111,7 @@
 
         len = POP();
         (void) POP();
-        DPRINTF("obp_proplen(%x, %s) = %d\n", node, name, len);
+        DPRINTF("obp_proplen(0x%x, %s) = %d\n", node, name, len);
 
         return len;
     }
@@ -138,9 +136,7 @@
         notfound = POP();
     }
     if (notfound) {
-        DPRINTF("obp_getprop(%x, %s) (not found)\n", node, name);
-        (void) POP();
-        (void) POP();
+        DPRINTF("obp_getprop(0x%x, %s) (not found)\n", node, name);
 
         return -1;
     } else {
@@ -151,7 +147,7 @@
         str = (char *) POP();
         memcpy(value, str, len);
 
-        DPRINTF("obp_getprop(%x, %s) = %s\n", node, name, str);
+        DPRINTF("obp_getprop(0x%x, %s) = %s\n", node, name, str);
 
         return len;
     }
@@ -162,14 +158,13 @@
 		       __attribute__((unused)) char *value,
 		       __attribute__((unused)) int len)
 {
-    DPRINTF("obp_setprop(%x, %s) = %s (%d)\n", node, name, value, len);
+    DPRINTF("obp_setprop(0x%x, %s) = %s (%d)\n", node, name, value, len);
 
     return -1;
 }
 
 static const char *obp_nextprop(int node, char *name)
 {
-    char *ret;
     int found;
 
     if (!name || *name == '\0') {
@@ -183,11 +178,11 @@
     fword("next-property");
     found = POP();
     if (!found) {
-        DPRINTF("obp_nextprop(%x, %s) (not found)\n", node, name);
+        DPRINTF("obp_nextprop(0x%x, %s) (not found)\n", node, name);
         (void) POP();
         (void) POP();
 
-        return NULL;
+        return "";
     } else {
         int len;
         char *str;
@@ -195,7 +190,7 @@
         len = POP();
         str = (char *) POP();
 
-        DPRINTF("obp_nextprop(%x, %s) = %s\n", node, name, str);
+        DPRINTF("obp_nextprop(0x%x, %s) = %s\n", node, name, str);
 
         return str;
     }
@@ -271,7 +266,7 @@
 
     ret = obp_devread(dev_desc, buf, num_blks * bs) / bs;
 
-    DPRINTF("obp_rdblkdev(fd %x, num_blks %d, offset %d (hi %d lo %d), buf 0x%x) = %d\n", dev_desc, num_blks, offset, hi, lo, (int)buf, ret);
+    DPRINTF("obp_rdblkdev(fd 0x%x, num_blks %d, offset %d (hi %d lo %d), buf 0x%x) = %d\n", dev_desc, num_blks, offset, hi, lo, (int)buf, ret);
 
     return ret;
 }
@@ -283,7 +278,7 @@
     unsigned int off;
     unsigned int mva;
 
-    DPRINTF("obp_dumb_mmap: virta %x, which_io %d, paddr %x, sz %d\n", va, which_io, pa, size);
+    DPRINTF("obp_dumb_mmap: virta 0x%x, which_io %d, paddr 0x%x, sz %d\n", va, which_io, pa, size);
     off = pa & (PAGE_SIZE-1);
     npages = (off + size + (PAGE_SIZE-1)) / PAGE_SIZE;
     pa &= ~(PAGE_SIZE-1);
@@ -301,7 +296,7 @@
 static void obp_dumb_munmap(__attribute__((unused)) char *va,
 			    __attribute__((unused)) unsigned int size)
 {
-    DPRINTF("obp_dumb_munmap: virta %x, sz %d\n", va, size);
+    DPRINTF("obp_dumb_munmap: virta 0x%x, sz %d\n", va, size);
 }
 
 static int obp_devread(int dev_desc, char *buf, int nbytes)
@@ -371,7 +366,7 @@
     //int cpu, found;
     struct linux_prom_registers *smp_ctable = (void *)ctxtbl_ptr;
 
-    DPRINTF("obp_cpustart: cpu %d, ctxptr %x, ctx %d, pc %x\n", whichcpu,
+    DPRINTF("obp_cpustart: cpu %d, ctxptr 0x%x, ctx %d, pc 0x%x\n", whichcpu,
             smp_ctable->phys_addr, thiscontext, prog_counter);
 #if 0
     found = obp_getprop(whichcpu, "mid", (char *)&cpu);
@@ -435,7 +430,7 @@
     prop_mem_reg[2] = memsize;
     prop_mem_avail[0] = 0;
     prop_mem_avail[1] = 0;
-    prop_mem_avail[2] = va2pa((unsigned long)&_data);
+    prop_mem_avail[2] = va2pa((unsigned long)&_data) - 1;
     prop_vmem_avail[0] = 0;
     prop_vmem_avail[1] = 0;
     prop_vmem_avail[2] = (unsigned long)&_start - 1;
@@ -506,6 +501,14 @@
     romvec0.pv_v2bootargs.bootargs = &cmdline;
     romvec0.pv_v2bootargs.fd_stdin = &obp_fd_stdin;
     romvec0.pv_v2bootargs.fd_stdout = &obp_fd_stdout;
+
+    push_str("/builtin/console");
+    fword("open-dev");
+    obp_fd_stdin = POP();
+    push_str("/builtin/console");
+    fword("open-dev");
+    obp_fd_stdout = POP();
+    
     obp_stdin = PROMDEV_TTYA;
     obp_stdout = PROMDEV_TTYA;
 

Modified: openbios-devel/arch/sparc32/tree.fs
===================================================================
--- openbios-devel/arch/sparc32/tree.fs	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/arch/sparc32/tree.fs	2006-05-18 21:57:08 UTC (rev 23)
@@ -96,7 +96,7 @@
   " SUNW,tcx" device-name
   " display" device-type
   h# 1d encode-int " vbporch" property
-  h# 90 encode-int " hbporch" property
+  h# a0 encode-int " hbporch" property
   h# 06 encode-int " vsync" property
   h# 88 encode-int " hsync" property
   h# 03 encode-int " vfporch" property
@@ -111,7 +111,7 @@
   5 encode-int 0 encode-int encode+ " intr" property
   5 encode-int " interrupts" property
   2 encode-int h# 00800000 encode-int encode+ h# 00100000 encode-int encode+
-  2 encode-int encode+ h# 02000000 encode-int encode+ h# 00000001 encode-int encode+
+   2 encode-int encode+ h# 02000000 encode-int encode+ h# 00000001 encode-int encode+
    2 encode-int encode+ h# 04000000 encode-int encode+ h# 00800000 encode-int encode+
    2 encode-int encode+ h# 06000000 encode-int encode+ h# 00800000 encode-int encode+
    2 encode-int encode+ h# 0a000000 encode-int encode+ h# 00000001 encode-int encode+
@@ -235,8 +235,8 @@
   h# 0 encode-int h# 00000000 encode-int encode+ h# 00000008 encode-int encode+ " reg" property
   1 encode-int " slave" property
   h# 2c encode-int 0 encode-int encode+ " intr" property
-  1 encode-int " keyboard" property
-  1 encode-int " mouse" property
+  -1 encode-int " keyboard" property
+  -1 encode-int " mouse" property
 finish-device
 
 " /obio" find-device

Modified: openbios-devel/config/examples/cross-sparc32_config.xml
===================================================================
--- openbios-devel/config/examples/cross-sparc32_config.xml	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/config/examples/cross-sparc32_config.xml	2006-05-18 21:57:08 UTC (rev 23)
@@ -67,6 +67,7 @@
  
   <!-- Drivers -->
   <option name="CONFIG_DRIVER_SBUS" type="boolean" value="true"/>
+  <option name="CONFIG_DRIVER_OBIO" type="boolean" value="true"/>
   <option name="CONFIG_DRIVER_ESP" type="boolean" value="true"/>
   <option name="CONFIG_DRIVER_FLOPPY" type="boolean" value="false"/>
 

Modified: openbios-devel/config/examples/sparc32_config.xml
===================================================================
--- openbios-devel/config/examples/sparc32_config.xml	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/config/examples/sparc32_config.xml	2006-05-18 21:57:08 UTC (rev 23)
@@ -67,6 +67,7 @@
  
   <!-- Drivers -->
   <option name="CONFIG_DRIVER_SBUS" type="boolean" value="true"/>
+  <option name="CONFIG_DRIVER_OBIO" type="boolean" value="true"/>
   <option name="CONFIG_DRIVER_ESP" type="boolean" value="true"/>
   <option name="CONFIG_DRIVER_FLOPPY" type="boolean" value="false"/>
 

Modified: openbios-devel/drivers/build.xml
===================================================================
--- openbios-devel/drivers/build.xml	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/drivers/build.xml	2006-05-18 21:57:08 UTC (rev 23)
@@ -11,6 +11,7 @@
   <object source="iommu.c" condition="DRIVER_SBUS"/>
   <object source="sbus.c"  condition="DRIVER_SBUS"/>
   <object source="esp.c"   condition="DRIVER_ESP"/>
+  <object source="obio.c"   condition="DRIVER_OBIO"/>
  </library>
 
  <dictionary name="openbios" target="forth">

Modified: openbios-devel/drivers/esp.c
===================================================================
--- openbios-devel/drivers/esp.c	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/drivers/esp.c	2006-05-18 21:57:08 UTC (rev 23)
@@ -363,6 +363,14 @@
     fword("encode+");
     push_str("reg");
     fword("property");
+
+    PUSH(0x24);
+    fword("encode-int");
+    PUSH(0);
+    fword("encode-int");
+    fword("encode+");
+    push_str("intr");
+    fword("property");
 }
 
 static void

Added: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c	                        (rev 0)
+++ openbios-devel/drivers/obio.c	2006-05-18 21:57:08 UTC (rev 23)
@@ -0,0 +1,85 @@
+/*
+ *   OpenBIOS Sparc OBIO driver
+ *   
+ *   (C) 2004 Stefan Reinauer <stepan at openbios.org>
+ *   (C) 2005 Ed Schouten <ed at fxq.nl>
+ * 
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   version 2
+ *
+ */
+
+#include "openbios/config.h"
+#include "openbios/bindings.h"
+#include "openbios/kernel.h"
+#include "libc/byteorder.h"
+#include "libc/vsprintf.h"
+
+#include "openbios/drivers.h"
+
+static void
+ob_zs_init(unsigned long slavio_base)
+{
+    unsigned long zs_addr;
+
+    zs_addr = (unsigned long)map_io(slavio_base + 0x0, 8);
+    push_str("/obio/zs at 0,0");
+    fword("find-device");
+    
+    PUSH(zs_addr);
+    fword("encode-int");
+    PUSH(sizeof(zs_addr));
+    fword("encode-int");
+    fword("encode+");
+    push_str("address");
+    fword("property");
+
+    zs_addr = (unsigned long)map_io(slavio_base + 0x00100000, 8);
+    push_str("/obio/zs at 0,100000");
+    fword("find-device");
+    
+    PUSH(zs_addr);
+    fword("encode-int");
+    PUSH(sizeof(zs_addr));
+    fword("encode-int");
+    fword("encode+");
+    push_str("address");
+    fword("property");
+}
+
+static void
+ob_obio_open(int *idx)
+{
+	int ret=1;
+	RET ( -ret );
+}
+
+static void
+ob_obio_close(int *idx)
+{
+	selfword("close-deblocker");
+}
+
+static void
+ob_obio_initialize(int *idx)
+{
+}
+
+
+NODE_METHODS(ob_obio_node) = {
+	{ NULL,			ob_obio_initialize	},
+	{ "open",		ob_obio_open		},
+	{ "close",		ob_obio_close		},
+};
+
+
+int ob_obio_init(unsigned long slavio_base)
+{
+
+    //printk("Initializing OBIO devices...\n");
+    
+    ob_zs_init(slavio_base);
+	
+    return 0;
+}

Modified: openbios-devel/include/openbios/drivers.h
===================================================================
--- openbios-devel/include/openbios/drivers.h	2006-05-17 12:30:12 UTC (rev 22)
+++ openbios-devel/include/openbios/drivers.h	2006-05-18 21:57:08 UTC (rev 23)
@@ -23,4 +23,7 @@
 #ifdef CONFIG_DRIVER_ESP
 int ob_esp_init(void);
 #endif
+#ifdef CONFIG_DRIVER_OBIO
+int ob_obio_init(unsigned long slavio_base);
+#endif
 




More information about the OpenBIOS mailing list