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

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

?? syslib.c

?? VxWorks系統(tǒng)realtek8139網(wǎng)卡驅(qū)動(源碼).zip
?? C
?? 第 1 頁 / 共 4 頁
字號:
    }

/*******************************************************************************
*
* sysPhysMemTop - get the address of the top of physical memory
*
* This routine returns the address of the first missing byte of memory,
* which indicates the top of physical memory.
*
* Memory probing begins at the end of BSS; at every 4K boundary a byte
* is read until it finds one that cannot be read, or 4MB have been probed,
* whichever is first.
*
* RETURNS: The address of the top of physical memory.
*
* INTERNAL
* This routine is used by sysHwInit() to differentiate between models.
* It is highly questionable whether vxMemProbe() can be used during the
* initial stage of booting.
*/

char *sysPhysMemTop (void)
    {
#define TEST_PATTERN	0x12345678
#define SYS_PAGE_SIZE	0x10000
#define N_TIMES		3

    static char *memTop = NULL;			/* top of memory */
    int delta		= SYS_PAGE_SIZE;
    BOOL found		= FALSE;
    PHYS_MEM_DESC *pMmu;
    int temp[N_TIMES];
    char gdtr[6];
    char *p;
    int ix;

    if (memTop != NULL)
	return (memTop);

    /* if (&end) is in upper memory, we assume it is VxWorks image.
     * if not, it is Boot image */

    if ((int)&end > 0x100000)
        p = (char *)(((int)&end + (delta - 1)) & (~ (delta - 1)));
    else
	p = (char *)0x100000;

    /* find out the actual size of the memory (max 1GB) */

    for (; (int)p < 0x40000000; p += delta)
	{
	for (ix=0; ix<N_TIMES; ix++)			/* save and write */
	    {
	    temp[ix] = *((int *)p + ix);
	    *((int *)p + ix) = TEST_PATTERN;
	    }
	cacheFlush (DATA_CACHE, p, 4 * sizeof(int));	/* for 486, Pentium */

	if (*(int *)p != TEST_PATTERN)			/* compare */
	    {
	    p -= delta;
	    delta /= 2;					/* make delta half */
	    if (delta <= 0)				/* exit if delta is 0 */
		{					/* page aligned addr */
                memTop = (char *)((int)p & ~(VM_PAGE_SIZE - 1));
	        found = TRUE;
	        break;
		}
	    }

	for (ix=0; ix<N_TIMES; ix++)			/* restore */
	    *((int *)p + ix) = temp[ix];
	}
    
    if (!found)		/* we are fooled by write-back external cache */
        memTop = (char *)(LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE);

    /* copy the global descriptor table from RAM/ROM to RAM */

    bcopy ((char *)sysGdt, (char *)pSysGdt, GDT_ENTRIES * sizeof(GDT));
    *(short *)&gdtr[0]	= GDT_ENTRIES * sizeof(GDT) - 1;
    *(int *)&gdtr[2]	= (int)pSysGdt;

/* 
 * We assume that there are no memory mapped IO addresses
 * above the "memTop" if INCLUDE_PCI is not defined.
 * Thus we set the "limit" to get the General Protection Fault
 * when the memory above the "memTop" is accessed.
 */

#ifndef	INCLUDE_PCI
    {
    GDT *pGdt = pSysGdt;
    int limit = (((int)memTop) / 0x1000 - 1);

    for (ix=1; ix < GDT_ENTRIES; ix++)
	{
	pGdt++;
	pGdt->limit00 = limit & 0x0ffff;
	pGdt->limit01 = ((limit & 0xf0000) >> 16) | (pGdt->limit01 & 0xf0);
	}
    }
#endif	/* INCLUDE_PCI */

    /* load the global descriptor table. set the MMU table */

    sysLoadGdt (gdtr);

#if	(VM_PAGE_SIZE == PAGE_SIZE_4KB)
    pMmu = &sysPhysMemDesc[3];		/* 4th entry: above 1.5MB upper memory */
    pMmu->len = (UINT)memTop - (UINT)pMmu->physicalAddr;
#else	/* (VM_PAGE_SIZE == PAGE_SIZE_4KB) */
    pMmu = &sysPhysMemDesc[1];		/* 2nd entry: above 4MB upper memory */
    pMmu->len = (UINT)memTop - (UINT)pMmu->physicalAddr;
#endif	/* (VM_PAGE_SIZE == PAGE_SIZE_4KB) */

    memTopPhys = memTop;		/* set the real memory size */
    
    return (memTop);
    }

/*******************************************************************************
*
* sysMemTop - get the address of the top of VxWorks memory
*
* This routine returns a pointer to the first byte of memory not
* controlled or used by VxWorks.
*
* The user can reserve memory space by defining the macro USER_RESERVED_MEM
* in config.h.  This routine returns the address of the reserved memory
* area.  The value of USER_RESERVED_MEM is in bytes.
*
* RETURNS: The address of the top of VxWorks memory.
*/

char * sysMemTop (void)
    {
    static char * memTop = NULL;

    if (memTop == NULL)
        {
        memTop = sysPhysMemTop () - USER_RESERVED_MEM;

        if ((int)&end < 0x100000)		/* this is for bootrom */
            memTop = (char *)0xa0000;
        }

    return (memTop);
    }

/*******************************************************************************
*
* sysToMonitor - transfer control to the ROM monitor
*
* This routine transfers control to the ROM monitor.  It is usually called
* only by reboot() -- which services ^X -- and by bus errors at interrupt
* level.  However, in some circumstances, the user may wish to introduce a
* new <startType> to enable special boot ROM facilities.
*
* RETURNS: Does not return.
*/

STATUS sysToMonitor
    (
    int startType   /* passed to ROM to tell it how to boot */
    )
    {
    FUNCPTR pEntry;
    int ix;
    int iy;
    int iz;
    char buf[ROM_SIGNATURE_SIZE];
    short *pSrc;
    short *pDst;

    VM_ENABLE (FALSE);			/* disbale MMU */

    /* decide a destination RAM address and the entry point */

    if ((int)&end > 0x100000)
	{
	pDst = (short *)RAM_HIGH_ADRS;	/* copy it in lower mem */
	pEntry = (FUNCPTR)(RAM_HIGH_ADRS + ROM_WARM_HIGH);
	}
    else
	{
	pDst = (short *)RAM_LOW_ADRS;	/* copy it in upper mem */
	pEntry = (FUNCPTR)(RAM_LOW_ADRS + ROM_WARM_LOW);
	}

    /* disable 16-bit memory access */

#ifdef  INCLUDE_ULTRA
    sysOutByte (IO_ADRS_ULTRA + 4, sysInByte (IO_ADRS_ULTRA + 4) | 0x80);
    sysOutByte (IO_ADRS_ULTRA + 5, sysInByte (IO_ADRS_ULTRA + 5) & ~0x80);
#endif  /* INCLUDE_ULTRA */

#ifdef  INCLUDE_ELC
    sysOutByte (IO_ADRS_ELC + 5, sysInByte (IO_ADRS_ELC + 5) & ~0x80);
#endif  /* INCLUDE_ELC */

    /* copy EPROM to RAM and jump, if there is a VxWorks EPROM */

    for (ix = 0; ix < NELEMENTS(sysRomBase); ix++)
	{
	bcopyBytes ((char *)sysRomBase[ix], buf, ROM_SIGNATURE_SIZE);
	if (strncmp (sysRomSignature, buf, ROM_SIGNATURE_SIZE) == 0)
	    {
	    for (iy = 0; iy < 1024; iy++)
		{
		*sysRomBase[ix] = iy;		/* map the moveable window */
		pSrc = (short *)((int)sysRomBase[ix] + 0x200);
	        for (iz = 0; iz < 256; iz++)
		    *pDst++ = *pSrc++;
		}
            sysClkDisable ();	/* disable the system clock interrupt */
	    sysIntInitPIC ();	/* reset the used interrupt controllers */
	    (*pEntry) (startType);
	    }
	}

#ifdef	INCLUDE_FD
    if (sysWarmType == SYS_WARM_FD)
	{
	IMPORT int dosFsDrvNum;

        fdDrv (FD_INT_VEC, FD_INT_LVL);		/* initialize floppy disk */
	if (dosFsDrvNum == ERROR)
    	    dosFsInit (NUM_DOSFS_FILES);	/* initialize DOS-FS */

	if (usrFdConfig (sysWarmFdDrive, sysWarmFdType, "/vxboot/") == ERROR)
	    {
	    printErr ("usrFdConfig failed.\n");
	    return (ERROR);
	    }
	}
#endif	/* INCLUDE_FD */

#ifdef	INCLUDE_ATA
    if (sysWarmType == SYS_WARM_ATA)
	{
	ATA_RESOURCE *pAtaResource  = &ataResources[sysWarmAtaCtrl];
	IMPORT int dosFsDrvNum;

        if (ataDrv (sysWarmAtaCtrl, pAtaResource->drives,
	    pAtaResource->intVector, pAtaResource->intLevel,
	    pAtaResource->configType, pAtaResource->semTimeout,
	    pAtaResource->wdgTimeout) == ERROR)	/* initialize ATA/IDE disk */
	    {
	    printErr ("Could not initialize.\n");
	    return (ERROR);
	    }
	if (dosFsDrvNum == ERROR)
    	    dosFsInit (NUM_DOSFS_FILES);        /* initialize DOS-FS */

	if (usrAtaConfig (sysWarmAtaCtrl, sysWarmAtaDrive, "/vxboot/") == ERROR)
	    {
	    printErr ("usrAtaConfig failed.\n");
	    return (ERROR);
	    }
	}
#endif	/* INCLUDE_ATA */

#ifdef	INCLUDE_TFFS
    if (sysWarmType == SYS_WARM_TFFS)
	{
	IMPORT int dosFsDrvNum;

        tffsDrv ();				/* initialize TFFS */
	if (dosFsDrvNum == ERROR)
    	    dosFsInit (NUM_DOSFS_FILES);	/* initialize DOS-FS */

	if (usrTffsConfig (sysWarmTffsDrive, FALSE, "/vxboot/") == ERROR)
	    {
	    printErr ("usrTffsConfig failed.\n");
	    return (ERROR);
	    }
	}
#endif	/* INCLUDE_TFFS */

#if	(defined(INCLUDE_FD) || defined(INCLUDE_ATA) || defined(INCLUDE_TFFS))
    if ((sysWarmType == SYS_WARM_FD) || (sysWarmType == SYS_WARM_ATA) || 
	(sysWarmType == SYS_WARM_TFFS))
	{
        int fd;

        if ((fd = open ("/vxboot/bootrom.sys", O_RDWR, 0644)) == ERROR)
	    {
            if ((fd = open ("/vxboot/bootrom.dat", O_RDWR, 0644)) == ERROR)
		{
                printErr ("Can't open \"%s\"\n", "bootrom.{sys,dat}");
	        return (ERROR);
		}
            if (read (fd, (char *)pDst, 0x20) == ERROR) /* a.out header */
	        {
	        printErr ("Error during read file: %x\n", errnoGet ());
	        return (ERROR);
                }
	    }

        /* read text and data, write them to the memory */

        if (read (fd, (char *)pDst, 0x98000) == ERROR)
	    {
	    printErr ("Error during read file: %x\n", errnoGet ());
	    return (ERROR);
            }

        close (fd);

        sysClkDisable ();	/* disable the system clock interrupt */
	sysIntInitPIC ();	/* reset the used interrupt controllers */
        (*pEntry) (startType);
	}
#endif	/* (INCLUDE_FD) || (INCLUDE_ATA) || (INCLUDE_TFFS) */

    intLock ();

#ifdef INCLUDE_ELC
    elcdetach (0);
#endif /* INCLUDE_ELC */

#ifdef INCLUDE_ULTRA
    ultradetach (0);
#endif /* INCLUDE_ULTRA */

    sysClkDisable ();

    sysWait ();
    sysOutByte (COMMAND_8042, 0xfe);	/* assert SYSRESET */
    sysWait ();
    sysOutByte (COMMAND_8042, 0xff);	/* NULL command */

    sysReboot ();			/* crash the global descriptor table */

    return (OK);	/* in case we ever continue from ROM monitor */
    }


/*******************************************************************************
*
* sysIntInitPIC - initialize the interrupt controller
*
* This routine initializes the interrupt controller.
*
* RETURNS: N/A
*
* ARGSUSED0
*/

LOCAL void sysIntInitPIC (void)
    {

#if	defined(VIRTUAL_WIRE_MODE)
    {
    int addrLo;		/* page aligned Local APIC Base Address */
    int lengthLo;	/* length of Local APIC registers */

    loApicInit ();
    i8259Init ();

    /* add an entry to the sysMmuPhysDesc[] for Local APIC */

    addrLo   = ((int)loApicBase / PAGE_SIZE) * PAGE_SIZE;
    lengthLo = (int)loApicBase - addrLo + LOAPIC_LENGTH;
    if ((lengthLo % PAGE_SIZE) != 0)
	lengthLo = (lengthLo / PAGE_SIZE + 1) * PAGE_SIZE;
    
    sysMmuMapAdd ((void *)addrLo, lengthLo, 
		  VM_STATE_MASK_FOR_ALL, VM_STATE_FOR_IO);
    }
#elif	defined(SYMMETRIC_IO_MODE)
    {
    int addrLo;		/* page aligned Local APIC Base Address */
    int addrIo;		/* page aligned IO APIC Base Address */
    int lengthLo;	/* length of Local APIC registers */
    int lengthIo;	/* length of IO APIC registers */

    loApicInit ();
    i8259Init ();
    ioApicInit ();

    /* add an entry to the sysMmuPhysDesc[] for Local APIC and IO APIC */

    addrLo   = ((int)loApicBase / PAGE_SIZE) * PAGE_SIZE;
    lengthLo = (int)loApicBase - addrLo + LOAPIC_LENGTH;
    if ((lengthLo % PAGE_SIZE) != 0)
	lengthLo = (lengthLo / PAGE_SIZE + 1) * PAGE_SIZE;
    
    addrIo   = ((int)ioApicBase / PAGE_SIZE) * PAGE_SIZE;
    lengthIo = (int)ioApicBase - addrIo + IOAPIC_LENGTH;
    if ((lengthIo % PAGE_SIZE) != 0)
	lengthIo = (lengthIo / PAGE_SIZE + 1) * PAGE_SIZE;
    
    if (addrLo == addrIo)
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久先锋影音av鲁色资源| 91丨porny丨在线| 国产老女人精品毛片久久| 91免费版在线看| 欧美成人在线直播| 夜夜嗨av一区二区三区四季av| 美女爽到高潮91| 欧美午夜精品久久久久久孕妇 | 成人免费观看av| 美女网站在线免费欧美精品| www.av精品| 久久久噜噜噜久噜久久综合| 日韩综合一区二区| 欧美亚洲一区二区三区四区| 成人免费在线视频| 国产成人av一区| 久久免费美女视频| 国产综合久久久久久久久久久久| 这里只有精品视频在线观看| 亚洲午夜成aⅴ人片| 91小视频在线免费看| 国产精品久久久久9999吃药| 韩国三级中文字幕hd久久精品| 精品美女一区二区| 日韩精品电影在线| 欧美日韩国产综合久久| 欧美成人精品二区三区99精品| 一区二区三区国产| 色综合一区二区三区| 一区二区三区免费在线观看| 91在线一区二区三区| 亚洲同性同志一二三专区| 成人网在线播放| 亚洲人精品午夜| 色诱亚洲精品久久久久久| 一区二区三区精品| 欧美日韩免费一区二区三区| 天堂一区二区在线| 日韩精品在线一区| 国产乱妇无码大片在线观看| 欧美激情艳妇裸体舞| 成人免费黄色大片| 亚洲素人一区二区| 欧美日韩国产一级二级| 奇米色一区二区| 亚洲精品一区二区三区香蕉| 国产成人免费在线视频| 亚洲蜜臀av乱码久久精品 | 免费成人美女在线观看.| 日韩欧美中文字幕制服| 国产v日产∨综合v精品视频| 日韩成人免费看| 久久综合视频网| 一本大道久久a久久精二百 | 一区二区三区欧美日韩| 538在线一区二区精品国产| 奇米影视一区二区三区小说| 欧美激情一区二区| 欧美日韩久久久一区| 国内不卡的二区三区中文字幕| 中文字幕不卡的av| 欧美三级韩国三级日本三斤| 国产一区二区三区蝌蚪| 亚洲毛片av在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品美女久久久久久久| 色综合久久中文字幕综合网 | 久久众筹精品私拍模特| 成人av网址在线观看| 日日夜夜一区二区| 中文字幕欧美三区| 欧美老人xxxx18| 成人福利视频网站| 久久疯狂做爰流白浆xx| 亚洲人成网站精品片在线观看| 日韩一级大片在线观看| 97久久精品人人爽人人爽蜜臀| 麻豆国产精品官网| 一区二区三区小说| 久久久亚洲国产美女国产盗摄| 欧美四级电影网| 97久久久精品综合88久久| 国产毛片一区二区| 日产精品久久久久久久性色| 一区二区三区四区在线播放| 国产欧美日韩中文久久| 精品国产乱码久久久久久1区2区| 色激情天天射综合网| 成人av在线一区二区三区| 免费在线看一区| 亚洲电影一区二区| 亚洲免费av在线| 一区在线播放视频| 久久影院午夜片一区| 91精品免费在线| 欧美久久久久中文字幕| 91福利在线观看| 91免费精品国自产拍在线不卡| 成人一区在线观看| 国产成人超碰人人澡人人澡| 激情文学综合网| 精品一区二区三区久久| 麻豆成人久久精品二区三区红| 亚洲一区二区三区在线看| 亚洲男人天堂av网| 亚洲男同性恋视频| 亚洲精品大片www| 一区二区三区欧美| 一区二区高清在线| 亚洲成人免费看| 天涯成人国产亚洲精品一区av| 亚洲午夜一区二区| 亚洲综合无码一区二区| 亚洲国产人成综合网站| 午夜一区二区三区视频| 日韩精品免费视频人成| 青椒成人免费视频| 国产资源在线一区| 高清在线不卡av| 成人av在线播放网址| www.日韩av| 在线观看一区不卡| 4438亚洲最大| 精品少妇一区二区三区日产乱码 | 亚洲午夜久久久久久久久电影院 | 日本91福利区| 极品尤物av久久免费看| 国产精品系列在线播放| av资源网一区| 欧美日韩第一区日日骚| 精品国产一区二区三区忘忧草 | 中文字幕av一区二区三区| 国产精品二三区| 香蕉乱码成人久久天堂爱免费| 免费一级欧美片在线观看| 国产一区二区免费看| jlzzjlzz国产精品久久| 欧美日韩久久一区二区| 精品国产伦一区二区三区观看方式 | 免费在线视频一区| 国产成人免费在线观看不卡| 色综合激情五月| 日韩欧美在线观看一区二区三区| 久久精品欧美一区二区三区不卡| 亚洲欧洲成人av每日更新| 婷婷亚洲久悠悠色悠在线播放| 国产美女娇喘av呻吟久久| 欧美亚洲动漫精品| 久久精品在线观看| 亚洲线精品一区二区三区八戒| 久草精品在线观看| 色素色在线综合| 久久九九久精品国产免费直播| 亚洲黄色av一区| 国产精品一区二区久久精品爱涩| 色激情天天射综合网| 久久蜜桃香蕉精品一区二区三区| 亚洲视频免费观看| 国产在线精品国自产拍免费| 欧美综合一区二区| 久久综合九色综合欧美就去吻| 亚洲综合丁香婷婷六月香| 国产乱码精品1区2区3区| 欧美日韩久久久| 亚洲精品欧美专区| 国产高清在线精品| 欧美一区二区久久久| 亚洲免费观看在线视频| 国产一区二区毛片| 日韩视频一区二区三区在线播放 | 一区二区三区日韩精品| 国产伦精一区二区三区| 91.com视频| 亚洲福利一区二区三区| 99这里只有精品| 国产欧美日韩另类视频免费观看| 日本亚洲欧美天堂免费| 色就色 综合激情| 最近日韩中文字幕| 成人av资源站| 亚洲国产精品精华液2区45| 久久99国产精品久久99果冻传媒| 欧美高清hd18日本| 亚洲国产精品麻豆| 97se亚洲国产综合在线| 欧洲精品中文字幕| 亚洲视频一区在线| 懂色av一区二区三区免费看| 精品成人一区二区三区四区| 免费精品视频最新在线| 制服丝袜一区二区三区| 午夜精品一区二区三区免费视频 | 五月天激情综合网| 精品视频123区在线观看| 亚洲国产一区二区视频| 在线这里只有精品| 亚洲777理论| 制服丝袜国产精品| 久久av老司机精品网站导航| 欧美成人在线直播|