[OpenBIOS] [RFC 3/3] ppc: RTAS WIP
Andreas Färber
andreas.faerber at web.de
Sat Oct 16 11:19:52 CEST 2010
Am 15.10.2010 um 00:17 schrieb Andreas Färber:
> diff --git a/arch/ppc/qemu/rtas-tokens.c b/arch/ppc/qemu/rtas-tokens.c
> new file mode 100644
> index 0000000..f251716
> --- /dev/null
> +++ b/arch/ppc/qemu/rtas-tokens.c
> @@ -0,0 +1,63 @@
> +/*
> + * Copyright (c) 2010 Andreas Färber <andreas.faerber at web.de>
> + */
> +
> +#define RTAS_MAX_ARGS 10
> +
> +typedef struct rtas_args {
> + unsigned long token;
> + long nargs;
> + long nret;
> + unsigned long args[RTAS_MAX_ARGS];
> +} rtas_args_t;
> +
> +void rtas_interface(rtas_args_t*, void*);
> +
> +/* drivers/escc.h */
> +#define IO_ESCC_OFFSET 0x00013000
> +/* drivers/escc.c */
> +#define CTRL(addr) (*(volatile unsigned char *)(addr))
> +#define DATA(addr) (*(volatile unsigned char *)(addr + 16))
> +#define Tx_BUF_EMP 0x4 /* Tx Buffer empty */
> +
> +/*static void uart_putchar(int port, unsigned char c)
> +{
> + while (!(CTRL(port) & Tx_BUF_EMP))
> + ;
> + DATA(port) = c;
> +}*/
> +
> +/*void serial_putchar(char);*/
> +
> +static void serial_putchar(char c)
> +{
> + unsigned long addr = 0x80800000;
> + volatile unsigned char *serial_dev = (unsigned char *)addr +
> IO_ESCC_OFFSET + 0x20;
> + //uart_putchar((int)serial_dev, c);
> + volatile unsigned char * port = serial_dev;
> + while (!(CTRL(port) & Tx_BUF_EMP))
> + ;
> + DATA(port) = c;
> +}
If I add a new method void dprintk(const char* s) here, I get this:
CC target/arch/ppc/qemu/rtas-tokens.o
LINK rtas-qemu.bin
target/arch/ppc/qemu/rtas-tokens.o: In function `rtas_interface':
/Users/andreas/QEMU/OpenBIOS/openbios/obj-ppc/../arch/ppc/qemu/rtas-
tokens.c:51: undefined reference to `_GLOBAL_OFFSET_TABLE_'
make: *** [rtas-qemu.bin] Error 1
Any ideas? Isn't the GOT some ELF concept?
$ powerpc-elf-gcc -v
Using built-in specs.
COLLECT_GCC=powerpc-elf-gcc
COLLECT_LTO_WRAPPER=/Users/andreas/QEMU/OpenBIOS/bin/libexec/gcc/
powerpc-elf/4.5.1/lto-wrapper
Target: powerpc-elf
Configured with: ../gcc-4.5.1/configure --prefix=/Users/andreas/QEMU/
OpenBIOS/bin --target=powerpc-elf --disable-nls --disable-threads --
enable-languages=c --disable-shared --disable-libssp --with-gmp=/Users/
andreas/QEMU/OpenBIOS/bin --with-mpfr=/Users/andreas/QEMU/OpenBIOS/bin
Thread model: single
gcc version 4.5.1 (GCC)
Andreas
> +enum {
> + DISPLAY_CHARACTER = 1,
> +};
> +
> +void rtas_interface(rtas_args_t* params, void* privateData)
> +{
> + switch (params->token) {
> + case DISPLAY_CHARACTER: {
> + serial_putchar((char)params->args[0]);
> + serial_putchar('x');
> + params->args[params->nargs] = 0;
> + break;
> + }
> + default:
> + serial_putchar('.');
> + params->args[params->nargs] = -1;
> + break;
> + }
> + serial_putchar('\r');
> + serial_putchar('\n');
> +}
More information about the OpenBIOS
mailing list