summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openbios/arch/ppc/mol/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/openbios/arch/ppc/mol/tree.c')
-rw-r--r--qemu/roms/openbios/arch/ppc/mol/tree.c165
1 files changed, 0 insertions, 165 deletions
diff --git a/qemu/roms/openbios/arch/ppc/mol/tree.c b/qemu/roms/openbios/arch/ppc/mol/tree.c
deleted file mode 100644
index b82c8c2c8..000000000
--- a/qemu/roms/openbios/arch/ppc/mol/tree.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Creation Date: <2003/11/18 14:55:05 samuel>
- * Time-stamp: <2004/03/27 02:03:55 samuel>
- *
- * <tree.c>
- *
- * device tree setup
- *
- * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se)
- *
- * 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 "config.h"
-#include "libopenbios/bindings.h"
-#include "mol/mol.h"
-#include "mol/prom.h"
-
-
-/************************************************************************/
-/* copy device tree */
-/************************************************************************/
-
-static void
-copy_node( mol_phandle_t molph )
-{
- char name[40], path[80];
- int exists;
- phandle_t ph;
-
- if( !molph )
- return;
-
- prom_package_to_path( molph, path, sizeof(path) );
-
- /* don't copy /options node */
- if( !strcmp("/options", path) ) {
- copy_node( prom_peer(molph) );
- return;
- }
-
- exists = 1;
- if( !(ph=find_dev(path)) ) {
- exists = 0;
- fword("new-device");
- ph = get_cur_dev();
- }
- activate_dev( ph );
-
- name[0] = 0;
- while( prom_next_prop(molph, name, name) > 0 ) {
- int len = prom_get_prop_len( molph, name );
- char *p;
-#if 0
- if( len > 0x1000 ) {
- printk("prop to large (%d)\n", len );
- continue;
- }
-#endif
- /* don't copy /chosen/{stdin,stdout} (XXX: ugly hack...) */
- if( !strcmp("/chosen", path) )
- if( !strcmp("stdio", name) || !strcmp("stdout", name) )
- continue;
-
- p = malloc( len );
- prom_get_prop( molph, name, p, len );
- set_property( ph, name, p, len );
- free( p );
- }
-
- set_int_property( ph, "MOL,phandle", molph );
- copy_node( prom_child(molph) );
-
- if( !exists )
- fword("finish-device");
- else
- activate_device("..");
-
- copy_node( prom_peer(molph) );
-}
-
-
-
-/************************************************************************/
-/* device tree cloning and tweaking */
-/************************************************************************/
-
-static phandle_t
-translate_molph( mol_phandle_t molph )
-{
- static mol_phandle_t cached_molph;
- static phandle_t cached_ph;
- phandle_t ph=0;
-
- if( cached_molph == molph )
- return cached_ph;
-
- while( (ph=dt_iterate(ph)) )
- if( get_int_property(ph, "MOL,phandle", NULL) == molph )
- break;
- cached_molph = molph;
- cached_ph = ph;
-
- if( !ph )
- printk("failed to translate molph\n");
- return ph;
-}
-
-static void
-fix_phandles( void )
-{
- static char *pnames[] = { "interrupt-parent", "interrupt-controller", NULL } ;
- int len, *map;
- phandle_t ph=0;
- char **pp;
-
- while( (ph=dt_iterate(ph)) ) {
- for( pp=pnames; *pp; pp++ ) {
- phandle_t *p = (phandle_t*)get_property( ph, *pp, &len );
- if( len == 4 )
- *p = translate_molph( *(int*)p );
- }
-
- /* need to fix interrupt map properties too */
- if( (map=(int*)get_property(ph, "interrupt-map", &len)) ) {
- int i, acells = get_int_property(ph, "#address-cells", NULL);
- int icells = get_int_property(ph, "#interrupt-cells", NULL);
-
- len /= sizeof(int);
- for( i=0; i<len; i++ ) {
- phandle_t ch_ph;
- int ch_acells, ch_icells;
-
- i += acells + icells;
- if( !(ch_ph=translate_molph(map[i])) )
- break;
- map[i] = (int)ch_ph;
- ch_acells = get_int_property(ch_ph, "#address-cells", NULL);
- ch_icells = get_int_property(ch_ph, "#interrupt-cells", NULL);
- i += ch_acells + icells;
- }
- if( i != len )
- printk("interrupt map fixing failure\n");
- }
- }
- /* delete MOL,phandle properties */
- for( ph=0; (ph=dt_iterate(ph)) ; ) {
- push_str("MOL,phandle");
- PUSH_ph(ph);
- fword("(delete-property)");
- }
- fword("device-end");
-}
-
-void
-devtree_init( void )
-{
- activate_device("/");
- copy_node( prom_peer(0) );
- fix_phandles();
- fword("tree-fixes");
-}