[OpenBIOS] [commit] r772 - in trunk/openbios-devel: arch/ppc/qemu arch/sparc64 include/libopenbios libopenbios
repository service
svn at openbios.org
Fri May 21 13:07:53 CEST 2010
Author: mcayland
Date: Fri May 21 13:07:53 2010
New Revision: 772
URL: http://tracker.coreboot.org/trac/openbios/changeset/772
Log:
Move creation of MMU translation property entries into architecture-specific files, rather than in ofmem_common.c. This is because different architectures have
different translation entries described within the OF platform bindings. With thanks to Andreas Färber and Igor Kovalenko.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Modified:
trunk/openbios-devel/arch/ppc/qemu/ofmem.c
trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c
trunk/openbios-devel/include/libopenbios/ofmem.h
trunk/openbios-devel/libopenbios/ofmem_common.c
Modified: trunk/openbios-devel/arch/ppc/qemu/ofmem.c
==============================================================================
--- trunk/openbios-devel/arch/ppc/qemu/ofmem.c Mon May 3 13:29:38 2010 (r771)
+++ trunk/openbios-devel/arch/ppc/qemu/ofmem.c Fri May 21 13:07:53 2010 (r772)
@@ -141,6 +141,30 @@
return NULL;
}
+int ofmem_arch_get_translation_entry_size(void)
+{
+ /* Return size of a single MMU package translation property entry in cells */
+ return 4;
+}
+
+void ofmem_arch_create_translation_entry(ucell *transentry, translation_t *t)
+{
+ /* Generate translation property entry for PPC. According to the
+ platform bindings for PPC (http://playground.sun.com/1275/bindings/ppc/release/ppc-2_1.html#REF34579)
+ a translation property entry has the following layout:
+
+ virtual address
+ length
+ physical address
+ mode
+ */
+
+ transentry[0] = t->virt;
+ transentry[1] = t->size;
+ transentry[2] = t->phys;
+ transentry[3] = t->mode;
+}
+
/************************************************************************/
/* OF private allocations */
/************************************************************************/
Modified: trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c Mon May 3 13:29:38 2010 (r771)
+++ trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c Fri May 21 13:07:53 2010 (r772)
@@ -69,6 +69,28 @@
return (retain_t *)(qemu_mem_size - sizeof(retain_t));
}
+int ofmem_arch_get_translation_entry_size(void)
+{
+ /* Return size of a single MMU package translation property entry in cells */
+ return 3;
+}
+
+void ofmem_arch_create_translation_entry(ucell *transentry, translation_t *t)
+{
+ /* Generate translation property entry for SPARC. While there is no
+ formal documentation for this, both Linux kernel and OpenSolaris sources
+ expect a translation property entry to have the following layout:
+
+ virtual address
+ length
+ mode
+ */
+
+ transentry[0] = t->virt;
+ transentry[1] = t->size;
+ transentry[2] = t->mode;
+}
+
/************************************************************************/
/* misc */
/************************************************************************/
Modified: trunk/openbios-devel/include/libopenbios/ofmem.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/ofmem.h Mon May 3 13:29:38 2010 (r771)
+++ trunk/openbios-devel/include/libopenbios/ofmem.h Fri May 21 13:07:53 2010 (r772)
@@ -63,6 +63,8 @@
extern ucell ofmem_arch_get_heap_top(void);
extern ucell ofmem_arch_get_virt_top(void);
extern retain_t* ofmem_arch_get_retained(void);
+extern int ofmem_arch_get_translation_entry_size(void);
+extern void ofmem_arch_create_translation_entry(ucell *transentry, translation_t *t);
extern ucell ofmem_arch_default_translation_mode( ucell phys );
extern void ofmem_arch_early_map_pages(ucell phys, ucell virt, ucell size,
ucell mode);
Modified: trunk/openbios-devel/libopenbios/ofmem_common.c
==============================================================================
--- trunk/openbios-devel/libopenbios/ofmem_common.c Mon May 3 13:29:38 2010 (r771)
+++ trunk/openbios-devel/libopenbios/ofmem_common.c Fri May 21 13:07:53 2010 (r772)
@@ -182,15 +182,15 @@
for( t = ofmem->trans, ncells = 0; t ; t=t->next, ncells++ ) {
}
- props = malloc(ncells * sizeof(ucell) * 3);
+ props = malloc(ncells * sizeof(ucell) * ofmem_arch_get_translation_entry_size());
if (props == NULL)
return;
+ /* Call architecture-specific routines to generate translation entries */
for( t = ofmem->trans, ncells = 0 ; t ; t=t->next ) {
- props[ncells++] = t->virt;
- props[ncells++] = t->size;
- props[ncells++] = t->mode;
+ ofmem_arch_create_translation_entry(&props[ncells], t);
+ ncells += ofmem_arch_get_translation_entry_size();
}
set_property(s_phandle_mmu, "translations",
More information about the OpenBIOS
mailing list