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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? c-mips32.c

?? 該文件是rt_linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved. * * This program is free software; you can distribute it and/or modify it * under the terms of the GNU General Public License (Version 2) as * published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * * MIPS32 CPU variant specific MMU/Cache routines. */#include <linux/config.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/mm.h>#include <asm/bootinfo.h>#include <asm/cpu.h>#include <asm/bcache.h>#include <asm/io.h>#include <asm/page.h>#include <asm/pgtable.h>#include <asm/system.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. */int icache_size, dcache_size; 			/* Size in bytes */int ic_lsize, dc_lsize;				/* LineSize in bytes *//* Secondary cache (if present) parameters. */unsigned int scache_size, sc_lsize;		/* Again, in bytes */#include <asm/cacheops.h>#include <asm/mips32_cache.h>#undef DEBUG_CACHE/* * Dummy cache handling routines for machines without boardcaches */static void no_sc_noop(void) {}static struct bcache_ops no_sc_ops = {	(void *)no_sc_noop, (void *)no_sc_noop,	(void *)no_sc_noop, (void *)no_sc_noop};struct bcache_ops *bcops = &no_sc_ops;static inline void mips32_flush_cache_all_sc(void){	unsigned long flags;	__save_and_cli(flags);	blast_dcache(); blast_icache(); blast_scache();	__restore_flags(flags);}static inline void mips32_flush_cache_all_pc(void){	unsigned long flags;	__save_and_cli(flags);	blast_dcache(); blast_icache();	__restore_flags(flags);}static voidmips32_flush_cache_range_sc(struct mm_struct *mm,			 unsigned long start,			 unsigned long end){	struct vm_area_struct *vma;	unsigned long flags;	if(mm->context == 0)		return;	start &= PAGE_MASK;#ifdef DEBUG_CACHE	printk("crange[%d,%08lx,%08lx]", (int)mm->context, start, end);#endif	vma = find_vma(mm, start);	if(vma) {		if(mm->context != current->mm->context) {			mips32_flush_cache_all_sc();		} else {			pgd_t *pgd;			pmd_t *pmd;			pte_t *pte;			__save_and_cli(flags);			while(start < end) {				pgd = pgd_offset(mm, start);				pmd = pmd_offset(pgd, start);				pte = pte_offset(pmd, start);				if(pte_val(*pte) & _PAGE_VALID)					blast_scache_page(start);				start += PAGE_SIZE;			}			__restore_flags(flags);		}	}}static void mips32_flush_cache_range_pc(struct mm_struct *mm,				     unsigned long start,				     unsigned long end){	if(mm->context != 0) {		unsigned long flags;#ifdef DEBUG_CACHE		printk("crange[%d,%08lx,%08lx]", (int)mm->context, start, end);#endif		__save_and_cli(flags);		blast_dcache(); blast_icache();		__restore_flags(flags);	}}/* * On architectures like the Sparc, we could get rid of lines in * the cache created only by a certain context, but on the MIPS * (and actually certain Sparc's) we cannot. */static void mips32_flush_cache_mm_sc(struct mm_struct *mm){	if(mm->context != 0) {#ifdef DEBUG_CACHE		printk("cmm[%d]", (int)mm->context);#endif		mips32_flush_cache_all_sc();	}}static void mips32_flush_cache_mm_pc(struct mm_struct *mm){	if(mm->context != 0) {#ifdef DEBUG_CACHE		printk("cmm[%d]", (int)mm->context);#endif		mips32_flush_cache_all_pc();	}}static void mips32_flush_cache_page_sc(struct vm_area_struct *vma,				    unsigned long page){	struct mm_struct *mm = vma->vm_mm;	unsigned long flags;	pgd_t *pgdp;	pmd_t *pmdp;	pte_t *ptep;	/*	 * If ownes no valid ASID yet, cannot possibly have gotten	 * this page into the cache.	 */	if (mm->context == 0)		return;#ifdef DEBUG_CACHE	printk("cpage[%d,%08lx]", (int)mm->context, page);#endif	__save_and_cli(flags);	page &= PAGE_MASK;	pgdp = pgd_offset(mm, page);	pmdp = pmd_offset(pgdp, page);	ptep = pte_offset(pmdp, page);	/*	 * If the page isn't marked valid, the page cannot possibly be	 * in the cache.	 */	if (!(pte_val(*ptep) & _PAGE_VALID))		goto out;	/*	 * Doing flushes for another ASID than the current one is	 * too difficult since R4k caches do a TLB translation	 * for every cache flush operation.  So we do indexed flushes	 * in that case, which doesn't overly flush the cache too much.	 */	if (mm->context != current->active_mm->context) {		/*		 * Do indexed flush, too much work to get the (possible)		 * tlb refills to work correctly.		 */		page = (KSEG0 + (page & (scache_size - 1)));		blast_dcache_page_indexed(page);		blast_scache_page_indexed(page);	} else		blast_scache_page(page);out:	__restore_flags(flags);}static void mips32_flush_cache_page_pc(struct vm_area_struct *vma,				    unsigned long page){	struct mm_struct *mm = vma->vm_mm;	unsigned long flags;	pgd_t *pgdp;	pmd_t *pmdp;	pte_t *ptep;	/*	 * If ownes no valid ASID yet, cannot possibly have gotten	 * this page into the cache.	 */	if (mm->context == 0)		return;#ifdef DEBUG_CACHE	printk("cpage[%d,%08lx]", (int)mm->context, page);#endif	__save_and_cli(flags);	page &= PAGE_MASK;	pgdp = pgd_offset(mm, page);	pmdp = pmd_offset(pgdp, page);	ptep = pte_offset(pmdp, page);	/*	 * If the page isn't marked valid, the page cannot possibly be	 * in the cache.	 */	if (!(pte_val(*ptep) & _PAGE_VALID))		goto out;	/*	 * Doing flushes for another ASID than the current one is	 * too difficult since Mips32 caches do a TLB translation	 * for every cache flush operation.  So we do indexed flushes	 * in that case, which doesn't overly flush the cache too much.	 */	if (mm == current->active_mm) {		blast_dcache_page(page);	} else {		/* Do indexed flush, too much work to get the (possible)		 * tlb refills to work correctly.		 */		page = (KSEG0 + (page & (dcache_size - 1)));		blast_dcache_page_indexed(page);	}out:	__restore_flags(flags);}/* If the addresses passed to these routines are valid, they are * either: * * 1) In KSEG0, so we can do a direct flush of the page. * 2) In KSEG2, and since every process can translate those *    addresses all the time in kernel mode we can do a direct *    flush. * 3) In KSEG1, no flush necessary. */static void mips32_flush_page_to_ram_sc(struct page *page){	blast_scache_page((unsigned long)page_address(page));}static void mips32_flush_page_to_ram_pc(struct page *page){	blast_dcache_page((unsigned long)page_address(page));}static voidmips32_flush_icache_page_s(struct vm_area_struct *vma, struct page *page){	/*	 * We did an scache flush therefore PI is already clean.	 */}static voidmips32_flush_icache_range(unsigned long start, unsigned long end){	flush_cache_all();}static voidmips32_flush_icache_page(struct vm_area_struct *vma, struct page *page){	int address;	if (!(vma->vm_flags & VM_EXEC))		return;	address = KSEG0 + ((unsigned long)page_address(page) & PAGE_MASK & (dcache_size - 1));	blast_icache_page_indexed(address);}/* * Writeback and invalidate the primary cache dcache before DMA. */static voidmips32_dma_cache_wback_inv_pc(unsigned long addr, unsigned long size){	unsigned long end, a;	unsigned int flags;	if (size >= dcache_size) {		flush_cache_all();	} else {	        __save_and_cli(flags);		a = addr & ~(dc_lsize - 1);		end = (addr + size) & ~(dc_lsize - 1);		while (1) {			flush_dcache_line(a); /* Hit_Writeback_Inv_D */			if (a == end) break;			a += dc_lsize;		}		__restore_flags(flags);	}	bc_wback_inv(addr, size);}static voidmips32_dma_cache_wback_inv_sc(unsigned long addr, unsigned long size)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女一区二区| 欧美日韩一级片在线观看| 日本欧美在线观看| 亚洲国产精品一区二区www | 日韩一区在线看| 亚洲国产精品传媒在线观看| 国产亚洲自拍一区| 日本一区二区视频在线| 国产精品污污网站在线观看| 国产精品美日韩| 樱桃视频在线观看一区| 亚洲国产综合色| 蜜臀精品久久久久久蜜臀 | 国产成人在线免费| 国产91丝袜在线观看| 波多野结衣视频一区| 91免费在线视频观看| 欧美三级电影一区| 精品国精品自拍自在线| 国产欧美日韩另类一区| 一区二区三区四区高清精品免费观看 | 秋霞电影一区二区| 男人的j进女人的j一区| 国产不卡免费视频| 欧美怡红院视频| 欧美一级黄色片| 国产精品动漫网站| 午夜激情久久久| 国产成人精品1024| 欧美写真视频网站| 精品国产91乱码一区二区三区 | 视频一区在线播放| 激情小说亚洲一区| 99精品黄色片免费大全| 91精品国产综合久久久久久久| 精品美女一区二区三区| 《视频一区视频二区| 日韩高清不卡一区二区三区| 成人福利视频网站| 91精品久久久久久久91蜜桃| 中文字幕亚洲在| 美腿丝袜一区二区三区| 91精彩视频在线| 国产亚洲精品中文字幕| 亚洲国产精品一区二区久久| 成人蜜臀av电影| 欧美一级在线视频| 亚洲激情一二三区| 国产a视频精品免费观看| 欧美麻豆精品久久久久久| 国产精品不卡在线| 国产精品亚洲午夜一区二区三区| 欧美午夜不卡在线观看免费| 中文字幕一区二区三区蜜月| 国产老肥熟一区二区三区| 日韩午夜激情视频| 亚洲地区一二三色| 色婷婷综合中文久久一本| 国产人成一区二区三区影院| 麻豆免费看一区二区三区| 欧美日韩一二区| 亚洲自拍偷拍图区| 一本色道a无线码一区v| 国产精品人妖ts系列视频| 国产激情一区二区三区四区 | 亚洲女人****多毛耸耸8| 国产乱人伦偷精品视频免下载| 777午夜精品视频在线播放| 一区二区三区.www| 91福利精品第一导航| 亚洲精品中文字幕在线观看| 91玉足脚交白嫩脚丫在线播放| 国产精品亲子伦对白| 国产成人免费视频精品含羞草妖精| 欧美电影免费观看高清完整版在 | 精品久久久久久久人人人人传媒| 水蜜桃久久夜色精品一区的特点| 欧美日韩免费一区二区三区| 亚洲成人动漫在线观看| 91麻豆精品国产无毒不卡在线观看| 一区二区三区日韩| 欧美精品日韩一区| 另类调教123区| 精品国产髙清在线看国产毛片| 另类小说色综合网站| 久久久不卡网国产精品二区| 粉嫩av亚洲一区二区图片| 国产精品免费人成网站| 色又黄又爽网站www久久| 亚洲综合在线视频| 91精品免费观看| 国产乱淫av一区二区三区 | 天堂久久一区二区三区| 在线播放91灌醉迷j高跟美女 | 成人短视频下载| 亚洲乱码中文字幕综合| 欧美人牲a欧美精品| 久久成人免费电影| 国产精品国模大尺度视频| 在线精品视频小说1| 蜜臀av在线播放一区二区三区| 精品久久久久久久一区二区蜜臀| 国产白丝网站精品污在线入口| 亚洲色大成网站www久久九九| 在线观看日韩高清av| 秋霞电影网一区二区| 中文字幕国产一区| 欧美日韩视频在线一区二区| 狠狠色综合日日| 一片黄亚洲嫩模| 久久亚洲精精品中文字幕早川悠里 | 久久精品一二三| 色狠狠色噜噜噜综合网| 久久国产成人午夜av影院| 自拍偷拍国产精品| 欧美不卡视频一区| 在线视频一区二区三| 狠狠久久亚洲欧美| 亚洲一区二区三区小说| 国产亚洲精品bt天堂精选| 欧美亚洲国产怡红院影院| 91视视频在线观看入口直接观看www | 亚洲国产欧美日韩另类综合| 久久综合九色综合97_久久久| 色猫猫国产区一区二在线视频| 久久99精品国产.久久久久| 亚洲免费观看视频| 中文欧美字幕免费| 精品国产欧美一区二区| 欧美美女直播网站| av动漫一区二区| 国产成人99久久亚洲综合精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲综合图片区| 欧美国产日韩一二三区| 日韩欧美一二区| 欧美精品粉嫩高潮一区二区| 色94色欧美sute亚洲线路一ni| 国产成人无遮挡在线视频| 韩国女主播一区二区三区| 久久av资源网| 青青草97国产精品免费观看| 亚洲一区二区欧美激情| 亚洲人成精品久久久久| 中文字幕一区二区三区在线播放| 国产欧美日韩在线看| 国产欧美日本一区视频| 国产三级精品在线| 国产欧美一区二区在线| 国产日韩欧美一区二区三区乱码 | 亚洲精品视频一区| 亚洲欧洲日韩av| 亚洲三级在线免费观看| 亚洲人被黑人高潮完整版| 国产精品九色蝌蚪自拍| 亚洲精品亚洲人成人网| 亚洲精品久久久蜜桃| 一区二区三区四区视频精品免费| 亚洲综合成人网| 日韩一区精品视频| 久久激情五月激情| 国产精品一区二区你懂的| 成人av综合一区| 91国产视频在线观看| 欧美日韩第一区日日骚| 日韩美女在线视频| 国产欧美一区二区三区在线看蜜臀| 国产女同性恋一区二区| 国产精品看片你懂得| 一区二区三区高清| 麻豆精品久久久| 成人小视频免费在线观看| 色婷婷精品大在线视频| 精品视频123区在线观看| 日韩午夜精品视频| 国产精品高清亚洲| 无码av免费一区二区三区试看 | 久久久久久久性| 自拍偷拍亚洲综合| 免费久久99精品国产| 成人黄色777网| 欧美日韩一二三区| 久久免费国产精品| 亚洲综合一区在线| 国精产品一区一区三区mba视频| 成人蜜臀av电影| 欧美一区二区三区在线| 国产精品每日更新| 日本三级亚洲精品| youjizz久久| 欧美一区二区观看视频| 综合久久久久综合| 国精产品一区一区三区mba桃花| 一本色道综合亚洲| 欧美精品一区二区高清在线观看| 亚洲黄色性网站| 国产999精品久久久久久绿帽| 欧美美女黄视频| 亚洲精品免费电影| 成人午夜激情片|