⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1000.tangox.patch

📁 sm86xx内核源包括补丁( GPL )的
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
++ifneq '$(filter -DWITH_PROD=1 -DWITH_FACSPROD=1, $(RMCFLAGS))' ''+CERT_ID=000c+#CERT_ID=000a+CERT_TYPE=ES4_prod+else+CERT_ID=000b+CERT_TYPE=ES4_dev+endif++internal_hex = 0x$(shell printf "%x" $$(($(1))))++core-$(CONFIG_TANGOX)		+= arch/mips/tangox/++ifdef CONFIG_TANGO2+cflags-$(CONFIG_TANGO2)		+= -Iinclude/asm-mips/mach-tango2+cflags-$(CONFIG_TANGO2)		+= -DEM86XX_CHIP=EM86XX_CHIPID_TANGO2+cflags-$(CONFIG_TANGO2_ES1)	+= -DEM86XX_REVISION=1+cflags-$(CONFIG_TANGO2_ES2)	+= -DEM86XX_REVISION=2+cflags-$(CONFIG_TANGO2_ES3)	+= -DEM86XX_REVISION=3+cflags-$(CONFIG_TANGO2_ES4)	+= -DEM86XX_REVISION=4+cflags-$(CONFIG_TANGO2_ES5)	+= -DEM86XX_REVISION=5+cflags-$(CONFIG_TANGO2_ES6)	+= -DEM86XX_REVISION=6+load-$(CONFIG_TANGO2)		:= $(call internal_hex,0x80000000+	\+					$(MEM_BASE_dram_controller_0_alias)+	\+					$(FM_linuxmips__ftext))+else+ifdef CONFIG_TANGO3+cflags-$(CONFIG_TANGO3)		+= -Iinclude/asm-mips/mach-tango3+cflags-$(CONFIG_TANGO3)		+= -DEM86XX_CHIP=EM86XX_CHIPID_TANGO3+cflags-$(CONFIG_TANGO3_ES1)	+= -DEM86XX_REVISION=1+load-$(CONFIG_TANGO3)		:= $(call internal_hex,0x80000000+	\+					$(MEM_BASE_dram_controller_0_alias)+	\+					$(FM_linuxmips__ftext))+endif+endif++CLEAN_FILES += arch/mips/boot/vmlinux.zbf \+		arch/mips/boot/vmlinux.gz \+		arch/mips/boot/xrpc_xload_vmlinux_$(CERT_TYPE).bin \+		arch/mips/boot/xrpc_xload_vmlinux_sha1_$(CERT_TYPE).bin \+		arch/mips/boot/zbimage-linux-xrpc \+		arch/mips/boot/zbimage-linux-enc \+		arch/mips/boot/vmlinux.8634_$(CERT_TYPE)_$(CERT_ID).bin \+		arch/mips/boot/vmlinux_sha1.8634_$(CERT_TYPE)_$(CERT_ID).bin \+		arch/mips/boot/vmlinux_$(CERT_TYPE).xload \+		arch/mips/boot/vmlinux_sha1_$(CERT_TYPE).xload \+		arch/mips/boot/vmlinux_enc.bin \+		arch/mips/boot/vmlinux_enc.zbf \+		arch/mips/boot/vmlinux_sha1.zbf + # # Toshiba JMR-TX3927 board #@@ -781,7 +847,11 @@ vmlinux.64: vmlinux 	$(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@ -makeboot =$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) $(1)+ifdef CONFIG_TANGOX+makeboot =$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) $(1) loadaddr=$(2) certtype=$(3) certid=$(4)+else+makeboot =$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) $(1) +endif  ifdef CONFIG_BOOT_ELF32 all:	$(vmlinux-32)@@ -820,14 +890,25 @@ vmlinux.srec: $(vmlinux-32) 	+@$(call makeboot,$@) +ifdef CONFIG_TANGOX+zbimage-linux-xrpc: vmlinux.bin+	+@$(call makeboot,$@,$(load-y),$(CERT_TYPE),$(CERT_ID))++zbimage-linux-enc: vmlinux.bin+	+@$(call makeboot,$@,$(load-y),$(CERT_TYPE),$(CERT_ID))+endif+ CLEAN_FILES += vmlinux.ecoff \ 	       vmlinux.srec \ 	       vmlinux.rm200.tmp \ 	       vmlinux.rm200  archclean:-	@$(MAKE) $(clean)=arch/mips/boot-	@$(MAKE) $(clean)=arch/mips/lasat+	$(Q)$(MAKE) $(clean)=arch/mips/boot+	$(Q)$(MAKE) $(clean)=arch/mips/lasat++#	@$(MAKE) $(clean)=arch/mips/boot+#	@$(MAKE) $(clean)=arch/mips/lasat  CLEAN_FILES += vmlinux.32 \ 	       vmlinux.64 \diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linux-2.6.15.ref/arch/mips/mm/dma-tangox.c linux-2.6.15/arch/mips/mm/dma-tangox.c--- linux-2.6.15.ref/arch/mips/mm/dma-tangox.c	1969-12-31 16:00:00.000000000 -0800+++ linux-2.6.15/arch/mips/mm/dma-tangox.c	2007-07-05 15:25:36.000000000 -0700@@ -0,0 +1,408 @@+/*+ * 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 <linux/pci.h>++#include <asm/cache.h>+#include <asm/io.h>++#ifdef CONFIG_TANGO2+#include <asm/tango2/hardware.h>+#elif defined(CONFIG_TANGO3)+#include <asm/tango3/hardware.h>+#endif++extern unsigned long g_pcimem_busaddr;+extern unsigned long g_pcimem_physaddr;+extern unsigned long g_pcimem_physaddr_end;++#ifdef CONFIG_PCI+#define IS_PCIDEV(x)	((x)->bus == &pci_bus_type)+#else+#define IS_PCIDEV(x)	0+#endif+++#ifdef CONFIG_PCI+static inline unsigned long __pci_virt_to_bus(unsigned long addr)+{+	if ((CPHYSADDR(addr) < g_pcimem_physaddr) ||+	    (CPHYSADDR(addr) >= g_pcimem_physaddr_end))+		printk("virt2bus: Not a dma-able address: 0x%08lx\n", addr);+	return((unsigned long)(CPHYSADDR(addr) - g_pcimem_physaddr ++			       g_pcimem_busaddr));+}++static inline unsigned long __pci_bus_to_virt(unsigned long addr)+{+	if ((addr < g_pcimem_busaddr) ||+	    (addr >= (g_pcimem_busaddr ++		      (g_pcimem_physaddr_end - g_pcimem_physaddr))))+		printk("bus2virt: Not a valid bus address: 0x%08lx\n",+		       addr);+	return((unsigned long)(addr - g_pcimem_busaddr ++			       g_pcimem_physaddr + UNCAC_BASE));+}+#else+static inline unsigned long __pci_virt_to_bus(unsigned long addr)+{+	return(addr);+}++static inline unsigned long __pci_bus_to_virt(unsigned long addr)+{+	return(addr);+}+#endif+++/*+ * 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, gfp_t 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);+		if (IS_PCIDEV(dev))+			*dma_handle = __pci_virt_to_bus((unsigned long)ret);+		else+			*dma_handle = tangox_dma_address(CPHYSADDR(ret));+	}++	return ret;+}++EXPORT_SYMBOL(dma_alloc_noncoherent);++void *dma_alloc_coherent(struct device *dev, size_t size,+	dma_addr_t * dma_handle, gfp_t 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);+//	dma_cache_inv(addr, size);+	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;++	__dma_sync(addr, size, direction);++	if (IS_PCIDEV(dev)) {+		return __pci_virt_to_bus(addr);+	}+	return tangox_dma_address(CPHYSADDR(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;++	if (IS_PCIDEV(dev)) {+		addr = CAC_ADDR(__pci_bus_to_virt(dma_addr));+	} else {+		addr = tangox_inv_dma_address(dma_addr) + PAGE_OFFSET;+	}+	//__dma_sync(addr, size, direction);+}++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);+			if (IS_PCIDEV(dev)) {+				sg->dma_address =+					__pci_virt_to_bus(page_to_phys(sg->page) + sg->offset);+			} else {+				sg->dma_address =+					tangox_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);++	if (IS_PCIDEV(dev))+		return __pci_virt_to_bus(page_to_phys(page)) + offset;+	return tangox_dma_address(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;++		if (IS_PCIDEV(dev)) {+			addr = CAC_ADDR(__pci_bus_to_virt(dma_address));+		} else {+			addr = tangox_inv_dma_address(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)+			__dma_sync(addr + sg->offset, sg->length, direction);+	}+}++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);++	if (IS_PCIDEV(dev)) {+		addr = CAC_ADDR(__pci_bus_to_virt((unsigned long)dma_handle));+	} else {+		addr = tangox_inv_dma_address(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);++	if (IS_PCIDEV(dev)) {+		addr = CAC_ADDR(__pci_bus_to_virt((unsigned long)dma_handle));+	} else {+		addr = tangox_inv_dma_address(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);++	if (IS_PCIDEV(dev)) {+		addr = CAC_ADDR(__pci_bus_to_virt((unsigned long)dma_handle) + offset);+	} else {+		addr = tangox_inv_dma_address(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);++	if (IS_PCIDEV(dev)) {+		addr = CAC_ADDR(__pci_bus_to_virt((unsigned long)dma_handle) + offset);+	} else {+		addr = tangox_inv_dma_address(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);+}+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -