81 lines
1.5 KiB
C
81 lines
1.5 KiB
C
|
#include <stdlib.h>
|
||
|
#include <errno.h>
|
||
|
#include <unistd.h>
|
||
|
#include "libsys.h"
|
||
|
|
||
|
static void* stdout_handle;
|
||
|
|
||
|
static void* of_finddevice(const char* name)
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
const char* method;
|
||
|
int ins, outs;
|
||
|
const char* name;
|
||
|
void* phandle;
|
||
|
} args;
|
||
|
|
||
|
args.method = "finddevice";
|
||
|
args.ins = 1;
|
||
|
args.outs = 1;
|
||
|
args.name = name;
|
||
|
openfirmware_call(&args);
|
||
|
return args.phandle;
|
||
|
}
|
||
|
|
||
|
static int of_getprop(void* phandle, const char* name, void* dest, int destlen)
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
const char* method;
|
||
|
int ins, outs;
|
||
|
void* phandle;
|
||
|
const char* name;
|
||
|
void* dest;
|
||
|
int destlen;
|
||
|
int flag;
|
||
|
} args;
|
||
|
|
||
|
args.method = "getprop";
|
||
|
args.ins = 4;
|
||
|
args.outs = 1;
|
||
|
args.phandle = phandle;
|
||
|
args.name = name;
|
||
|
args.dest = dest;
|
||
|
args.destlen = destlen;
|
||
|
openfirmware_call(&args);
|
||
|
return args.flag;
|
||
|
}
|
||
|
|
||
|
void openfirmware_init(void)
|
||
|
{
|
||
|
void* chosen = of_finddevice("/chosen");
|
||
|
of_getprop(chosen, "stdout", &stdout_handle, sizeof(stdout_handle));
|
||
|
}
|
||
|
|
||
|
unsigned char _sys_rawread(void)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void _sys_rawwrite(unsigned char c)
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
const char* method;
|
||
|
int ins, outs;
|
||
|
void* ihandle;
|
||
|
void* address;
|
||
|
int len;
|
||
|
int actual;
|
||
|
} args;
|
||
|
|
||
|
args.method = "write";
|
||
|
args.ins = 3;
|
||
|
args.outs = 1;
|
||
|
args.ihandle = stdout_handle;
|
||
|
args.address = &c;
|
||
|
args.len = 1;
|
||
|
openfirmware_call(&args);
|
||
|
}
|