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(); } }
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; }
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; }
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; }