|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | #ifndef __OF_RESERVED_MEM_H | 
|  | #define __OF_RESERVED_MEM_H | 
|  |  | 
|  | #include <linux/device.h> | 
|  | #include <linux/of.h> | 
|  |  | 
|  | struct of_phandle_args; | 
|  | struct reserved_mem_ops; | 
|  |  | 
|  | struct reserved_mem { | 
|  | const char			*name; | 
|  | unsigned long			fdt_node; | 
|  | unsigned long			phandle; | 
|  | const struct reserved_mem_ops	*ops; | 
|  | phys_addr_t			base; | 
|  | phys_addr_t			size; | 
|  | void				*priv; | 
|  | }; | 
|  |  | 
|  | struct reserved_mem_ops { | 
|  | int	(*device_init)(struct reserved_mem *rmem, | 
|  | struct device *dev); | 
|  | void	(*device_release)(struct reserved_mem *rmem, | 
|  | struct device *dev); | 
|  | }; | 
|  |  | 
|  | typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); | 
|  |  | 
|  | #ifdef CONFIG_OF_RESERVED_MEM | 
|  |  | 
|  | #define RESERVEDMEM_OF_DECLARE(name, compat, init)			\ | 
|  | _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn) | 
|  |  | 
|  | int of_reserved_mem_device_init_by_idx(struct device *dev, | 
|  | struct device_node *np, int idx); | 
|  | int of_reserved_mem_device_init_by_name(struct device *dev, | 
|  | struct device_node *np, | 
|  | const char *name); | 
|  | void of_reserved_mem_device_release(struct device *dev); | 
|  |  | 
|  | struct reserved_mem *of_reserved_mem_lookup(struct device_node *np); | 
|  | #else | 
|  |  | 
|  | #define RESERVEDMEM_OF_DECLARE(name, compat, init)			\ | 
|  | _OF_DECLARE_STUB(reservedmem, name, compat, init, reservedmem_of_init_fn) | 
|  |  | 
|  | static inline int of_reserved_mem_device_init_by_idx(struct device *dev, | 
|  | struct device_node *np, int idx) | 
|  | { | 
|  | return -ENOSYS; | 
|  | } | 
|  |  | 
|  | static inline int of_reserved_mem_device_init_by_name(struct device *dev, | 
|  | struct device_node *np, | 
|  | const char *name) | 
|  | { | 
|  | return -ENOSYS; | 
|  | } | 
|  |  | 
|  | static inline void of_reserved_mem_device_release(struct device *pdev) { } | 
|  |  | 
|  | static inline struct reserved_mem *of_reserved_mem_lookup(struct device_node *np) | 
|  | { | 
|  | return NULL; | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * of_reserved_mem_device_init() - assign reserved memory region to given device | 
|  | * @dev:	Pointer to the device to configure | 
|  | * | 
|  | * This function assigns respective DMA-mapping operations based on the first | 
|  | * reserved memory region specified by 'memory-region' property in device tree | 
|  | * node of the given device. | 
|  | * | 
|  | * Returns error code or zero on success. | 
|  | */ | 
|  | static inline int of_reserved_mem_device_init(struct device *dev) | 
|  | { | 
|  | return of_reserved_mem_device_init_by_idx(dev, dev->of_node, 0); | 
|  | } | 
|  |  | 
|  | #endif /* __OF_RESERVED_MEM_H */ |