0
     ˆÃÂƒ-³ÁÀÄ 	1    /* SPDX-License-Identifier: GPL-2.0 */
/*
 * OF helpers for DMA request / controller
 *
 * Based on of_gpio.h
 *
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 */

#ifndef __LINUX_OF_DMA_H
#define __LINUX_OF_DMA_H

#include <linux/of.h>
#include <linux/dmaengine.h>

struct device_node;

struct of_dma {
	struct list_head	of_dma_controllers;
	struct device_node	*of_node;
	struct dma_chan		*(*of_dma_xlate)
				(struct of_phandle_args *, struct of_dma *);
	void			*(*of_dma_route_allocate)
				(struct of_phandle_args *, struct of_dma *);
	struct dma_router	*dma_router;
	void			*of_dma_data;
};

struct of_dma_filter_info {
	dma_cap_mask_t	dma_cap;
	dma_filter_fn	filter_fn;
};

#ifdef CONFIG_DMA_OF
extern int of_dma_controller_register(struct device_node *np,
		struct dma_chan *(*of_dma_xlate)
		(struct of_phandle_args *, struct of_dma *),
		void *data);
extern void of_dma_controller_free(struct device_node *np);

extern int of_dma_router_register(struct device_node *np,
		void *(*of_dma_route_allocate)
		(struct of_phandle_args *, struct of_dma *),
		struct dma_router *dma_router);
#define of_dma_router_free of_dma_controller_free

extern struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
						     const char *name);
extern struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec,
		struct of_dma *ofdma);
extern struct dma_chan *of_dma_xlate_by_chan_id(struct of_phandle_args *dma_spec,
		struct of_dma *ofdma);

#else
static inline int of_dma_controller_register(struct device_node *np,
		struct dma_chan *(*of_dma_xlate)
		(struct of_phandle_args *, struct of_dma *),
		void *data)
{
	return -ENODEV;
}

static inline void of_dma_controller_free(struct device_node *np)
{
}

static inline int of_dma_router_register(struct device_node *np,
		void *(*of_dma_route_allocate)
		(struct of_phandle_args *, struct of_dma *),
		struct dma_router *dma_router)
{
	return -ENODEV;
}

#define of_dma_router_free of_dma_controller_free

static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
						     const char *name)
{
	return ERR_PTR(-ENODEV);
}

static inline struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec,
		struct of_dma *ofdma)
{
	return NULL;
}

#define of_dma_xlate_by_chan_id NULL

#endif

#endif /* __LINUX_OF_DMA_H */
  0   ˆl–ßi~”êh¥8 Eq‘\eµ1hßÃƒd._ŒuÐb&=Ly[Ï¿ÂÆ X    ý7zXZ  i"Þ6 !   t/å£àÕ]  hÍ:mÖéjŠÈøRƒ½Óžî<ÿ‡=¢Ÿ|Â¿ÐØ®�×î¿\S•ü“)qR£“â=¡†{¢á˜õQÇ�u6&>,�UŠ÷Ïüî£³-Ð ‚m¥5_*|—Zîî?.]P¡•*Tº{éËÍK(QÜ"ÙÂyíhí˜N–¼Â>ýá­Á?g½=Þ‡®–÷F|$óXUèÞ¡^.Ëp§·íºÚËxF¶ôº0oH+c)Í,´Ûdz¶T¢yÌŠk± ‘!-
íK½äÞÕN½s­ü#9ß"
Ú×¦ûòu™A°ªÐ(z¡Fó'mÙ)Ia�~üì³ïºý^ÚôZé 6´´#2Û¼å´uéhÈ6IÛÄpšÿc·ßÖ9&‘@’^¶·ÆøtÇjÉë¦ãWÕŽë6d°ûBçèÄc¿ÂÛ‹e–°>FÓ¦ä È-Üµ°}àÑô)nOwsÚñãÎ·qMuÓJ£œÛõýò5CöÐeAjº�C=òØú‹jmÕ£¡"ÁI—õÎaõp%>¦5Ïx¦É¦XrBÁ%ø¸’å�ê×b,†	'™Š@ÁÚ)Ï€ é
zi?Ì\	¶»ë_Ø›7¡�ÓÎSxŽøa�¼…‹E_@Í›°†¿•¯Ú“êm6þ*"F²%¨¦„¡LkµTÆ…²ï�CÏŸ¨}4dé¤z'^u¿§d½ï„÷!®i¹RyKÄÒ&H%W.›Š·•ù£z«–Ò�gsìû&ÿrêu >‡»=œ,îqà÷7r#±Æ˜§�CjÍÆ_~³TZ-£®¿Ó©ïåJG z¿»·ö	OrG“ÌfÑ®ê�?ÈàoQåí7F`\Îƒè2³ŒÞ¤-ì,&F}s®÷à›<Ž§…þÓ­u„Ž€L3¶U^<ª—�ÕÀCs §
ˆTÜîÄ§lQƒ,ò³ú ÕxÏÌó|e‰C�}Þ)�¶„ôk¬/]ä¦ä…–qÎÄŽ õ¯»¨ˆ(æ ´Z“‘8/àOPÍ'cÉ$Ž/¸%@âº$…îøÛÈe³ÖÇÉóf°p/Hç$jóq›÷ò¦F’^ê`…ðE¶É¶›ãÛ¾ÏeE|÷«©ÓªãnU.ÅAÆ›}å�ŽLÐ]ÂW�ÍCD­êúî}©›CÿÄß	æ›œ½^=¼w˜‘ýäg×–Ïg5t³ëêB\"	²êñòu
Fc†×GÑ ärM%ˆÆÈXÎü$M[öE"j‰•Gv@ìÅn‹Çz¿ë˜–Õ¹È=ìB´c}Ò	ìÁó—QÆ6íÇ»Cc–ÅØV1ŒË!Hþ¹óÍVñ±#Àó¨ºZá<P9Àß‘å×8s@'þ±
1Aìiêzµøs
ÂU‰
ÏúA”Ú�Xq³gc‰0¼ÎV•D§½€ù½°x±ž	¤Èšš®ßú6ÛGu/!=rFñò�¼–‰*yH2!Ìm‡é¶„ÌÀùbU*y2ÄÄ@j$Oxh-j4Xœ…jü¸{¡<'KË½‚-ÔóÄ-FÀ±„�µ	ÛÚ£vÒŒóôBßÒYOÊ�YûNøcŒÍN¶;9xÅí‚ÜÐU©k€JüHÉåŸ‹A¨•o™®ãï±‡¥ =Ê
Ý)ø§Fcë¡$ve¤ëò¯¯ñË?Yž¥5?Ò©Ô¿—Øñ¢ò3Î…F_zu®Ö¥NTå3Öb[ÉÊYH&\ÜÇyEv¬÷ó~Ô´‰ñåJÏ0ßç¢å¬}"›×¥Ï"ÌøŸýá¨€ç*3×Ðgåa^Ÿ}ñc|ŠV
3õ­˜Æ%Ÿ‰±ñOû‚w­®†¯f)ÝnÖ\DÜÛ÷7øº0ÒÖ!UÛ¢² -9s"uìôUØ�¤A^	?õûXƒþ8Ô^ÑÞR!f·“Ö¥ƒÖÚ¼�‰ ´*Ÿ	e¤Ð~{¥0j;ký�\=ÈoÓû ‡U�H„™™EŠzÜì‰´Îîyj¦û£ûç�Þf¨Æ`kœ"4@AÑ5ìV'm­X¨µó˜·;á¿7·×ÞÁn@£ýnëŸ¯æ¦×�`ß=˜ežä’N‚†¢¦ gƒ/õOåš¥¤#ŸÒUÊeämÑúK³zpÇ¸Ï£Ekw¿æ^"žñqã.#Ç?/G¬g£÷$Qr@å‡l~¬	�äÉð´™