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

📄 memory.c

📁 优龙2410linux2.6.8内核源代码
💻 C
字号:
/* *  linux/arch/m68knommu/mm/memory.c * *  Copyright (C) 1998  Kenneth Albanowski <kjahds@kjahds.com>, *  Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) * *  Based on: * *  linux/arch/m68k/mm/memory.c * *  Copyright (C) 1995  Hamish Macdonald */#include <linux/config.h>#include <linux/mm.h>#include <linux/kernel.h>#include <linux/string.h>#include <linux/types.h>#include <linux/slab.h>#include <asm/setup.h>#include <asm/segment.h>#include <asm/page.h>#include <asm/pgtable.h>#include <asm/system.h>#include <asm/traps.h>#include <asm/shglcore.h>#include <asm/io.h>/* * cache_clear() semantics: Clear any cache entries for the area in question, * without writing back dirty entries first. This is useful if the data will * be overwritten anyway, e.g. by DMA to memory. The range is defined by a * _physical_ address. */void cache_clear (unsigned long paddr, int len){}/* *	Define cache invalidate functions. The ColdFire 5407 is really *	the only processor that needs to do some work here. Anything *	that has separate data and instruction caches will be a problem. */#ifdef CONFIG_M5407static __inline__ void cache_invalidate_lines(unsigned long paddr, int len){	unsigned long	sset, eset;	sset = (paddr & 0x00000ff0);	eset = ((paddr + len) & 0x0000ff0) + 0x10;	__asm__ __volatile__ (		"nop\n\t"		"clrl	%%d0\n\t"		"1:\n\t"		"movel	%0,%%a0\n\t"		"addl	%%d0,%%a0\n\t"		"2:\n\t"		".word	0xf4e8\n\t"		"addl	#0x10,%%a0\n\t"		"cmpl	%1,%%a0\n\t"		"blt	2b\n\t"		"addql	#1,%%d0\n\t"		"cmpil	#4,%%d0\n\t"		"bne	1b"		: : "a" (sset), "a" (eset) : "d0", "a0" );}#else#define	cache_invalidate_lines(a,b)#endif/* * cache_push() semantics: Write back any dirty cache data in the given area, * and invalidate the range in the instruction cache. It needs not (but may) * invalidate those entries also in the data cache. The range is defined by a * _physical_ address. */void cache_push (unsigned long paddr, int len){	cache_invalidate_lines(paddr, len);}/* * cache_push_v() semantics: Write back any dirty cache data in the given * area, and invalidate those entries at least in the instruction cache. This * is intended to be used after data has been written that can be executed as * code later. The range is defined by a _user_mode_ _virtual_ address  (or, * more exactly, the space is defined by the %sfc/%dfc register.) */void cache_push_v (unsigned long vaddr, int len){	cache_invalidate_lines(vaddr, len);}/* Map some physical address range into the kernel address space. The * code is copied and adapted from map_chunk(). */unsigned long kernel_map(unsigned long paddr, unsigned long size,			 int nocacheflag, unsigned long *memavailp ){	return paddr;}int is_in_rom(unsigned long addr){	extern unsigned long _ramstart, _ramend;	/*	 *	What we are really trying to do is determine if addr is	 *	in an allocated kernel memory region. If not then assume	 *	we cannot free it or otherwise de-allocate it. Ideally	 *	we could restrict this to really being in a ROM or flash,	 *	but that would need to be done on a board by board basis,	 *	not globally.	 */	if ((addr < _ramstart) || (addr >= _ramend))		return(1);	/* Default case, not in ROM */	return(0);}

⌨️ 快捷键说明

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