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

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

?? mmupro36lib.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    /* modify the directory table entry to point to the new page table */    pDte = &pDirectoryTable 	   [((UINT) virtPageAddr & (DIR_PTR_BITS | DIR_BITS)) >> DIR_INDEX];        pDte->field.page = (UINT) pPageTable >> ADDR_TO_PAGE;    pDte->field.present = 1;    pDte->field.rw = 1;    /* write protect the directory pointer table and the directory table */    for (ix = 0; ix < nDirPages; ix++)	{        mmuStateSet (&mmuGlobalTransTbl, 		     (void *) ((UINT32)pDirectoryTable + (mmuPageSize * ix)),		     MMU_STATE_MASK_WRITABLE, MMU_STATE_WRITABLE_NOT);	}    /* defer the TLB flush to the mmuCurrentSet() at init time */    if (!firstTime)        {        MMU_TLB_FLUSH ();        }    return (OK);    }/******************************************************************************** mmuStateSet - set state of virtual memory page** mmuStateSet is used to modify the state bits of the PTE for the given* virtual page.  The following states are provided:** MMU_STATE_VALID 	MMU_STATE_VALID_NOT	 valid/invalid* MMU_STATE_WRITABLE 	MMU_STATE_WRITABLE_NOT	 writable/write_protected* MMU_STATE_CACHEABLE 	MMU_STATE_CACHEABLE_NOT	 notcachable/cachable* MMU_STATE_WBACK 	MMU_STATE_WBACK_NOT      write_back/write_through* MMU_STATE_GLOBAL    	MMU_STATE_GLOBAL_NOT     global/not_global** these may be or'ed together in the state parameter.  Additionally, masks* are provided so that only specific states may be set:** MMU_STATE_MASK_VALID * MMU_STATE_MASK_WRITABLE* MMU_STATE_MASK_CACHEABLE* MMU_STATE_MASK_WBACK* MMU_STATE_MASK_GLOBAL** These may be or'ed together in the stateMask parameter.  ** Accesses to a virtual page marked as invalid will result in a page fault.** RETURNS: OK or ERROR if virtual page does not exist.*/LOCAL STATUS mmuStateSet     (    MMU_TRANS_TBL *transTbl, 	/* translation table */    void *pageAddr,		/* page whose state to modify */     UINT stateMask,		/* mask of which state bits to modify */    UINT state			/* new state bit values */    )    {    PTE * pPte;    INT32 oldIntLev = 0;    BOOL wasEnabled;    if (mmuPteGet (transTbl, pageAddr, &pPte) != OK)	return (ERROR);    /* modify the PTE with mmu turned off and interrupts locked out */    MMU_WP_UNLOCK (wasEnabled, oldIntLev);    pPte->bits[0] = (pPte->bits[0] & ~stateMask) | (state & stateMask);    MMU_WP_LOCK (wasEnabled, oldIntLev);    /* defer the TLB and Cache flush to the mmuCurrentSet() */    if (!firstTime)	{        MMU_TLB_FLUSH ();        cacheArchClearEntry (DATA_CACHE, pPte);	}    return (OK);    }/******************************************************************************** mmuStateGet - get state of virtual memory page** mmuStateGet is used to retrieve the state bits of the PTE for the given* virtual page.  The following states are provided:** MMU_STATE_VALID 	MMU_STATE_VALID_NOT	 valid/invalid* MMU_STATE_WRITABLE 	MMU_STATE_WRITABLE_NOT	 writable/write_protected* MMU_STATE_CACHEABLE 	MMU_STATE_CACHEABLE_NOT	 notcachable/cachable* MMU_STATE_WBACK 	MMU_STATE_WBACK_NOT      write_back/write_through* MMU_STATE_GLOBAL    	MMU_STATE_GLOBAL_NOT     global/not_global** these are or'ed together in the returned state.  Additionally, masks* are provided so that specific states may be extracted from the returned state:** MMU_STATE_MASK_VALID * MMU_STATE_MASK_WRITABLE* MMU_STATE_MASK_CACHEABLE* MMU_STATE_MASK_WBACK* MMU_STATE_MASK_GLOBAL** RETURNS: OK or ERROR if virtual page does not exist.*/LOCAL STATUS mmuStateGet     (    MMU_TRANS_TBL *transTbl, 	/* tranlation table */    void *pageAddr, 		/* page whose state we're querying */    UINT *state			/* place to return state value */    )    {    PTE *pPte;    if (mmuPteGet (transTbl, pageAddr, &pPte) != OK)	return (ERROR);    *state = pPte->bits[0];     return (OK);    }/******************************************************************************** mmuPageMap - map physical memory page to virtual memory page** The physical page address is entered into the PTE corresponding to the* given virtual page.  The state of a newly mapped page is undefined. ** RETURNS: OK or ERROR if translation table creation failed. */LOCAL STATUS mmuPageMap     (    MMU_TRANS_TBL *transTbl, 	/* translation table */    void *virtualAddress, 	/* virtual address */    void *physPage		/* physical address */    )    {    PTE * pPte;    INT32 oldIntLev = 0;    BOOL wasEnabled;    BOOL status	= mmuPteGet (transTbl, virtualAddress, &pPte);    if ((mmuPageSize == PAGE_SIZE_4KB) && (status != OK))	{	/* build the translation table for the virtual address */	if (mmuVirtualPageCreate (transTbl, virtualAddress) != OK)	    return (ERROR);	if (mmuPteGet (transTbl, virtualAddress, &pPte) != OK)	    return (ERROR);	}    if (mmuPageSize != PAGE_SIZE_4KB)        (UINT)physPage &= ADDR_TO_PAGEBASE;     MMU_WP_UNLOCK (wasEnabled, oldIntLev);    pPte->field.page   = (UINT)physPage >> ADDR_TO_PAGE;    MMU_WP_LOCK (wasEnabled, oldIntLev);    MMU_TLB_FLUSH ();    cacheArchClearEntry (DATA_CACHE, pPte);    return (OK);    }/******************************************************************************** mmuGlobalPageMap - map physical memory page to global virtual memory page** mmuGlobalPageMap is used to map physical pages into global virtual memory* that is shared by all virtual memory contexts.  The translation tables* for this section of the virtual space are shared by all virtual memory* contexts.** RETURNS: OK or ERROR if no PTE for given virtual page.*/LOCAL STATUS mmuGlobalPageMap     (    void *virtualAddress, 	/* virtual address */    void *physPage		/* physical address */    )    {    PTE * pPte;    INT32 oldIntLev = 0;    BOOL wasEnabled;    BOOL status = mmuPteGet (&mmuGlobalTransTbl, virtualAddress, &pPte);    int ix;    if ((mmuPageSize == PAGE_SIZE_4KB) && (status != OK))	{	/* build the translation table for the virtual address */	if (mmuVirtualPageCreate (&mmuGlobalTransTbl, virtualAddress) != OK)	    return (ERROR);	if (mmuPteGet (&mmuGlobalTransTbl, virtualAddress, &pPte) != OK)	    return (ERROR);        /* the globalPageBlock array is write protected */        mmuStateSet (&mmuGlobalTransTbl, globalPageBlock,		     MMU_STATE_MASK_WRITABLE, MMU_STATE_WRITABLE);        ix = ((UINT) virtualAddress & (DIR_PTR_BITS | DIR_BITS)) >> DIR_INDEX;        globalPageBlock [ix] = (UINT8) TRUE;	        mmuStateSet (&mmuGlobalTransTbl, globalPageBlock,    	             MMU_STATE_MASK_WRITABLE, MMU_STATE_WRITABLE_NOT);	}    if (mmuPageSize != PAGE_SIZE_4KB)	(UINT)physPage &= ADDR_TO_PAGEBASE;    MMU_WP_UNLOCK (wasEnabled, oldIntLev);    pPte->field.page = (UINT)physPage >> ADDR_TO_PAGE;    MMU_WP_LOCK (wasEnabled, oldIntLev);    /* defer the TLB and Cache flush to the mmuCurrentSet() */    if (!firstTime)	{        MMU_TLB_FLUSH ();        cacheArchClearEntry (DATA_CACHE, pPte);	}    return (OK);    }/******************************************************************************** mmuTranslate - translate a virtual address to a physical address** Traverse the translation table and extract the physical address for the* given virtual address from the PTE corresponding to the virtual address.** RETURNS: OK or ERROR if no PTE for given virtual address.*/LOCAL STATUS mmuTranslate     (    MMU_TRANS_TBL *transTbl, 		/* translation table */    void *virtAddress, 			/* virtual address */    void **physAddress			/* place to return result */    )    {    PTE *pPte;    if (mmuPteGet (transTbl, virtAddress, &pPte) != OK)	{	errno = S_mmuLib_NO_DESCRIPTOR; 	return (ERROR);	}    if (pPte->field.present == 0)	{	errno = S_mmuLib_INVALID_DESCRIPTOR; 	return (ERROR);	}    /* add offset into page */    if (mmuPageSize == PAGE_SIZE_4KB)        *physAddress = (void *)((UINT)(pPte->bits[0] & PTE_TO_ADDR_4KB) + 			        ((UINT)virtAddress & OFFSET_BITS_4KB));    else        *physAddress = (void *)((UINT)(pPte->bits[0] & PTE_TO_ADDR_2MB) + 			        ((UINT)virtAddress & OFFSET_BITS_2MB));    return (OK);    }/******************************************************************************** mmuCurrentSet - change active translation table** mmuCurrent set is used to change the virtual memory context.* Load the CRP (root pointer) register with the given translation table.**/LOCAL void mmuCurrentSet     (    MMU_TRANS_TBL *transTbl	/* new active tranlation table */    )     {    INT32 oldLev;    if (firstTime)	{	mmuMemPagesWriteDisable (&mmuGlobalTransTbl);	mmuMemPagesWriteDisable (transTbl);	/* perform the deferred TLB and Cache flush */        /* MMU_TLB_FLUSH (); */	/* done by following mmuPro32PdbrSet () */        if (sysProcessor != X86CPU_386)            WRS_ASM ("wbinvd");	/* flush the entire cache */	firstTime = FALSE;	}    oldLev = intLock ();		/* LOCK INTERRUPTS */    mmuCurrentTransTbl = transTbl;    mmuPro36PdbrSet (transTbl);    intUnlock (oldLev);			/* UNLOCK INTERRUPTS */    }/******************************************************************************** mmuMemPagesWriteDisable - write disable memory holding a table's descriptors** Memory containing translation table descriptors is marked as read only* to protect the descriptors from being corrupted.  This routine write protects* all the memory used to contain a given translation table's descriptors.**/LOCAL void mmuMemPagesWriteDisable    (    MMU_TRANS_TBL *transTbl    )    {    PTE * pDirectoryTable;    void * thisPage;    INT32 ix;    pDirectoryTable = (PTE *)(transTbl->pDirectoryTable->bits[0] & PDP_TO_ADDR);    if (mmuPageSize == PAGE_SIZE_4KB)        for (ix = 0; ix < ((PD_SIZE * 4) / sizeof(PTE)); ix++)	    {	    thisPage = (void *)(pDirectoryTable[ix].bits[0] & PTE_TO_ADDR_4KB);	    if ((int)thisPage != (0xffffffff & PTE_TO_ADDR_4KB))	        mmuStateSet (transTbl, thisPage, MMU_STATE_MASK_WRITABLE,			     MMU_STATE_WRITABLE_NOT);	    }    for (ix = 0; ix < nDirPages; ix++)	{	thisPage = (void *)((UINT)pDirectoryTable + (mmuPageSize * ix));        mmuStateSet (transTbl, thisPage, MMU_STATE_MASK_WRITABLE, 		     MMU_STATE_WRITABLE_NOT);	}    mmuStateSet (transTbl, transTbl->pDirectoryTable, MMU_STATE_MASK_WRITABLE, 		 MMU_STATE_WRITABLE_NOT);    }/******************************************************************************** mmuPro36PageMap - map 36bit physical memory page to virtual memory page** The 36bit physical page address is entered into the PTE corresponding to * the given virtual page.  The state of a newly mapped page is undefined. ** RETURNS: OK or ERROR if translation table creation failed. */STATUS mmuPro36PageMap     (    MMU_TRANS_TBL * transTbl, 	/* translation table */    void * virtualAddress, 	/* 32bit virtual address */    LL_INT physPage		/* 36bit physical address */    )    {    PTE *    pPte;    BOOL     wasEnabled;    INT32    oldIntLev = 0;    UINT32 * pPhysPage = (UINT32 *)&physPage;    BOOL     status    = mmuPteGet (transTbl, virtualAddress, &pPte);    if ((mmuPageSize == PAGE_SIZE_4KB) && (status != OK))	{	/* build the translation table for the virtual address */	if (mmuVirtualPageCreate (transTbl, virtualAddress) != OK)	    return (ERROR);	if (mmuPteGet (transTbl, virtualAddress, &pPte) != OK)	    return (ERROR);	}    if (mmuPageSize != PAGE_SIZE_4KB)        pPhysPage[0] &= ADDR_TO_PAGEBASE;     MMU_WP_UNLOCK (wasEnabled, oldIntLev);    pPte->field.page   = pPhysPage[0] >> ADDR_TO_PAGE;    pPte->field.page36 = pPhysPage[1] & 0x0000000f;    MMU_WP_LOCK (wasEnabled, oldIntLev);    MMU_TLB_FLUSH ();    cacheArchClearEntry (DATA_CACHE, pPte);    return (OK);    }/******************************************************************************** mmuPro36Translate - translate a virtual address to a 36bit physical address** Traverse the translation table and extract the 36bit physical address for * the given virtual address from the PTE corresponding to the virtual address.** RETURNS: OK or ERROR if no PTE for given virtual address.*/STATUS mmuPro36Translate     (    MMU_TRANS_TBL * transTbl, 		/* translation table */    void * virtAddress,			/* 32bit virtual address */    LL_INT * physAddress		/* place to return 36bit result */    )    {    PTE *    pPte;    UINT32 * pPhysAddr = (UINT32 *) physAddress;    if (mmuPteGet (transTbl, virtAddress, &pPte) != OK)	{	errno = S_mmuLib_NO_DESCRIPTOR; 	return (ERROR);	}    if (pPte->field.present == 0)	{	errno = S_mmuLib_INVALID_DESCRIPTOR; 	return (ERROR);	}    /* add offset into page */    if (mmuPageSize == PAGE_SIZE_4KB)        pPhysAddr[0] = (UINT32)(pPte->bits[0] & PTE_TO_ADDR_4KB) + 		       ((UINT32)virtAddress & OFFSET_BITS_4KB);    else        pPhysAddr[0] = (UINT32)(pPte->bits[0] & PTE_TO_ADDR_2MB) + 		       ((UINT32)virtAddress & OFFSET_BITS_2MB);    pPhysAddr[1] = pPte->bits[1];    return (OK);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一二三四区| 成人福利视频在线看| 最新日韩在线视频| 亚洲国产精品高清| 久久久99免费| 久久久久久久久伊人| 精品国产亚洲在线| 欧美变态凌虐bdsm| 精品久久国产老人久久综合| 精品久久久久久无| 国产精品天干天干在观线| 国产欧美一区在线| 亚洲色图一区二区| 亚洲一区二区三区不卡国产欧美 | 日本亚洲欧美天堂免费| 美女视频一区二区三区| 韩国一区二区视频| 成人黄色av网站在线| 91麻豆swag| 777久久久精品| 国产丝袜欧美中文另类| 18欧美乱大交hd1984| 亚洲一区在线视频| 极品美女销魂一区二区三区 | 1区2区3区欧美| 亚洲国产精品久久人人爱 | 久久久蜜臀国产一区二区| 久久久久久免费| 亚洲激情一二三区| 精品一区二区三区的国产在线播放| 成人污视频在线观看| 欧美性xxxxxx少妇| 久久综合九色欧美综合狠狠| 亚洲欧美日韩中文字幕一区二区三区 | 欧美大白屁股肥臀xxxxxx| 国产欧美日韩在线| 亚洲国产综合91精品麻豆| 免费av网站大全久久| 91女人视频在线观看| 日韩三级电影网址| 中文字幕一区在线观看| 久久不见久久见免费视频7| 成人免费视频视频在线观看免费 | 一本色道a无线码一区v| 欧美mv日韩mv亚洲| 亚洲一级电影视频| 成人av网站免费| 日韩视频免费观看高清在线视频| 亚洲欧洲精品一区二区精品久久久| 日韩在线一区二区三区| 成人一区二区三区视频 | 国产精品人成在线观看免费| 日韩精品每日更新| 色婷婷综合久久久久中文一区二区| ww亚洲ww在线观看国产| 午夜精品福利一区二区三区av| 99re免费视频精品全部| 久久久久88色偷偷免费| 激情国产一区二区| 日韩一区二区在线播放| 亚洲成人免费视频| 91精品1区2区| 伊人性伊人情综合网| 成人avav影音| 中文字幕一区二区三区色视频| 国产真实乱子伦精品视频| 91精品国产综合久久婷婷香蕉 | 美女一区二区久久| 欧美喷潮久久久xxxxx| 综合自拍亚洲综合图不卡区| 成人app下载| 国产精品久久久久久久浪潮网站| 国产一区二区成人久久免费影院| 日韩写真欧美这视频| 奇米影视一区二区三区| 91精品国产综合久久小美女| 蜜桃视频一区二区三区| 欧美成人官网二区| 麻豆国产精品官网| 久久久精品综合| 成人av网站大全| 中文字幕第一页久久| 岛国精品在线观看| 亚洲丝袜精品丝袜在线| 欧美性猛片xxxx免费看久爱| 亚洲制服丝袜av| 欧美一区二区福利视频| 国产在线精品一区二区夜色| 久久久国产午夜精品| 成人app网站| 亚洲一卡二卡三卡四卡无卡久久| 91精品麻豆日日躁夜夜躁| 久久99精品久久久久婷婷| 国产视频在线观看一区二区三区| 99精品黄色片免费大全| 亚洲最新视频在线播放| 91超碰这里只有精品国产| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久不卡影院| 91丝袜高跟美女视频| 亚洲一二三四在线| 久久免费偷拍视频| 欧美亚洲动漫制服丝袜| 韩国女主播成人在线| 亚洲柠檬福利资源导航| 9191久久久久久久久久久| 国产99一区视频免费| 亚洲一二三区在线观看| 2020国产精品| 欧美在线观看视频在线| 国产在线播精品第三| 一区二区久久久久| 久久这里只有精品6| 色999日韩国产欧美一区二区| 美女精品自拍一二三四| 亚洲精品乱码久久久久久| 日韩精品中文字幕在线一区| 色88888久久久久久影院按摩| 国产专区欧美精品| 天堂av在线一区| 国产精品毛片久久久久久| 91精品免费在线| 91猫先生在线| 国产成人无遮挡在线视频| 午夜精品视频在线观看| 国产精品水嫩水嫩| 精品久久久久99| 在线不卡中文字幕| 99久久精品免费看| 国内成人精品2018免费看| 婷婷亚洲久悠悠色悠在线播放| 国产精品萝li| 久久一日本道色综合| 91精品国产综合久久久久久久| 99久久777色| 国产91丝袜在线播放0| 久久爱另类一区二区小说| 日本免费在线视频不卡一不卡二| 亚洲一区二区黄色| 伊人开心综合网| 一区二区三区欧美在线观看| 精品国产一区a| 日韩免费一区二区| 欧美一区二区久久| 精品视频一区二区三区免费| 91国偷自产一区二区三区成为亚洲经典 | 欧美浪妇xxxx高跟鞋交| 91香蕉视频污在线| 91天堂素人约啪| 色婷婷综合久久久久中文| 99久久精品国产毛片| 成人黄色大片在线观看| 99久久国产综合色|国产精品| 国产成人av一区| 成人精品视频网站| aaa亚洲精品一二三区| 成人美女视频在线观看| 99re热视频精品| 在线观看中文字幕不卡| 欧美日韩精品一区二区天天拍小说| 在线观看亚洲精品| 欧美疯狂性受xxxxx喷水图片| 欧美精品乱码久久久久久按摩| 欧美老肥妇做.爰bbww视频| 欧美日韩一区二区三区在线| 91精品国产综合久久精品| 日韩一区二区精品在线观看| 欧美变态口味重另类| 国产免费观看久久| 综合久久国产九一剧情麻豆| 亚洲精品午夜久久久| 五月天精品一区二区三区| 久久精品国产在热久久| 国产成人免费xxxxxxxx| 在线观看av一区二区| 在线观看日韩国产| 日韩精品一区二区三区中文不卡| 久久九九影视网| 亚洲美女一区二区三区| 青青草国产精品97视觉盛宴| 国产一区二区91| 色av成人天堂桃色av| 精品裸体舞一区二区三区| 中文字幕中文字幕在线一区| 天天色天天爱天天射综合| 国产综合久久久久久久久久久久| 99天天综合性| 欧美电视剧在线观看完整版| 综合久久国产九一剧情麻豆| 蜜臀久久99精品久久久久宅男| 99久久99久久精品免费观看| 欧美一区二区免费观在线| 国产精品五月天| 日韩高清欧美激情| 99国产精品久久久久久久久久| 日韩视频免费直播| 又紧又大又爽精品一区二区| 韩国视频一区二区| 欧美日韩在线免费视频| 国产欧美一区二区精品久导航|