prom_parse.c (910B)
1// SPDX-License-Identifier: GPL-2.0 2#undef DEBUG 3 4#include <linux/kernel.h> 5#include <linux/string.h> 6#include <linux/ioport.h> 7#include <linux/etherdevice.h> 8#include <linux/of_address.h> 9#include <asm/prom.h> 10 11void of_parse_dma_window(struct device_node *dn, const __be32 *dma_window, 12 unsigned long *busno, unsigned long *phys, 13 unsigned long *size) 14{ 15 u32 cells; 16 const __be32 *prop; 17 18 /* busno is always one cell */ 19 *busno = of_read_number(dma_window, 1); 20 dma_window++; 21 22 prop = of_get_property(dn, "ibm,#dma-address-cells", NULL); 23 if (!prop) 24 prop = of_get_property(dn, "#address-cells", NULL); 25 26 cells = prop ? of_read_number(prop, 1) : of_n_addr_cells(dn); 27 *phys = of_read_number(dma_window, cells); 28 29 dma_window += cells; 30 31 prop = of_get_property(dn, "ibm,#dma-size-cells", NULL); 32 cells = prop ? of_read_number(prop, 1) : of_n_size_cells(dn); 33 *size = of_read_number(dma_window, cells); 34}