2004-03-29 Marco Gerards <metgerards@student.han.nl>
Add support for the newworld apple macintosh (PPC). This has been tested on the powerbook 2000 only. It only adds support for generic ieee1275 functions, console and disk support. This should be easy to port to other architectures with support for Open Firmware. * configure.ac: Accept the powerpc as host_cpu. In the case of the powerpc cpu set the host_vendor to ieee1275. Make sure the i386 specific tests are only executed while building for the i386. Inverse test for crosscompile. * genmk.rb (Utility): Allow assembler files. * normal/cmdline.c (pupa_tab_complete): Reset pupa_errno. * conf/powerpc-ieee1275.rmk: New file. * disk/powerpc/ieee1275/ofdisk.c: Likewise. * disk/powerpc/ieee1275/partition.c: Likewise. * include/pupa/powerpc/ieee1275/biosdisk.h: Likewise. * include/pupa/powerpc/ieee1275/console.h: Likewise. * include/pupa/powerpc/ieee1275/partition.h: Likewise. * include/pupa/powerpc/ieee1275/time.h: Likewise. * include/pupa/powerpc/ieee1275/util/biosdisk.h: Likewise. * include/pupa/powerpc/ieee1275/multiboot.h: Likewise. * include/pupa/powerpc/ieee1275/loader.h * include/pupa/powerpc/setjmp.h: Likewise. * include/pupa/powerpc/types.h: Likewise. * kern/powerpc/ieee1275/init.c: Likewise. * kern/powerpc/ieee1275/openfw.c: Likewise. * term/powerpc/ieee1275/ofconsole.c: Likewise. These files were written by Johan Rydberg (jrydberg@night.trouble.net) and I only modified them slightly. * boot/powerpc/ieee1275/cmain.c: New file. * boot/powerpc/ieee1275/crt0.S: Likewise. * boot/powerpc/ieee1275/ieee1275.c: Likewise. * include/pupa/powerpc/ieee1275/ieee1275.h: Likewise.
This commit is contained in:
parent
8c8cc20511
commit
e56cdf2111
25 changed files with 2768 additions and 22 deletions
106
kern/powerpc/ieee1275/init.c
Normal file
106
kern/powerpc/ieee1275/init.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
/* init.c -- Initialize PUPA on the newworld mac (PPC). */
|
||||
/*
|
||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||
* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <pupa/kernel.h>
|
||||
#include <pupa/dl.h>
|
||||
#include <pupa/disk.h>
|
||||
#include <pupa/mm.h>
|
||||
#include <pupa/machine/partition.h>
|
||||
#include <pupa/machine/ieee1275.h>
|
||||
#include <pupa/normal.h>
|
||||
#include <pupa/fs.h>
|
||||
#include <pupa/setjmp.h>
|
||||
#include <env.h>
|
||||
|
||||
void pupa_ofdisk_init (void);
|
||||
void pupa_console_init (void);
|
||||
|
||||
|
||||
/* XXX: Modules are not yet supported. */
|
||||
pupa_addr_t pupa_end_addr = -1;
|
||||
pupa_addr_t pupa_total_module_size = 0;
|
||||
|
||||
void
|
||||
abort (void)
|
||||
{
|
||||
for (;;);
|
||||
}
|
||||
|
||||
void
|
||||
pupa_machine_init (void)
|
||||
{
|
||||
void *mem;
|
||||
|
||||
if (pupa_ieee1275_claim ((void *) 0x300000, 0x150000, 0, &mem) == -1)
|
||||
abort (); /* Damn, we are in trouble! */
|
||||
|
||||
/* The memory allocations were copied from yaboot. */
|
||||
pupa_mm_init_region ((void *) 0x300000, 0x150000);
|
||||
|
||||
/* XXX: Loadable modules are not supported. */
|
||||
pupa_env_set ("prefix", "");
|
||||
|
||||
pupa_ext2_init ();
|
||||
pupa_ofdisk_init ();
|
||||
pupa_console_init ();
|
||||
}
|
||||
|
||||
int
|
||||
pupa_arch_dl_check_header (void *ehdr __attribute ((unused)),
|
||||
pupa_size_t size __attribute ((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
pupa_err_t
|
||||
pupa_arch_dl_relocate_symbols (pupa_dl_t mod __attribute ((unused)),
|
||||
void *ehdr __attribute ((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
pupa_stop (void)
|
||||
{
|
||||
for (;;);
|
||||
}
|
||||
|
||||
void
|
||||
pupa_register_exported_symbols (void)
|
||||
{
|
||||
}
|
||||
|
||||
pupa_uint32_t
|
||||
pupa_get_rtc (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pupa_setjmp (pupa_jmp_buf env __attribute ((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
pupa_longjmp (pupa_jmp_buf env __attribute ((unused)),
|
||||
int val __attribute ((unused)))
|
||||
{
|
||||
}
|
86
kern/powerpc/ieee1275/openfw.c
Normal file
86
kern/powerpc/ieee1275/openfw.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
/* openfw.c -- Open firmware support funtions. */
|
||||
/*
|
||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||
* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <pupa/err.h>
|
||||
#include <pupa/misc.h>
|
||||
#include <pupa/mm.h>
|
||||
#include <pupa/machine/ieee1275.h>
|
||||
|
||||
/* Iterate through all device aliasses. Thisfunction can be used to
|
||||
find a device of a specific type. */
|
||||
pupa_err_t
|
||||
pupa_devalias_iterate (int (*hook) (struct pupa_ieee1275_devalias *alias))
|
||||
{
|
||||
pupa_ieee1275_phandle_t devalias;
|
||||
char aliasname[32];
|
||||
int actual;
|
||||
struct pupa_ieee1275_devalias alias;
|
||||
|
||||
if (pupa_ieee1275_finddevice ("/aliases", &devalias))
|
||||
return -1;
|
||||
|
||||
/* XXX: Is this the right way to find the first property? */
|
||||
aliasname[0] = '\0';
|
||||
|
||||
/* XXX: Are the while conditions correct? */
|
||||
while (pupa_ieee1275_next_property (devalias, aliasname, aliasname, &actual)
|
||||
|| actual)
|
||||
{
|
||||
pupa_ieee1275_phandle_t dev;
|
||||
pupa_size_t pathlen;
|
||||
char *devpath;
|
||||
/* XXX: This should be large enough for any possible case. */
|
||||
char devtype[64];
|
||||
|
||||
pupa_ieee1275_get_property_length (devalias, aliasname, &pathlen);
|
||||
devpath = pupa_malloc (pathlen);
|
||||
if (! devpath)
|
||||
return pupa_errno;
|
||||
|
||||
if (pupa_ieee1275_get_property (devalias, aliasname, devpath, pathlen,
|
||||
&actual))
|
||||
{
|
||||
pupa_free (devpath);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pupa_ieee1275_finddevice (devpath, &dev))
|
||||
{
|
||||
pupa_free (devpath);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pupa_ieee1275_get_property (dev, "device_type", devtype, sizeof devtype,
|
||||
&actual))
|
||||
{
|
||||
pupa_free (devpath);
|
||||
continue;
|
||||
}
|
||||
|
||||
alias.name = aliasname;
|
||||
alias.path= devpath;
|
||||
alias.type = devtype;
|
||||
hook (&alias);
|
||||
|
||||
pupa_free (devpath);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue