37#include <sys/libkern.h>
38#include <sys/reboot.h>
41#include <machine/bus.h>
54 res =
OF_getencprop(node,
"#address-cells", &addr,
sizeof(addr));
61 if (addr == 3 &&
size == 2) {
62 res =
OF_getprop(node,
"device_type", type,
sizeof(type));
64 type[
sizeof(type) - 1] =
'\0';
65 if (strcmp(type,
"pci") == 0 ||
66 strcmp(type,
"pciex")== 0)
80 bus_size_t *psize,
pcell_t *ppci_hi)
84 uint64_t addr, raddr, baddr;
86 uint32_t c, nbridge, naddr, nsize;
99 if (paddr == NULL || psize == NULL)
107 if (res %
sizeof(cell[0]))
109 res /=
sizeof(cell[0]);
110 regno *= naddr + nsize;
111 if (regno + naddr + nsize > res)
116 for (c = 0; c < naddr; c++)
117 addr = ((uint64_t)addr << 32) | cell[regno++];
119 for (c = 0; c < nsize; c++)
120 size = ((uint64_t)
size << 32) | cell[regno++];
136 if (res %
sizeof(cell[0]))
143 res /=
sizeof(cell[0]);
145 while (regno < res) {
149 regno += naddr + nbridge + nsize;
153 for (c = 0; c < naddr; c++)
154 raddr = ((uint64_t)raddr << 32) | cell[regno++];
159 for (c = 0; c < nbridge; c++)
160 baddr = ((uint64_t)baddr << 32) | cell[regno++];
162 for (c = 0; c < nsize; c++)
163 rsize = ((uint64_t)rsize << 32) | cell[regno++];
164 if (addr < raddr || addr >= raddr + rsize)
166 addr = addr - raddr + baddr;
176 KASSERT(addr <= BUS_SPACE_MAXADDR,
177 (
"Bus address is too large: %jx", (uintmax_t)addr));
178 KASSERT(
size <= BUS_SPACE_MAXSIZE,
179 (
"Bus size is too large: %jx", (uintmax_t)
size));
204 if ((err =
OF_getprop(chosen,
"bootargs", buf,
sizeof(buf))) != -1) {
205 boothowto |= boot_parse_cmdline(buf);
METHOD phandle_t parent
Return parent of node.
#define OFW_PCI_PHYS_HI_SPACEMASK
int ofw_reg_to_paddr(phandle_t dev, int regno, bus_addr_t *paddr, bus_size_t *psize, pcell_t *ppci_hi)
int ofw_parse_bootargs(void)
static void get_addr_props(phandle_t node, uint32_t *addrp, uint32_t *sizep, int *pcip)
#define OFW_PADDR_NOT_PCI
phandle_t OF_finddevice(const char *device)
phandle_t OF_parent(phandle_t node)
ssize_t OF_getencprop(phandle_t node, const char *propname, pcell_t *buf, size_t len)
ssize_t OF_getprop(phandle_t package, const char *propname, void *buf, size_t buflen)