Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at ee9dce44362b2d8132c32964656ab6dff7dfbc6a 111 lines 3.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __OF_RESERVED_MEM_H 3#define __OF_RESERVED_MEM_H 4 5#include <linux/device.h> 6#include <linux/of.h> 7 8struct of_phandle_args; 9struct reserved_mem_ops; 10struct resource; 11 12struct reserved_mem { 13 const char *name; 14 const struct reserved_mem_ops *ops; 15 phys_addr_t base; 16 phys_addr_t size; 17 void *priv; 18}; 19 20struct reserved_mem_ops { 21 int (*node_validate)(unsigned long fdt_node, phys_addr_t *align); 22 int (*node_fixup)(unsigned long fdt_node, phys_addr_t base, 23 phys_addr_t size); 24 int (*node_init)(unsigned long fdt_node, struct reserved_mem *rmem); 25 int (*device_init)(struct reserved_mem *rmem, 26 struct device *dev); 27 void (*device_release)(struct reserved_mem *rmem, 28 struct device *dev); 29}; 30 31#ifdef CONFIG_OF_RESERVED_MEM 32 33#define RESERVEDMEM_OF_DECLARE(name, compat, ops) \ 34 _OF_DECLARE(reservedmem, name, compat, ops, struct reserved_mem_ops *) 35 36int of_reserved_mem_device_init_by_idx(struct device *dev, 37 struct device_node *np, int idx); 38int of_reserved_mem_device_init_by_name(struct device *dev, 39 struct device_node *np, 40 const char *name); 41void of_reserved_mem_device_release(struct device *dev); 42 43struct reserved_mem *of_reserved_mem_lookup(struct device_node *np); 44int of_reserved_mem_region_to_resource(const struct device_node *np, 45 unsigned int idx, struct resource *res); 46int of_reserved_mem_region_to_resource_byname(const struct device_node *np, 47 const char *name, struct resource *res); 48int of_reserved_mem_region_count(const struct device_node *np); 49 50#else 51 52#define RESERVEDMEM_OF_DECLARE(name, compat, ops) \ 53 _OF_DECLARE_STUB(reservedmem, name, compat, ops, \ 54 struct reserved_mem_ops *) 55 56static inline int of_reserved_mem_device_init_by_idx(struct device *dev, 57 struct device_node *np, int idx) 58{ 59 return -ENOSYS; 60} 61 62static inline int of_reserved_mem_device_init_by_name(struct device *dev, 63 struct device_node *np, 64 const char *name) 65{ 66 return -ENOSYS; 67} 68 69static inline void of_reserved_mem_device_release(struct device *pdev) { } 70 71static inline struct reserved_mem *of_reserved_mem_lookup(struct device_node *np) 72{ 73 return NULL; 74} 75 76static inline int of_reserved_mem_region_to_resource(const struct device_node *np, 77 unsigned int idx, 78 struct resource *res) 79{ 80 return -ENOSYS; 81} 82 83static inline int of_reserved_mem_region_to_resource_byname(const struct device_node *np, 84 const char *name, 85 struct resource *res) 86{ 87 return -ENOSYS; 88} 89 90static inline int of_reserved_mem_region_count(const struct device_node *np) 91{ 92 return 0; 93} 94#endif 95 96/** 97 * of_reserved_mem_device_init() - assign reserved memory region to given device 98 * @dev: Pointer to the device to configure 99 * 100 * This function assigns respective DMA-mapping operations based on the first 101 * reserved memory region specified by 'memory-region' property in device tree 102 * node of the given device. 103 * 104 * Returns error code or zero on success. 105 */ 106static inline int of_reserved_mem_device_init(struct device *dev) 107{ 108 return of_reserved_mem_device_init_by_idx(dev, dev->of_node, 0); 109} 110 111#endif /* __OF_RESERVED_MEM_H */