亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dma-noncoherent.c

?? Linux Kernel 2.6.9 for OMAP1710
?? C
字號:
/* * This file is subject to the terms and conditions of the GNU General Public * License.  See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2000  Ani Joshi <ajoshi@unixbox.com> * Copyright (C) 2000, 2001  Ralf Baechle <ralf@gnu.org> * swiped from i386, and cloned for MIPS by Geert, polished by Ralf. */#include <linux/config.h>#include <linux/types.h>#include <linux/mm.h>#include <linux/module.h>#include <linux/string.h>#include <linux/dma-mapping.h>#include <asm/cache.h>#include <asm/io.h>/* * Warning on the terminology - Linux calls an uncached area coherent; * MIPS terminology calls memory areas with hardware maintained coherency * coherent. */void *dma_alloc_noncoherent(struct device *dev, size_t size,	dma_addr_t * dma_handle, int gfp){	void *ret;	/* ignore region specifiers */	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))		gfp |= GFP_DMA;	ret = (void *) __get_free_pages(gfp, get_order(size));	if (ret != NULL) {		memset(ret, 0, size);		*dma_handle = virt_to_phys(ret);	}	return ret;}EXPORT_SYMBOL(dma_alloc_noncoherent);void *dma_alloc_coherent(struct device *dev, size_t size,	dma_addr_t * dma_handle, int gfp){	void *ret;	ret = dma_alloc_noncoherent(dev, size, dma_handle, gfp);	if (ret) {		dma_cache_wback_inv((unsigned long) ret, size);		ret = UNCAC_ADDR(ret);	}	return ret;}EXPORT_SYMBOL(dma_alloc_coherent);void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,	dma_addr_t dma_handle){	free_pages((unsigned long) vaddr, get_order(size));}EXPORT_SYMBOL(dma_free_noncoherent);void dma_free_coherent(struct device *dev, size_t size, void *vaddr,	dma_addr_t dma_handle){	unsigned long addr = (unsigned long) vaddr;	addr = CAC_ADDR(addr);	free_pages(addr, get_order(size));}EXPORT_SYMBOL(dma_free_coherent);static inline void __dma_sync(unsigned long addr, size_t size,	enum dma_data_direction direction){	switch (direction) {	case DMA_TO_DEVICE:		dma_cache_wback(addr, size);		break;	case DMA_FROM_DEVICE:		dma_cache_inv(addr, size);		break;	case DMA_BIDIRECTIONAL:		dma_cache_wback_inv(addr, size);		break;	default:		BUG();	}}dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,	enum dma_data_direction direction){	unsigned long addr = (unsigned long) ptr;	switch (direction) {	case DMA_TO_DEVICE:		dma_cache_wback(addr, size);		break;	case DMA_FROM_DEVICE:		dma_cache_inv(addr, size);		break;	case DMA_BIDIRECTIONAL:		dma_cache_wback_inv(addr, size);		break;	default:		BUG();	}	return virt_to_phys(ptr);}EXPORT_SYMBOL(dma_map_single);void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,	enum dma_data_direction direction){	unsigned long addr;	addr = dma_addr + PAGE_OFFSET;	switch (direction) {	case DMA_TO_DEVICE:		//dma_cache_wback(addr, size);		break;	case DMA_FROM_DEVICE:		//dma_cache_inv(addr, size);		break;	case DMA_BIDIRECTIONAL:		//dma_cache_wback_inv(addr, size);		break;	default:		BUG();	}}EXPORT_SYMBOL(dma_unmap_single);int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,	enum dma_data_direction direction){	int i;	BUG_ON(direction == DMA_NONE);	for (i = 0; i < nents; i++, sg++) {		unsigned long addr; 		addr = (unsigned long) page_address(sg->page);		if (addr)			__dma_sync(addr + sg->offset, sg->length, direction);		sg->dma_address = (dma_addr_t)			(page_to_phys(sg->page) + sg->offset);	}	return nents;}EXPORT_SYMBOL(dma_map_sg);dma_addr_t dma_map_page(struct device *dev, struct page *page,	unsigned long offset, size_t size, enum dma_data_direction direction){	unsigned long addr;	BUG_ON(direction == DMA_NONE);	addr = (unsigned long) page_address(page) + offset;	dma_cache_wback_inv(addr, size);	return page_to_phys(page) + offset;}EXPORT_SYMBOL(dma_map_page);void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,	enum dma_data_direction direction){	BUG_ON(direction == DMA_NONE);	if (direction != DMA_TO_DEVICE) {		unsigned long addr;		addr = dma_address + PAGE_OFFSET;		dma_cache_wback_inv(addr, size);	}}EXPORT_SYMBOL(dma_unmap_page);void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,	enum dma_data_direction direction){	unsigned long addr;	int i;	BUG_ON(direction == DMA_NONE);	if (direction == DMA_TO_DEVICE)		return;	for (i = 0; i < nhwentries; i++, sg++) {		addr = (unsigned long) page_address(sg->page);		if (!addr)			continue;		dma_cache_wback_inv(addr + sg->offset, sg->length);	}}EXPORT_SYMBOL(dma_unmap_sg);void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,	size_t size, enum dma_data_direction direction){	unsigned long addr; 	BUG_ON(direction == DMA_NONE); 	addr = dma_handle + PAGE_OFFSET;	__dma_sync(addr, size, direction);}EXPORT_SYMBOL(dma_sync_single_for_cpu);void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle,	size_t size, enum dma_data_direction direction){	unsigned long addr;	BUG_ON(direction == DMA_NONE);	addr = dma_handle + PAGE_OFFSET;	__dma_sync(addr, size, direction);}EXPORT_SYMBOL(dma_sync_single_for_device);void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,	unsigned long offset, size_t size, enum dma_data_direction direction){	unsigned long addr;	BUG_ON(direction == DMA_NONE);	addr = dma_handle + offset + PAGE_OFFSET;	__dma_sync(addr, size, direction);}EXPORT_SYMBOL(dma_sync_single_range_for_cpu);void dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,	unsigned long offset, size_t size, enum dma_data_direction direction){	unsigned long addr;	BUG_ON(direction == DMA_NONE);	addr = dma_handle + offset + PAGE_OFFSET;	__dma_sync(addr, size, direction);}EXPORT_SYMBOL(dma_sync_single_range_for_device);void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,	enum dma_data_direction direction){	int i; 	BUG_ON(direction == DMA_NONE); 	/* Make sure that gcc doesn't leave the empty loop body.  */	for (i = 0; i < nelems; i++, sg++)		__dma_sync((unsigned long)page_address(sg->page),		           sg->length, direction);}EXPORT_SYMBOL(dma_sync_sg_for_cpu);void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,	enum dma_data_direction direction){	int i;	BUG_ON(direction == DMA_NONE);	/* Make sure that gcc doesn't leave the empty loop body.  */	for (i = 0; i < nelems; i++, sg++)		__dma_sync((unsigned long)page_address(sg->page),		           sg->length, direction);}EXPORT_SYMBOL(dma_sync_sg_for_device);int dma_mapping_error(dma_addr_t dma_addr){	return 0;}EXPORT_SYMBOL(dma_mapping_error);int dma_supported(struct device *dev, u64 mask){	/*	 * we fall back to GFP_DMA when the mask isn't all 1s,	 * so we can't guarantee allocations that must be	 * within a tighter range than GFP_DMA..	 */	if (mask < 0x00ffffff)		return 0;	return 1;}EXPORT_SYMBOL(dma_supported);int dma_is_consistent(dma_addr_t dma_addr){	return 1;}EXPORT_SYMBOL(dma_is_consistent);void dma_cache_sync(void *vaddr, size_t size, enum dma_data_direction direction){	if (direction == DMA_NONE)		return;	dma_cache_wback_inv((unsigned long)vaddr, size);}EXPORT_SYMBOL(dma_cache_sync);/* The DAC routines are a PCIism.. */#ifdef CONFIG_PCI#include <linux/pci.h>dma64_addr_t pci_dac_page_to_dma(struct pci_dev *pdev,	struct page *page, unsigned long offset, int direction){	return (dma64_addr_t)page_to_phys(page) + offset;}EXPORT_SYMBOL(pci_dac_page_to_dma);struct page *pci_dac_dma_to_page(struct pci_dev *pdev,	dma64_addr_t dma_addr){	return mem_map + (dma_addr >> PAGE_SHIFT);}EXPORT_SYMBOL(pci_dac_dma_to_page);unsigned long pci_dac_dma_to_offset(struct pci_dev *pdev,	dma64_addr_t dma_addr){	return dma_addr & ~PAGE_MASK;}EXPORT_SYMBOL(pci_dac_dma_to_offset);void pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev,	dma64_addr_t dma_addr, size_t len, int direction){	BUG_ON(direction == PCI_DMA_NONE);	dma_cache_wback_inv(dma_addr + PAGE_OFFSET, len);}EXPORT_SYMBOL(pci_dac_dma_sync_single_for_cpu);void pci_dac_dma_sync_single_for_device(struct pci_dev *pdev,	dma64_addr_t dma_addr, size_t len, int direction){	BUG_ON(direction == PCI_DMA_NONE);	dma_cache_wback_inv(dma_addr + PAGE_OFFSET, len);}EXPORT_SYMBOL(pci_dac_dma_sync_single_for_device);#endif /* CONFIG_PCI */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美精品电影三级在线| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一卡二卡三卡四卡| 一本大道综合伊人精品热热 | 国产毛片精品视频| 久久久精品黄色| 成人黄色av网站在线| ...中文天堂在线一区| 日本乱人伦aⅴ精品| 亚洲成av人影院在线观看网| 91.com在线观看| 国产在线播放一区三区四| 国产欧美一区在线| 色av综合在线| 美日韩一区二区| 中文一区二区完整视频在线观看| 成人午夜av电影| 亚洲制服欧美中文字幕中文字幕| 91麻豆精品国产91久久久更新时间| 日韩精品一二区| 久久久国产精品麻豆| 91香蕉视频黄| 老色鬼精品视频在线观看播放| 精品福利一二区| 一本色道a无线码一区v| 91福利精品视频| 日本亚洲电影天堂| 欧美高清在线一区二区| 欧美日韩视频一区二区| 国产精品资源在线观看| 亚洲国产视频在线| 久久尤物电影视频在线观看| 91视频91自| 九一九一国产精品| 樱桃国产成人精品视频| 337p日本欧洲亚洲大胆色噜噜| 91香蕉视频在线| 国内精品伊人久久久久av一坑| 亚洲精品一二三| 久久精品欧美一区二区三区不卡 | 九九热在线视频观看这里只有精品| 国产日本亚洲高清| 欧美精品久久99| 91视视频在线观看入口直接观看www| 日本伊人精品一区二区三区观看方式 | 欧美日韩免费高清一区色橹橹 | 亚洲v中文字幕| 国产日产欧美一区二区三区| 3d动漫精品啪啪| 91美女片黄在线| 国产精品一二三四五| 日本伊人色综合网| 一区2区3区在线看| 1024成人网色www| 久久久99免费| 日韩精品中文字幕一区 | 偷窥少妇高潮呻吟av久久免费| 日本一区二区三区视频视频| 91麻豆精品国产91久久久久久久久 | 奇米亚洲午夜久久精品| 亚洲愉拍自拍另类高清精品| 国产精品你懂的在线欣赏| 欧美大片一区二区| 91精品国产综合久久久久久| 欧美日韩在线播放| 在线精品视频一区二区| 99久久综合狠狠综合久久| 国产高清视频一区| 国产精品综合一区二区三区| 久久精品国产亚洲一区二区三区| 午夜精品久久久| 亚洲成人激情自拍| 亚洲一二三区不卡| 亚洲一区二区中文在线| 亚洲精品视频一区二区| 亚洲女人的天堂| 国产精品国产三级国产有无不卡 | 美日韩黄色大片| 免费欧美在线视频| 蜜臀91精品一区二区三区| 秋霞av亚洲一区二区三| 琪琪久久久久日韩精品| 美女视频黄免费的久久 | 韩国v欧美v亚洲v日本v| 美女视频黄a大片欧美| 久久99这里只有精品| 国内久久精品视频| 高清国产午夜精品久久久久久| 国产大陆精品国产| 北岛玲一区二区三区四区| 色综合夜色一区| 欧美日韩中文精品| 日韩免费视频一区| 久久综合一区二区| 国产精品久久久久久久第一福利 | 亚洲一区二区三区四区在线| 天天综合网天天综合色| 麻豆精品一区二区三区| 国产91在线看| 91捆绑美女网站| 欧美日韩国产综合久久| 欧美刺激脚交jootjob| 国产女人水真多18毛片18精品视频| 国产精品家庭影院| 亚洲一区二区三区四区五区黄| 日本美女一区二区三区视频| 国产福利电影一区二区三区| 91在线看国产| 亚洲一区二区三区爽爽爽爽爽| 日本中文在线一区| 国产成人精品影视| 在线视频你懂得一区二区三区| 欧美一区二区国产| 中文字幕乱码日本亚洲一区二区| 一区二区免费在线播放| 麻豆中文一区二区| 91亚洲精华国产精华精华液| 欧美一区二区三区影视| 国产精品不卡在线| 美女视频免费一区| 91猫先生在线| 精品国产精品一区二区夜夜嗨| 国产精品初高中害羞小美女文| 免费精品视频最新在线| 成人福利视频在线| 日韩精品一区二区三区swag | 国产呦萝稀缺另类资源| 91传媒视频在线播放| 欧美精品一区二| 亚洲国产美女搞黄色| 国产成人综合自拍| 欧美一区二区三区在线观看视频| 国产精品国产精品国产专区不片| 日本成人超碰在线观看| 日本韩国一区二区| 国产欧美日产一区| 美女一区二区在线观看| 欧美三级欧美一级| 中文字幕亚洲视频| 国产精品一区二区三区99| 欧美美女黄视频| 亚洲精品日韩综合观看成人91| 国产精品99久久久久久宅男| 91精品国产福利在线观看| 亚洲精品乱码久久久久久久久 | 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲欧美电影院| 国产精品亚洲午夜一区二区三区| 6080yy午夜一二三区久久| 一区二区三区在线观看网站| 成人黄色a**站在线观看| 精品国产不卡一区二区三区| 青青草一区二区三区| 欧美日韩中文字幕一区| 亚洲黄色免费电影| 色视频欧美一区二区三区| 亚洲欧洲三级电影| 成人激情午夜影院| 欧美激情一区二区在线| 国产高清久久久| 中国av一区二区三区| 国产精品18久久久| 久久嫩草精品久久久精品一| 久久精品国产99国产精品| 日韩一区二区精品| 青青草成人在线观看| 91精品国产色综合久久ai换脸| 亚洲成av人在线观看| 欧美日韩夫妻久久| 天堂一区二区在线| 制服丝袜av成人在线看| 日韩电影在线免费| 日韩三级精品电影久久久| 久久99国产精品成人| 久久久午夜精品| 国产91精品免费| 国产精品成人免费在线| 色综合久久久久综合| 一级精品视频在线观看宜春院| 在线视频一区二区免费| 三级影片在线观看欧美日韩一区二区| 欧美日韩国产综合视频在线观看| 日本视频在线一区| 欧美午夜一区二区三区免费大片| 国产日韩欧美不卡| 日韩av电影免费观看高清完整版在线观看| 91久久国产最好的精华液| 亚洲另类春色校园小说| 欧美日韩国产一级片| 麻豆一区二区三区| 欧美国产日韩在线观看| 欧美一区二区三区系列电影| 久久综合九色综合欧美就去吻| 一区二区三区在线视频免费| 久久国产精品露脸对白| 色噜噜夜夜夜综合网| 亚洲图片另类小说| 精品一区二区av| 在线观看一区二区精品视频| 久久久不卡网国产精品一区|