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

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

?? syslib.c

?? SL811 USB接口芯片用于VxWorks系統的驅動源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
* Normally, the user specifies the amount of physical memory with the
* macro LOCAL_MEM_SIZE in config.h. If not defined, then LOCAL_MEM_SIZE 
* is assumed to be, and must be, the true size of physical memory.
*
* NOTE: Do not adjust LOCAL_MEM_SIZE to reserve memory for application
* use.  See sysMemTop() for more information on reserving memory.
*
* RETURNS: The address of the top of physical memory.
*
* SEE ALSO: sysMemTop()
*/

char * sysPhysMemTop (void)
    {
    static char * physTop = NULL;

    if (physTop == NULL)
        {

        physTop = (char *)(LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE);

        }

    return physTop;
    }

/*******************************************************************************
*
* 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;
        }

    return memTop;
    }

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

STATUS sysToMonitor
    (
    int startType    /* parameter passed to ROM to tell it how to boot */
    )
    {
    FUNCPTR pRom = (FUNCPTR) (ROM_TEXT_ADRS + 4); /* Warm reboot */

    cacheDisable (0);			  /* disable icache */
    cacheDisable (1);			  /* disable dcache */

    sysDcrUicsrClear(0xffffffff); /* clear pending interrupts */

	vxMsrSet (0);		          /* clear MSR */

    (*pRom) (startType);          /* jump to bootrom */

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

/*******************************************************************************
*
* sysProcNumGet - get the processor number
*
* This routine returns the processor number for the CPU board, which is
* set with sysProcNumSet().
*
* RETURNS: The processor number for the CPU board, always 0 (zero).
*
* SEE ALSO: sysProcNumSet()
*/

int sysProcNumGet (void)
    {
    return (0);
    }

/*******************************************************************************
*
* sysProcNumSet - set the processor number
*
* This routine sets the processor number for the CPU board.
* Processor numbers should be unique on a single backplane.
*
* NOTE: This routine has no effect, since there is no VMEbus.
* RETURNS: N/A
*
* SEE ALSO: sysProcNumGet(),
*/

void sysProcNumSet
    (
    int procNum /* processor number (ignored in SBC405GP BSP) */
    )
    {
    sysProcNum = sysProcNumGet();
    }

/*******************************************************************************
*
* sysIntLockLevelSet - set the current interrupt lock-out level
*
* This routine sets the current interrupt lock-out level.
*
* NOTE: This routine has no effect, since the facility is currently not
* implemented.
*
* RETURNS: ERROR, always.
*/

int sysIntLockLevelSet
    (
    int newLvl    /* new interrupt level */
    )
    {
    return (ERROR);
    }

/*******************************************************************************
*
* sysLocalDelay - delay of <ms_delay> milliseconds used before kernel is up
*
*
* RETURNS: N/A.
*/
void sysLocalDelay
    (
    UINT32 ms_delay
    )
    {
    UINT32 start_upper;
    UINT32 start_lower;
    UINT32 end_upper;
    UINT32 end_lower;
    UINT32 upper;
    UINT32 lower;
    UINT32 delay;
    BOOL timesup = FALSE;

    /*
     *  Read the timebase twice to start
     */
    vxTimeBaseGet (&start_upper, &start_lower);
    vxTimeBaseGet (&end_upper, &end_lower);

    while (timesup == FALSE)
        {

        /*
         * Determine if the delay has been long enough
         */
        upper = end_upper - start_upper;
        if (start_lower > end_lower)
            upper--;
        lower = end_lower - start_lower;

        delay =  1000 * upper * (0xFFFFFFFF / sysTimerClkFreq);
        delay += lower / (sysTimerClkFreq / 1000);

        if (delay > ms_delay)
            {
            timesup = TRUE;
            }
            else
            {
            vxTimeBaseGet (&end_upper, &end_lower);
            }
        }
    return;
    }


/*******************************************************************************
*
* sysInfoGet - Determines system information (clock frequencies, etc.) based on
*              Walnut board switch settings.
*
* This routine returns information about the current operating environment of
* the Walnut board.  Optionally, it prints the information out.
*
* RETURNS: OK or ERROR.
*/

STATUS sysInfoGet
    (
    SYS_INFO    * sysInfo,
    int           verbose
    )
    {

    UINT32  pllmr;
    UINT32  sysClkPeriodNs = ONE_BILLION / SYS_CLK_FREQ;


    bzero((char *)sysInfo, sizeof(SYS_INFO));

    /*
     * Read PLL Mode register
     */
    pllmr = sysDcrPllmrGet();

    if (verbose)
        printf("\n");

    /*
     * Determine FWD_DIV.
     */
    switch (pllmr & PLLMR_FWD_DIV_MASK)
        {
        case PLLMR_FWD_DIV_BYPASS:
            sysInfo->pllFwdDiv = 1;
            break;
        case PLLMR_FWD_DIV_3:
            sysInfo->pllFwdDiv = 3;
            break;
        case PLLMR_FWD_DIV_4:
            sysInfo->pllFwdDiv = 4;
            break;
        case PLLMR_FWD_DIV_6:
            sysInfo->pllFwdDiv = 6;
            break;
        default:
            if (verbose)
                printf("Invalid FWDDIV bits in PLL Mode reg: %8.8x\a\n", pllmr);
            return(ERROR);
            break;
        }

    /*
     * Determine FBK_DIV.
     */

    switch (pllmr & PLLMR_FB_DIV_MASK)
        {
        case PLLMR_FB_DIV_1:
            sysInfo->pllFbkDiv = 1;
            break;
        case PLLMR_FB_DIV_2:
            sysInfo->pllFbkDiv = 2;
            break;
        case PLLMR_FB_DIV_3:
            sysInfo->pllFbkDiv = 3;
            break;
        case PLLMR_FB_DIV_4:
            sysInfo->pllFbkDiv = 4;
            break;
        }

    /*
     * Determine PLB_DIV.
     */

    switch (pllmr & PLLMR_CPU_TO_PLB_MASK)
        {
        case PLLMR_CPU_PLB_DIV_1:
            sysInfo->pllPlbDiv = 1;
            break;
        case PLLMR_CPU_PLB_DIV_2:
            sysInfo->pllPlbDiv = 2;
            break;
        case PLLMR_CPU_PLB_DIV_3:
            sysInfo->pllPlbDiv = 3;
            break;
        case PLLMR_CPU_PLB_DIV_4:
            sysInfo->pllPlbDiv = 4;
            break;
        }

    /*
     * Determine PCI_DIV.
     */

    switch (pllmr & PLLMR_PCI_TO_PLB_MASK)
        {
        case PLLMR_PCI_PLB_DIV_1:
            sysInfo->pllPciDiv = 1;
            break;
        case PLLMR_PCI_PLB_DIV_2:
            sysInfo->pllPciDiv = 2;
            break;
        case PLLMR_PCI_PLB_DIV_3:
            sysInfo->pllPciDiv = 3;
            break;
        case PLLMR_PCI_PLB_DIV_4:
            sysInfo->pllPciDiv = 4;
            break;
        }

    /*
     * Determine EXTBUS_DIV.
     */

    switch (pllmr & PLLMR_EXB_TO_PLB_MASK)
        {
        case PLLMR_EXB_PLB_DIV_2:
            sysInfo->pllExtBusDiv = 2;
            break;
        case PLLMR_EXB_PLB_DIV_3:
            sysInfo->pllExtBusDiv = 3;
            break;
        case PLLMR_EXB_PLB_DIV_4:
            sysInfo->pllExtBusDiv = 4;
            break;
        case PLLMR_EXB_PLB_DIV_5:
            sysInfo->pllExtBusDiv = 5;
            break;
        }

    /*
     * Determine OPB_DIV.
     */

    switch (pllmr & PLLMR_OPB_TO_PLB_MASK)
        {
        case PLLMR_OPB_PLB_DIV_1:
            sysInfo->pllOpbDiv = 1;
            break;
        case PLLMR_OPB_PLB_DIV_2:
            sysInfo->pllOpbDiv = 2;
            break;
        case PLLMR_OPB_PLB_DIV_3:
            sysInfo->pllOpbDiv = 3;
            break;
        case PLLMR_OPB_PLB_DIV_4:
            sysInfo->pllOpbDiv = 4;
            break;
        }


    /*
     * Check pllFwdDiv to see if running in bypass mode where the CPU speed
     * is equal to the 405GP SYS_CLK_FREQ. If not in bypass mode, check VCO
     * to make sure it is within the proper range.
     *    spec:    VCO = SYS_CLOCK x FBKDIV x PLBDIV x FWDDIV
     * Note freqVCO is calculated in Mhz to avoid errors introduced by rounding.
     */

    if (sysInfo->pllFwdDiv == 1)
        {
        sysInfo->freqProcessor = SYS_CLK_FREQ;
        sysInfo->freqPLB = SYS_CLK_FREQ/sysInfo->pllPlbDiv;
        }
    else
        {
        sysInfo->freqVCOMhz = (1000 * sysInfo->pllFwdDiv *
                               sysInfo->pllFbkDiv * sysInfo->pllPlbDiv)
                               / sysClkPeriodNs;
        if (sysInfo->freqVCOMhz >= VCO_MIN && sysInfo->freqVCOMhz <= VCO_MAX)
            {
            sysInfo->freqPLB = (ONE_BILLION /
                             ((sysClkPeriodNs * 10) / sysInfo->pllFbkDiv)) * 10;
            sysInfo->freqProcessor = sysInfo->freqPLB * sysInfo->pllPlbDiv;
            }
        else
            {
            if (verbose)
                {
                printf("Invalid VCO frequency calculated :  %d MHz \a\n",
                       sysInfo->freqVCOMhz);
                printf("It must be between %d-%d MHz \a\n", VCO_MIN, VCO_MAX);
                printf("PLL Mode reg           :  %8.8x\a\n", pllmr);
                }
            return(ERROR);
            }
        }

    return(OK);
    }

/*******************************************************************************
*
* sysCpuCheck - confirm the CPU type
*
* This routine validates the cpu type.  If the wrong cpu type is discovered
* a message is printed using the serial channel in polled mode.
*
* RETURNS: N/A.
*/

void sysCpuCheck (void)
    {
    int msgSize;
    int msgIx;
    SIO_CHAN * pSioChan;        /* serial I/O channel */

    /* Check for a valid CPU type;  If one is found, just return */

	switch(vxPvrGet())
	{
	case PVR_405GP_RA:
	case PVR_405GP_RB:
	case PVR_405GP_RC:
		break;
	case PVR_405GP_RD:
	case PVR_405GP_RE:
		return;
	default:
		break;
	}

    /* Invalid CPU type; print error message and terminate */

    msgSize = strlen (wrongCpuMsg);

    sysSerialHwInit ();

    pSioChan = sysSerialChanGet (0);

    sioIoctl (pSioChan, SIO_MODE_SET, (void *) SIO_MODE_POLL);

    for (msgIx = 0; msgIx < msgSize; msgIx++)
    	{
    	while (sioPollOutput (pSioChan, wrongCpuMsg[msgIx]) == EAGAIN);
    	}

    sysToMonitor (BOOT_NO_AUTOBOOT);
    }

#ifdef INCLUDE_SHOW_ROUTINES
/*******************************************************************************
*
* sysInfoShow - Shows system information (clock frequencies, etc.) based on
*               Walnut board switch settings.
*
* This routine displays information about the current operating environment of
* the Walnut board.
*
* RETURNS: OK or ERROR.
*/

STATUS sysInfoShow
    (
    )
    {
    SYS_INFO  sysInfo;

    return(sysInfoGet(&sysInfo, 1));

    }
#endif /* INCLUDE_SHOW_ROUTINES */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类中文字幕网| 欧美日韩亚洲综合| 天堂一区二区在线免费观看| 最新高清无码专区| 中文无字幕一区二区三区| 色婷婷综合久久久中文一区二区| 国产精品 日产精品 欧美精品| 丝袜美腿高跟呻吟高潮一区| 亚洲一区免费观看| 夫妻av一区二区| 国产成人精品免费在线| 国产在线精品国自产拍免费| 风间由美一区二区三区在线观看 | 亚洲免费电影在线| 夜夜嗨av一区二区三区中文字幕 | 亚洲一区二区三区不卡国产欧美| 亚洲一区二区三区中文字幕| 国产午夜一区二区三区| 日本一区二区三区在线不卡| 国产欧美日韩精品一区| 欧美国产一区二区在线观看| av不卡在线观看| 色呦呦国产精品| 在线免费观看日本欧美| 欧美一区二区三区在线| 国产精品久久久久影院| 一区二区三区中文免费| 亚洲精品中文字幕乱码三区| 亚洲国产综合人成综合网站| 亚洲一区在线观看免费| 麻豆精品视频在线观看视频| 国产精品18久久久久久久网站| 国产精品456露脸| 精品欧美乱码久久久久久1区2区| 欧美日韩精品二区第二页| 日韩一区二区在线看| 国产精品日韩成人| 视频一区中文字幕国产| 久久久久88色偷偷免费| 亚洲永久免费视频| 国产高清精品久久久久| 欧美亚洲综合久久| 欧美日韩一区二区三区不卡| 精品国产区一区| 亚洲成人激情社区| 国产成人夜色高潮福利影视| 欧美揉bbbbb揉bbbbb| 91精品在线一区二区| 国产精品国产成人国产三级| 久久精品国产一区二区三区免费看| 99r国产精品| 欧美日韩国产电影| 中文字幕中文在线不卡住| 美女网站在线免费欧美精品| 一本色道久久综合亚洲aⅴ蜜桃| 91精品国产色综合久久久蜜香臀| 日韩欧美中文字幕一区| 亚洲精品久久嫩草网站秘色| 国产成人免费视频| 亚洲精品在线电影| 欧美国产一区在线| 国产一区二区h| 欧美精品v国产精品v日韩精品| 久久综合五月天婷婷伊人| 国产精品国产三级国产aⅴ中文 | 日韩视频免费直播| 亚洲五码中文字幕| 成人免费va视频| 国产精品久久久久久久久久免费看 | 综合精品久久久| 色综合久久久久综合体桃花网| 欧美国产一区二区在线观看| 国产精品伊人色| 久久尤物电影视频在线观看| 午夜电影网一区| 欧美日韩国产电影| 三级一区在线视频先锋| 欧美色欧美亚洲另类二区| 日韩天堂在线观看| 亚洲欧美日韩一区二区三区在线观看| 精品一区在线看| 亚洲精品一区二区三区精华液| 免费高清在线一区| 91网站黄www| 亚洲欧美另类在线| 欧美性生交片4| 日韩中文字幕亚洲一区二区va在线 | 中文字幕一区二区三区乱码在线 | 国产一区二区三区在线观看免费视频 | 成人动漫av在线| 91精品午夜视频| 亚洲欧美另类久久久精品2019| 色婷婷精品大在线视频| 一个色在线综合| 7777精品伊人久久久大香线蕉的 | 亚洲综合在线电影| 欧美群妇大交群的观看方式| 欧美96一区二区免费视频| 日韩精品专区在线影院观看| 国产成人精品三级| 自拍av一区二区三区| 欧美精品一二三| 国产美女视频一区| 最新久久zyz资源站| 欧美日韩久久一区| 精品一区二区三区在线播放视频| 中文字幕高清一区| 欧美视频一区二区在线观看| 久久精品噜噜噜成人av农村| 国产精品超碰97尤物18| 欧美一卡二卡三卡| 国产成人精品亚洲777人妖| 国产福利91精品一区二区三区| 樱花影视一区二区| 欧美一级免费观看| 高清免费成人av| 性感美女久久精品| 91美女片黄在线观看91美女| 亚洲伦理在线免费看| 欧美一区二区人人喊爽| 成人免费va视频| 六月婷婷色综合| 51精品国自产在线| 成人毛片视频在线观看| 久久精品国产精品青草| 亚洲影视在线播放| 国产欧美一区二区三区沐欲| 国产一区二区三区四区五区美女 | 欧美成人伊人久久综合网| 成人a级免费电影| 免费一区二区视频| 亚洲图片欧美视频| 欧美精品一区二区精品网| 色婷婷综合五月| 成人动漫一区二区| 久久99精品久久久久久久久久久久| 一区二区三区 在线观看视频| 亚洲综合免费观看高清完整版在线 | 91精品国产欧美一区二区成人| 波波电影院一区二区三区| 国产主播一区二区| 极品少妇一区二区| 日韩1区2区3区| 亚洲高清视频中文字幕| 中文字幕综合网| 综合久久给合久久狠狠狠97色 | 精品电影一区二区| 91精品午夜视频| 欧美精品在线观看播放| 欧美日韩国产区一| 欧美色精品天天在线观看视频| 色综合久久久久综合| 99精品在线免费| 成人毛片老司机大片| 奇米四色…亚洲| 日韩高清一区二区| 日韩精品一二三| 久久国产尿小便嘘嘘尿| 一区二区三区波多野结衣在线观看| 亚洲人成人一区二区在线观看 | 国产精品你懂的在线| 国产蜜臀97一区二区三区| 久久久精品国产99久久精品芒果| 欧美日韩不卡在线| 欧美日韩高清一区二区不卡| 在线电影国产精品| 欧美一区二区视频在线观看2022 | 亚洲国产精品影院| 亚洲成人av电影| 午夜精品久久久久久久久久久| 性做久久久久久免费观看| 丝袜美腿一区二区三区| 捆绑紧缚一区二区三区视频| 久久精品国产亚洲aⅴ| 综合在线观看色| 亚洲一级电影视频| 蜜桃av噜噜一区| 成人午夜在线视频| 在线观看91视频| 欧美一区二区三区四区高清 | 91久久精品日日躁夜夜躁欧美| 夫妻av一区二区| 欧美日韩一区三区| 欧美xxxxx牲另类人与| 中文字幕电影一区| 2024国产精品| 亚洲乱码国产乱码精品精可以看| 亚洲国产视频一区二区| 久久99精品久久久久婷婷| 日韩精品久久久久久| 538在线一区二区精品国产| 日本一区二区免费在线观看视频| 亚洲另类中文字| 国内一区二区在线| 亚洲国产日韩a在线播放性色| 久久精品一级爱片| 亚洲精品国产一区二区精华液 | 成人精品一区二区三区中文字幕| 欧美无人高清视频在线观看| 久久久噜噜噜久久中文字幕色伊伊|