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

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

?? mmu40lib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    /* add buffers to the free table  descriptor list */    pMem = mmuBufBlockAlloc (&newTransTbl->freeTableDescBlockList, 		  sizeof (LEVEL_1_TABLE_DESC) * NUM_LEVEL_1_TABLE_DESCRIPTORS,		  newTransTbl);    if (pMem == NULL)	return (ERROR);    /* pMem points to a physical page that we allocate table descriptor blocks     * out of - add it to the translation table's list of pages that it owns.     */    lstAdd (&newTransTbl->memPageList, (NODE *) pMem);    /* allocate memory to hold the level 1 descriptor array  - we can get it     * from the freeTableDescBlockList since the level 1 tables are the same     * size as the level 2 tables.     */    newTransTbl->pLevel1 = pLevel1Table =       (LEVEL_1_TABLE_DESC *) lstGet (&newTransTbl->freeTableDescBlockList);    if (pLevel1Table == NULL)	return (ERROR);    /* copy the level 1 table from mmuGlobalTransTbl,     * so we get the global virtual memory      */    bcopy ((char *) mmuGlobalTransTbl.pLevel1, 	   (char *) pLevel1Table, 	   sizeof (LEVEL_1_TABLE_DESC) * NUM_LEVEL_1_TABLE_DESCRIPTORS);    mmuMemPagesWriteDisable (newTransTbl);    return (OK);    }/******************************************************************************** mmuTransTblDelete - delete a translation table.* * mmuTransTblDelete deallocates all the memory used to store the translation* table entries.  It does not deallocate physical pages mapped into the* virtual memory space.** RETURNS: OK**/LOCAL STATUS mmuTransTblDelete     (    MMU_TRANS_TBL *transTbl		/* translation table to be deleted */    )    {    char *thisBlock = (char *) lstFirst (&transTbl->memBlockList);    char *nextBlock;    /* free all the pages in the translation table's memory partition */    mmuMemPagesWriteEnable (transTbl);    while (thisBlock != NULL)	{	nextBlock = (void *) lstNext ((NODE *) thisBlock);	thisBlock = (char *)((NODE *) thisBlock - 1); 	free ((void *) thisBlock);	thisBlock = nextBlock;	}    /* free the translation table data structure */    free (transTbl);        return (OK);    }/******************************************************************************** mmuVirtualPageCreate - set up translation tables for a virtual page** simply check if there's already a page descriptor array that has a* page descriptor for the given virtual page.  If there isn't, create one.** RETURNS OK or ERROR if couldn't allocate space. */LOCAL STATUS mmuVirtualPageCreate     (    MMU_TRANS_TBL *pTransTbl, 		/* translation table */    void *virtAddr			/* virtual addr to create */    )    {    FAST UINT i;    LEVEL_1_TABLE_DESC *pLevel1;    LEVEL_2_TABLE_DESC *pLevel2;    PAGE_DESC *pPageDescTable;    UINT level1Index = LEVEL_1_TABLE_INDEX (virtAddr);    UINT level2Index = LEVEL_2_TABLE_INDEX (virtAddr);    pLevel1 = &pTransTbl->pLevel1[level1Index];    if (pLevel1->udt == UDT_INVALID)	{	/* create the level 2 table */	pLevel2 = mmuTableDescBlockAlloc (pTransTbl); 	if (pLevel2 == NULL)	    return (ERROR);	/* invalidate all the level 2 descriptors */	mmuMemPagesWriteEnable (pTransTbl);	for (i = 0; i < NUM_LEVEL_2_TABLE_DESCRIPTORS; i++)	    {	    pLevel2 [i].pageSize8k.addr = -1;	    pLevel2 [i].generic.used = 0; 	    pLevel2 [i].generic.writeProtect = 0; 	    pLevel2 [i].generic.udt = UDT_INVALID; 	    }	pLevel1->addr = (UINT) pLevel2 >> 9;	pLevel1->udt = UDT_VALID;	mmuMemPagesWriteDisable (pTransTbl);	}    pLevel2 = &(((LEVEL_2_TABLE_DESC *)(pLevel1->addr << 9))[level2Index]);     if (pLevel2->generic.udt == UDT_INVALID)	{	UINT numDesc = ((mmuPageSize == PAGE_SIZE_4K) ? 64 : 32);	/* create page descriptor table */	pPageDescTable = mmuPageDescBlockAlloc (pTransTbl);	if (pPageDescTable == NULL)	    return (ERROR);	/* invalidate all the page descriptors */	mmuMemPagesWriteEnable (pTransTbl);	for (i = 0; i < numDesc; i++)	    {	    pPageDescTable[i].pageSize4k.addr = -1;	    pPageDescTable[i].generic.global = 0; 	    pPageDescTable[i].generic.u1 = 0; 	    pPageDescTable[i].generic.u0 = 0; 	    pPageDescTable[i].generic.supervisor = 0; 	    pPageDescTable[i].generic.cacheMode = 1;  /* cachable, copyback */	    pPageDescTable[i].generic.modified = 0; 	    pPageDescTable[i].generic.used = 0; 	    pPageDescTable[i].generic.writeProtect = 0; 	    pPageDescTable[i].generic.pdt = PDT_INVALID; 	    }	if (mmuPageSize == PAGE_SIZE_4K)	    pLevel2->pageSize4k.addr = (UINT) pPageDescTable >> 8;	else	    pLevel2->pageSize8k.addr = (UINT) pPageDescTable >> 7;	pLevel2->generic.udt = UDT_VALID;	mmuMemPagesWriteDisable (pTransTbl);	}    mmuATCFlush (virtAddr);    return (OK);    }/******************************************************************************** mmuPageDescBlockAlloc - allocate a block of page descriptors** This routine is used to allocate a block of page descriptors.** RETURNS: pointer to new page descriptor block*/LOCAL PAGE_DESC *mmuPageDescBlockAlloc    (    MMU_TRANS_TBL *transTbl    )    {    PAGE_DESC *newPageDescBlock;    mmuMemPagesWriteEnable (transTbl);    newPageDescBlock = (PAGE_DESC *) lstGet (&transTbl->freePageDescBlockList);    if (newPageDescBlock == NULL)	{	UINT numDesc = ((mmuPageSize == PAGE_SIZE_4K) ? 64 : 32);	PAGE_DESC *pMem;	/* get some more memory for page descriptor blocks */	pMem = (PAGE_DESC *) mmuBufBlockAlloc (&transTbl->freePageDescBlockList,						numDesc * sizeof (PAGE_DESC),						transTbl);	if (pMem == NULL)	    return (NULL);	lstAdd (&transTbl->memPageList, (NODE *) pMem);	newPageDescBlock = 	    (PAGE_DESC *) lstGet (&transTbl->freePageDescBlockList);	if (newPageDescBlock == NULL)	    return (NULL);	}    mmuMemPagesWriteDisable (transTbl);        return (newPageDescBlock);    }/******************************************************************************** mmuTableDescBlockAlloc - allocate a block of table descriptors** This routine is used to allocate a block of table descriptors.** RETURNS: pointer to new table descriptor block*/LOCAL LEVEL_2_TABLE_DESC *mmuTableDescBlockAlloc    (    MMU_TRANS_TBL *transTbl    )    {    LEVEL_2_TABLE_DESC *newTableDescBlock;    mmuMemPagesWriteEnable (transTbl);    newTableDescBlock = 	(LEVEL_2_TABLE_DESC *) lstGet (&transTbl->freeTableDescBlockList);    if (newTableDescBlock == NULL)	{	LEVEL_2_TABLE_DESC *pMem;	/* get some more memory for table descriptor blocks */	pMem = (LEVEL_2_TABLE_DESC *) 	           mmuBufBlockAlloc (&transTbl->freeTableDescBlockList,		   NUM_LEVEL_2_TABLE_DESCRIPTORS * sizeof (LEVEL_2_TABLE_DESC),		   transTbl);	if (pMem == NULL)	    return (NULL);	lstAdd (&transTbl->memPageList, (NODE *) pMem);	newTableDescBlock = 	    (LEVEL_2_TABLE_DESC *) lstGet (&transTbl->freeTableDescBlockList);	if (newTableDescBlock == NULL)	    return (NULL);	}    mmuMemPagesWriteDisable (transTbl);        return (newTableDescBlock);    }/******************************************************************************** mmuBufBlockAlloc - get memory and break it up into fixed length blocks** Allocates a page of memory, breaks it up into as many buffers as it can,* and hangs all the buffers on the specified list.  The first buffer is* not hung on the list, so that the beginning of the page can be used to* keep track of the page (on a seperate linked list).** RETURNS: pointer to allocated page or NULL if allocation fails*/LOCAL void *mmuBufBlockAlloc     (    LIST *pList,    UINT bufSize,    MMU_TRANS_TBL *pTransTbl    )    {    char *pPage;     char *nextBuf;    UINT numBufs = mmuPageSize / bufSize;    int i;    if ((pPage = (char *) lstGet (&pTransTbl->memFreePageList)) == NULL)	{	pPage = memPartAlignedAlloc (mmuPageSource, 				     mmuPageSize * mmuNumPagesInFreeList, 				     mmuPageSize); 	if (pPage == NULL)	    return (NULL);	/* the beginning of each page is devoted to a NODE that strings	   pages together on memPageList;  a second NODE immediately	   following will string together blocks of memory that we malloc 	   on memBlockList.	*/	lstAdd (&pTransTbl->memBlockList, (NODE *) (pPage + sizeof (NODE)));	/* break the buffer up into individual pages and stash them in the	   free page list.	 */	for (i = 0; i < mmuNumPagesInFreeList; i++, pPage += mmuPageSize)	    lstAdd (&pTransTbl->memFreePageList, (NODE *) pPage);	pPage = (char *) lstGet (&pTransTbl->memFreePageList);	}    if (pPage == NULL)	return (NULL);	        nextBuf = pPage + bufSize;    for (i = 1; i < numBufs; i++)	{	lstAdd (pList, (NODE *) nextBuf);	nextBuf += bufSize;        }         return ((void *) pPage);    }/******************************************************************************** mmuEnable - turn mmu on or off** RETURNS: OK*/LOCAL STATUS mmuEnable     (    BOOL enable			/* TRUE to enable, FALSE to disable MMU */    )    {    FAST int oldIntLev;    LOCAL BOOL firstTime = TRUE;    /* lock out interrupts to protect kludgey static data structure */    oldIntLev = intLock ();      mmuEnableInline(enable);    mmuEnabled = enable;    intUnlock (oldIntLev);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国视频一区二区| 色婷婷av一区二区| 图片区小说区国产精品视频| 国产精品亲子乱子伦xxxx裸| 2017欧美狠狠色| 精品伦理精品一区| 日韩欧美一区二区三区在线| 欧美一区二区三区人| 欧美久久婷婷综合色| 欧美一区二区精品在线| 欧美一区二区三区免费| 欧美成人在线直播| 国产午夜精品一区二区三区四区| 中文字幕欧美日韩一区| 中文字幕亚洲成人| 亚洲不卡av一区二区三区| 亚洲aaa精品| 国产在线精品一区二区不卡了| 国产在线看一区| 成人国产精品免费观看视频| 色婷婷久久一区二区三区麻豆| 色天使色偷偷av一区二区| 欧美丰满少妇xxxbbb| 久久亚洲二区三区| 中文字幕在线一区二区三区| 天堂一区二区在线免费观看| 国产精品性做久久久久久| 色先锋资源久久综合| 精品捆绑美女sm三区| 综合婷婷亚洲小说| 蜜桃视频第一区免费观看| 成人精品免费视频| 欧美理论电影在线| 国产精品美女久久久久久2018| 天天影视涩香欲综合网| 国产一区二区三区美女| 欧美日韩专区在线| 中文字幕av一区 二区| 午夜精品爽啪视频| jlzzjlzz欧美大全| 日韩精品中文字幕在线不卡尤物| 亚洲国产精品成人综合| 青青草国产成人av片免费| 粉嫩aⅴ一区二区三区四区 | 国产美女视频91| 色综合久久中文字幕综合网| 欧美不卡一区二区三区四区| 中文字幕一区av| 国产精品一色哟哟哟| 欧美精品一二三区| 伊人开心综合网| 国产91丝袜在线播放九色| 日韩三级视频在线观看| 一区二区高清在线| 成人午夜激情影院| 精品免费国产二区三区 | 久久精品视频一区| 日韩精品乱码免费| 欧美午夜精品免费| 亚洲欧洲综合另类在线 | 亚洲乱码国产乱码精品精的特点| 精品在线播放午夜| 制服丝袜亚洲精品中文字幕| 亚洲欧美一区二区三区孕妇| av综合在线播放| 国产精品护士白丝一区av| 国产精品系列在线播放| 久久九九影视网| 国产精品白丝jk黑袜喷水| 日韩欧美一二三区| 玖玖九九国产精品| 欧美xxxxx牲另类人与| 老汉av免费一区二区三区| 欧美一激情一区二区三区| 奇米色777欧美一区二区| 欧美日韩美少妇| 日韩va欧美va亚洲va久久| 欧美精品1区2区3区| 日本在线不卡视频| 日韩欧美不卡一区| 国产一区二区三区av电影| 国产欧美精品一区| 粉嫩av一区二区三区粉嫩| 成人免费在线播放视频| 在线影院国内精品| 日本亚洲免费观看| 久久网站最新地址| 不卡的电影网站| 亚洲综合成人网| 欧美一区二区成人| 国产黑丝在线一区二区三区| 国产精品热久久久久夜色精品三区| 99视频精品免费视频| 亚洲一二三四在线观看| 51精品国自产在线| 国产很黄免费观看久久| 亚洲欧美国产高清| 日韩一区二区三区免费观看| 国产精品亚洲成人| 亚洲人成伊人成综合网小说| 欧美日韩亚州综合| 国产黄色成人av| 亚洲午夜电影网| 精品999在线播放| 91久久精品国产91性色tv| 日韩高清不卡一区| 国产精品电影一区二区| 6080午夜不卡| 99国产精品久久| 久久超碰97中文字幕| 亚洲乱码一区二区三区在线观看| 在线播放亚洲一区| 成人福利视频网站| 久久精品国产免费| 亚洲最色的网站| 国产日韩精品视频一区| 欧美日韩电影一区| 成人精品亚洲人成在线| 琪琪久久久久日韩精品| 亚洲日本在线视频观看| 欧美成人精品福利| 欧美日韩成人一区二区| voyeur盗摄精品| 激情综合一区二区三区| 午夜欧美电影在线观看| 亚洲国产精品二十页| 日韩精品一区二区三区四区视频| 欧美在线短视频| 成a人片亚洲日本久久| 国产一区二区三区黄视频 | 夜夜嗨av一区二区三区网页| 欧美精品一区二区三区高清aⅴ| 欧洲在线/亚洲| zzijzzij亚洲日本少妇熟睡| 国产一区二区毛片| 另类小说视频一区二区| 国产一区欧美日韩| 午夜欧美电影在线观看| 亚洲一区在线观看免费| 国产精品蜜臀av| 欧美经典一区二区| 久久综合九色综合97婷婷女人| 日韩一区二区三区电影| 欧美久久一二三四区| 欧美日韩一区国产| 精品视频一区三区九区| 欧洲激情一区二区| 在线观看日韩电影| 色综合久久九月婷婷色综合| www.一区二区| 不卡的av电影在线观看| 成人伦理片在线| 不卡区在线中文字幕| 91色在线porny| 国产精品一级二级三级| 国产精品一二一区| 波多野结衣在线aⅴ中文字幕不卡| 国产精品18久久久久久vr| 国产电影一区二区三区| 福利91精品一区二区三区| 丁香激情综合国产| www.欧美精品一二区| 色综合视频在线观看| 欧美中文字幕不卡| 欧美三级中文字幕| 日韩一区二区三区观看| 久久伊人蜜桃av一区二区| 欧美国产视频在线| 亚洲黄色尤物视频| 日韩极品在线观看| 国产精品亚洲专一区二区三区| av亚洲精华国产精华| 欧美在线啊v一区| 91精品国产综合久久精品app| 亚洲精品在线免费播放| 国产精品青草久久| 午夜一区二区三区视频| 另类欧美日韩国产在线| 成人手机在线视频| 欧美午夜不卡视频| 精品国产不卡一区二区三区| 国产精品三级在线观看| 午夜伦欧美伦电影理论片| 国产一区二区三区在线观看免费视频 | 色婷婷国产精品| 日韩精品资源二区在线| 中文字幕不卡三区| 五月天久久比比资源色| 国产一区二区导航在线播放| 一本色道久久综合亚洲91| 欧美一级高清片在线观看| 中文字幕一区二区不卡| 捆绑调教美女网站视频一区| 成人国产精品视频| 日韩一二三四区| 一区二区视频在线| 国产精品亚洲人在线观看| 欧美日韩亚洲丝袜制服| 欧美激情一区二区在线| 日韩激情一二三区|