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

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

?? c-rm7k.c

?? 該文件是rt_linux
?? 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. * * r4xx0.c: R4000 processor variant specific MMU/Cache routines. * * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) * Copyright (C) 1997, 1998 Ralf Baechle ralf@gnu.org * * To do: * *  - this code is a overbloated pig *  - many of the bug workarounds are not efficient at all, but at *    least they are functional ... */#include <linux/config.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/mm.h>#include <asm/io.h>#include <asm/page.h>#include <asm/pgtable.h>#include <asm/system.h>#include <asm/bootinfo.h>#include <asm/cpu.h>#include <asm/mmu_context.h>/* CP0 hazard avoidance. */#define BARRIER __asm__ __volatile__(".set noreorder\n\t" \				     "nop; nop; nop; nop; nop; nop;\n\t" \				     ".set reorder\n\t")/* Primary cache parameters. */static int icache_size, dcache_size; /* Size in bytes */#define ic_lsize	32		/* Fixed to 32 byte on RM7000  */#define dc_lsize	32		/* Fixed to 32 byte on RM7000  */#define sc_lsize	32		/* Fixed to 32 byte on RM7000  */#define tc_pagesize	(32*128)/* Secondary cache parameters. */#define scache_size	(256*1024)	/* Fixed to 256KiB on RM7000 */#include <asm/cacheops.h>#include <asm/r4kcache.h>int rm7k_tcache_enabled = 0;/* * Not added to asm/r4kcache.h because it seems to be RM7000-specific. */#define Page_Invalidate_T 0x16static inline void invalidate_tcache_page(unsigned long addr){	__asm__ __volatile__(		".set\tnoreorder\t\t\t# invalidate_tcache_page\n\t"		".set\tmips3\n\t"		"cache\t%1, (%0)\n\t"		".set\tmips0\n\t"		".set\treorder"		:		: "r" (addr),		  "i" (Page_Invalidate_T));}static void __flush_cache_all_d32i32(void){	blast_dcache32();	blast_icache32();}static inline void rm7k_flush_cache_all_d32i32(void){	/* Yes! Caches that don't suck ...  */}static void rm7k_flush_cache_range_d32i32(struct mm_struct *mm,					 unsigned long start,					 unsigned long end){	/* RM7000 caches are sane ...  */}static void rm7k_flush_cache_mm_d32i32(struct mm_struct *mm){	/* RM7000 caches are sane ...  */}static void rm7k_flush_cache_page_d32i32(struct vm_area_struct *vma,					unsigned long page){	/* RM7000 caches are sane ...  */}static void rm7k_flush_page_to_ram_d32i32(struct page * page){	/* Yes!  Caches that don't suck!  */}static void rm7k_flush_icache_range(unsigned long start, unsigned long end){	/*	 * FIXME: This is overdoing things and harms performance.	 */	__flush_cache_all_d32i32();}static void rm7k_flush_icache_page(struct vm_area_struct *vma,                                   struct page *page){	/*	 * FIXME: We should not flush the entire cache but establish some	 * temporary mapping and use hit_invalidate operation to flush out	 * the line from the cache.	 */	__flush_cache_all_d32i32();}/* * Writeback and invalidate the primary cache dcache before DMA. * (XXX These need to be fixed ...) */static voidrm7k_dma_cache_wback_inv(unsigned long addr, unsigned long size){	unsigned long end, a;	a = addr & ~(sc_lsize - 1);	end = (addr + size) & ~(sc_lsize - 1);	while (1) {		flush_dcache_line(a);	/* Hit_Writeback_Inv_D */		flush_scache_line(a);	/* Hit_Writeback_Inv_SD */		if (a == end) break;		a += sc_lsize;	}	if (!rm7k_tcache_enabled)		return;	a = addr & ~(tc_pagesize - 1);	end = (addr + size) & ~(tc_pagesize - 1);	while(1) {		invalidate_tcache_page(a);	/* Page_Invalidate_T */		if (a == end) break;		a += tc_pagesize;	}}static voidrm7k_dma_cache_inv(unsigned long addr, unsigned long size){	unsigned long end, a;	a = addr & ~(sc_lsize - 1);	end = (addr + size) & ~(sc_lsize - 1);	while (1) {		invalidate_dcache_line(a);	/* Hit_Invalidate_D */		invalidate_scache_line(a);	/* Hit_Invalidate_SD */		if (a == end) break;		a += sc_lsize;	}	if (!rm7k_tcache_enabled)		return;	a = addr & ~(tc_pagesize - 1);	end = (addr + size) & ~(tc_pagesize - 1);	while(1) {		invalidate_tcache_page(a);	/* Page_Invalidate_T */		if (a == end) break;		a += tc_pagesize;	}}static voidrm7k_dma_cache_wback(unsigned long addr, unsigned long size){	panic("rm7k_dma_cache_wback called - should not happen.");}/* * While we're protected against bad userland addresses we don't care * very much about what happens in that case.  Usually a segmentation * fault will dump the process later on anyway ... */static void rm7k_flush_cache_sigtramp(unsigned long addr){	protected_writeback_dcache_line(addr & ~(dc_lsize - 1));	protected_flush_icache_line(addr & ~(ic_lsize - 1));}/* Detect and size the caches. */static inline void probe_icache(unsigned long config){	icache_size = 1 << (12 + ((config >> 9) & 7));	printk(KERN_INFO "Primary instruction cache %dKiB.\n", icache_size >> 10);}static inline void probe_dcache(unsigned long config){	dcache_size = 1 << (12 + ((config >> 6) & 7));	printk(KERN_INFO "Primary data cache %dKiB.\n", dcache_size >> 10);}/* * This function is executed in the uncached segment KSEG1. * It must not touch the stack, because the stack pointer still points * into KSEG0. * * Three options: *	- Write it in assembly and guarantee that we don't use the stack. *	- Disable caching for KSEG0 before calling it. *	- Pray that GCC doesn't randomly start using the stack. * * This being Linux, we obviously take the least sane of those options - * following DaveM's lead in r4xx0.c * * It seems we get our kicks from relying on unguaranteed behaviour in GCC */static __init void setup_scache(void){	int register i;	set_cp0_config(1<<3 /* CONF_SE */);	set_taglo(0);	set_taghi(0);	for (i=0; i<scache_size; i+=sc_lsize) {		__asm__ __volatile__ (		      ".set noreorder\n\t"		      ".set mips3\n\t"		      "cache %1, (%0)\n\t"		      ".set mips0\n\t"		      ".set reorder"		      :		      : "r" (KSEG0ADDR(i)),		        "i" (Index_Store_Tag_SD));	}}static inline void probe_scache(unsigned long config){	void (*func)(void) = KSEG1ADDR(&setup_scache);	if ((config >> 31) & 1)		return;	printk(KERN_INFO "Secondary cache %dKiB, linesize %d bytes.\n",	       (scache_size >> 10), sc_lsize);	if ((config >> 3) & 1)		return;	printk(KERN_INFO "Enabling secondary cache...");	func();	printk("Done\n");}static inline void probe_tcache(unsigned long config){	if ((config >> 17) & 1)		return;	/* We can't enable the L3 cache yet. There may be board-specific	 * magic necessary to turn it on, and blindly asking the CPU to	 * start using it would may give cache errors.	 *	 * Also, board-specific knowledge may allow us to use the	 * CACHE Flash_Invalidate_T instruction if the tag RAM supports	 * it, and may specify the size of the L3 cache so we don't have	 * to probe it.	 */	printk(KERN_INFO "Tertiary cache present, %s enabled\n",	       config&(1<<12) ? "already" : "not (yet)");	if ((config >> 12) & 1)		rm7k_tcache_enabled = 1;}void __init ld_mmu_rm7k(void){	unsigned long config = read_32bit_cp0_register(CP0_CONFIG);	unsigned long addr;        change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);	/* RM7000 erratum #31. The icache is screwed at startup. */	set_taglo(0);	set_taghi(0);	for (addr = KSEG0; addr <= KSEG0 + 4096; addr += ic_lsize) {		__asm__ __volatile__ (			".set noreorder\n\t"			".set mips3\n\t"			"cache\t%1, 0(%0)\n\t"			"cache\t%1, 0x1000(%0)\n\t"			"cache\t%1, 0x2000(%0)\n\t"			"cache\t%1, 0x3000(%0)\n\t"			"cache\t%2, 0(%0)\n\t"			"cache\t%2, 0x1000(%0)\n\t"			"cache\t%2, 0x2000(%0)\n\t"			"cache\t%2, 0x3000(%0)\n\t"			"cache\t%1, 0(%0)\n\t"			"cache\t%1, 0x1000(%0)\n\t"			"cache\t%1, 0x2000(%0)\n\t"			"cache\t%1, 0x3000(%0)\n\t"			".set\tmips0\n\t"			".set\treorder\n\t"			:			: "r" (addr), "i" (Index_Store_Tag_I), "i" (Fill));	}	change_cp0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);	probe_icache(config);	probe_dcache(config);	probe_scache(config);	probe_tcache(config);	_clear_page = rm7k_clear_page;	_copy_page = rm7k_copy_page;	_flush_cache_all = rm7k_flush_cache_all_d32i32;	___flush_cache_all = __flush_cache_all_d32i32;	_flush_cache_mm = rm7k_flush_cache_mm_d32i32;	_flush_cache_range = rm7k_flush_cache_range_d32i32;	_flush_cache_page = rm7k_flush_cache_page_d32i32;	_flush_page_to_ram = rm7k_flush_page_to_ram_d32i32;	_flush_cache_sigtramp = rm7k_flush_cache_sigtramp;	_flush_icache_range = rm7k_flush_icache_range;	_flush_icache_page = rm7k_flush_icache_page;	_dma_cache_wback_inv = rm7k_dma_cache_wback_inv;	_dma_cache_wback = rm7k_dma_cache_wback;	_dma_cache_inv = rm7k_dma_cache_inv;	__flush_cache_all_d32i32();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩另类国产亚洲欧美一级| 成人av网在线| 天天综合色天天| 亚洲第一精品在线| 午夜影院久久久| 蜜臀久久99精品久久久画质超高清 | 亚洲天堂免费看| 一区在线观看视频| 一区二区三区日本| 亚洲成人av一区| 蜜桃视频免费观看一区| 国产乱码精品一品二品| 成人免费看的视频| 欧美在线观看一二区| 欧美日韩视频在线观看一区二区三区| 欧美视频一区二区三区在线观看 | 国产福利电影一区二区三区| 国产suv精品一区二区883| 成人aa视频在线观看| 91视频.com| 日韩一区二区中文字幕| 国产精品天干天干在观线| 亚洲理论在线观看| 九色porny丨国产精品| 不卡的av中国片| 欧美日韩精品欧美日韩精品| 精品少妇一区二区三区 | 亚洲一区二区三区爽爽爽爽爽| 午夜av电影一区| 国产精品99久| 欧洲另类一二三四区| 亚洲精品在线观| 综合中文字幕亚洲| 国产主播一区二区三区| 91福利区一区二区三区| 久久精品视频一区| 午夜视频一区二区| 成熟亚洲日本毛茸茸凸凹| 欧美日韩精品一区二区| 国产精品久久看| 久久99精品久久久久婷婷| 色综合久久88色综合天天免费| 欧美v日韩v国产v| 亚洲精品第一国产综合野| 激情综合色综合久久综合| 91黄色免费看| 中文字幕+乱码+中文字幕一区| 天天色综合天天| 一本一道久久a久久精品综合蜜臀| 日韩一区二区中文字幕| 亚洲国产欧美在线| 91视频国产观看| 国产精品三级视频| 国产精品一区二区果冻传媒| 欧美日韩国产bt| 亚洲黄网站在线观看| 成人一区二区三区| 久久久天堂av| 精品系列免费在线观看| 欧美日韩三级视频| 亚洲综合999| 91福利国产精品| 综合色中文字幕| 波多野结衣的一区二区三区| 久久久国产精华| 国内精品嫩模私拍在线| 欧美v日韩v国产v| 另类小说视频一区二区| 欧美一级久久久久久久大片| 无吗不卡中文字幕| 欧美一区二区视频免费观看| 亚洲成人你懂的| 欧美日本乱大交xxxxx| 亚洲一区二区三区美女| 欧美日韩一区久久| 视频精品一区二区| 日韩女优av电影在线观看| 日本aⅴ亚洲精品中文乱码| 8x福利精品第一导航| 日日嗨av一区二区三区四区| 91精品国产综合久久香蕉麻豆| 亚洲福利视频一区二区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲伦在线观看| 91精品1区2区| 日韩高清欧美激情| 欧美成人一区二区三区片免费| 麻豆精品视频在线观看视频| 亚洲精品在线电影| 成人午夜在线播放| 一区二区三区四区在线免费观看| 欧美亚洲综合色| 日韩av中文在线观看| 337p日本欧洲亚洲大胆色噜噜| 精品夜夜嗨av一区二区三区| 国产女人aaa级久久久级| av中文字幕在线不卡| 五月婷婷综合网| 欧美精品一区二区不卡| 99久久综合99久久综合网站| 一区二区三区四区蜜桃| 日韩欧美色综合网站| 99精品久久只有精品| 日韩和欧美一区二区三区| 精品国产一区二区亚洲人成毛片| 成人性生交大合| 日韩精品午夜视频| 国产欧美精品国产国产专区| 在线观看亚洲a| 国内欧美视频一区二区| 一区二区三区日韩在线观看| 欧美刺激午夜性久久久久久久| 国产成人精品免费网站| 午夜久久久久久电影| 久久久久国产精品厨房| 欧美三级三级三级| 不卡一区二区在线| 美女一区二区视频| 亚洲一区二区不卡免费| 久久午夜电影网| 在线精品观看国产| 成人在线综合网站| 麻豆免费看一区二区三区| 亚洲麻豆国产自偷在线| 国产清纯在线一区二区www| 91精品综合久久久久久| av欧美精品.com| 国产一区二区三区免费在线观看| 一区二区三区不卡视频 | 一区二区三区成人| 中文字幕一区免费在线观看| 精品对白一区国产伦| 欧美一区二区精美| 欧美日韩在线播放| 欧美在线视频你懂得| 波多野结衣视频一区| 国产盗摄一区二区| 精彩视频一区二区三区| 麻豆视频一区二区| 日本成人在线电影网| 偷偷要91色婷婷| 亚洲国产视频网站| 一区二区三区资源| 亚洲人成小说网站色在线| 国产精品素人视频| 国产精品视频你懂的| 久久精品一区蜜桃臀影院| 欧美成人三级在线| 欧美刺激脚交jootjob| 日韩欧美综合在线| 欧美电影免费观看高清完整版在线| 欧美色网站导航| 欧美精品乱码久久久久久按摩| 欧美亚洲国产一区二区三区| 色视频一区二区| 欧美影院精品一区| 欧美日韩电影一区| 91精品国产品国语在线不卡| 6080午夜不卡| 日韩三级在线免费观看| 精品对白一区国产伦| 精品不卡在线视频| 久久久91精品国产一区二区三区| 久久久久久久久久久久久夜| 中文字幕av免费专区久久| 亚洲同性gay激情无套| 亚洲精品视频观看| 日韩国产欧美在线视频| 老司机精品视频一区二区三区| 国产在线精品视频| 成人国产一区二区三区精品| 91美女在线观看| 欧美伊人久久久久久久久影院| 91精品欧美综合在线观看最新| 精品国产91亚洲一区二区三区婷婷| 26uuu久久天堂性欧美| 自拍偷拍欧美精品| 石原莉奈一区二区三区在线观看| 黄一区二区三区| 色综合天天综合色综合av| 欧美日韩一二区| 久久久精品欧美丰满| 亚洲欧美激情在线| 久久不见久久见免费视频7 | 欧美三级电影一区| 久久蜜桃av一区精品变态类天堂| 国产精品日韩成人| 亚洲成av人综合在线观看| 国产福利精品一区二区| 欧美三级午夜理伦三级中视频| 久久综合999| 性欧美疯狂xxxxbbbb| 国产精品一区二区男女羞羞无遮挡 | 亚洲婷婷在线视频| 麻豆精品视频在线观看免费 | 亚洲专区一二三| 激情小说欧美图片| 欧美日韩精品一区二区三区蜜桃| 久久久亚洲欧洲日产国码αv| 亚洲一区二区av在线|