示例#1
0
文件: promlib.c 项目: ryo/netbsd-src
void
prom_init(void)
{
    int phandle, size;

    OF_initialize();

    memset(&promops, 0, sizeof(promops));

    /* Access to boot arguments */
    promops.po_bootpath = openfirmware_bootpath;
    promops.po_bootfile = openfirmware_bootfile;
    promops.po_bootargs = openfirmware_bootargs;

    /* I/O functions */
    promops.po_getchar = openfirmware_getchar;
    promops.po_putchar = openfirmware_putchar;
    promops.po_open  = OF_open;
    promops.po_close = OF_close;
    promops.po_read  = OF_read;
    promops.po_write = OF_write;
    promops.po_seek  = OF_seek;

    promops.po_instance_to_package = OF_instance_to_package;

    /* Program termination control */
    promops.po_halt  = OF_exit;
    promops.po_abort = OF_enter;
    promops.po_ticks = OF_milliseconds;

    /* Device node traversal */
    promops.po_firstchild  = OF_child;
    promops.po_nextsibling = OF_peer;

    /* Device node properties */
    promops.po_getprop = OF_getprop;

    /* Device discovery */
    promops.po_finddevice = OF_finddevice;

    /* Console I/O */
    phandle = openfirmware_chosen();
    size = _prom_getprop(phandle, "stdin", &promops.po_stdin,
                         sizeof(promops.po_stdin));
    size += _prom_getprop(phandle, "stdout", &promops.po_stdout,
                          sizeof(promops.po_stdout));
    if (size != (sizeof(promops.po_stdin) + sizeof(promops.po_stdout))) {
        prom_halt();
    }
}
示例#2
0
int
netif_open(void *machdep_hint)
{
    struct of_dev *op = machdep_hint;
    struct iodesc *io;
    int fd, error;
    char addr[32];

#ifdef	NETIF_DEBUG
    printf("netif_open...");
#endif
    /* find a free socket */
    io = sockets;
    if (io->io_netif) {
#ifdef	NETIF_DEBUG
        printf("device busy\n");
#endif
        errno = ENFILE;
        return -1;
    }
    bzero(io, sizeof *io);

    netif_of.nif_devdata = op;
    io->io_netif = &netif_of;

    /* Put our ethernet address in io->myea */
    _prom_getprop(prom_instance_to_package(op->handle),
                  "mac-address", io->myea, sizeof io->myea);

#ifdef	NETIF_DEBUG
    printf("OK\n");
#endif
    return 0;
}
示例#3
0
文件: promlib.c 项目: ryo/netbsd-src
static const char*
openfirmware_bootargs(void)
{
    static char bootargs[PROM_MAX_PATH * 2];

    if (_prom_getprop(openfirmware_chosen(), "bootargs", bootargs,
                      sizeof(bootargs)) < 0) {
        openfirmware_fatal();
    }

    return bootargs;
}
示例#4
0
文件: promlib.c 项目: ryo/netbsd-src
static const char*
openfirmware_bootpath(void)
{
    static char bootpath[PROM_MAX_PATH];

    if (_prom_getprop(openfirmware_chosen(), "bootpath", bootpath,
                      sizeof(bootpath)) < 0) {
        openfirmware_fatal();
    }

    return bootpath;
}