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

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

?? ne2000end.c

?? 440bx vxworks bsp
?? C
?? 第 1 頁 / 共 5 頁
字號:
/******************************************************************************
*
* ne2000EndLoad - initialize the driver and device
*
* This routine initializes the driver and the device to the operational state.
* All of the device specific parameters are passed in the initString.
*
* The string contains the target specific parameters like this:
*
* "unit:register addr:int vector:int level:shmem addr:shmem size:shmem width"
*
* RETURNS: An END object pointer or NULL on error.
*/

END_OBJ* ne2000EndLoad
    (
    char* initString,		/* String to be parsed by the driver. */
    void* pBSP			/* for BSP group */
    )
    {
    NE2000END_DEVICE 	*pDrvCtrl;
    int 		level;
    UCHAR		regVal;

#ifdef DEBUG
    printf ("ne2000EndLoad(%s)\n", initString);
    printf ("\tinitString '%s'\n", initString ? initString : "");
    printf ("\tpBSP       '%s'\n", pBSP ? pBSP : "");
#endif
    if (initString == NULL)
        return (NULL);

    if (initString[0] == '\0')
        {
        bcopy((char *)NE2000_DEV_NAME, initString, NE2000_DEV_NAME_LEN);
        return (NULL);
        }

    /* allocate the device structure */

    pDrvCtrl = (NE2000END_DEVICE *) calloc (sizeof(NE2000END_DEVICE), 1);
    if (pDrvCtrl == NULL)
	goto errorExit;

    /* parse the init string, filling in the device structure */

    if (ne2000Parse (pDrvCtrl, initString) == ERROR)
	goto errorExit;


    /*
     *  If the optional load string parameters configRegA or configRegB
     *  are passed in with the load string then load the passed in value
     *  into the appropriate register.  
     */

    if (pDrvCtrl->configRegA != 0)
        {
        /* This must be an atomic transaction, so it must be intLocked */

        level = intLock ();

        SYS_OUT_CHAR (pDrvCtrl, ENE_CMD, CMD_PAGE0);
        SYS_IN_CHAR (pDrvCtrl, ENE_RBCR0, &regVal);
        SYS_OUT_CHAR (pDrvCtrl, ENE_RBCR0, pDrvCtrl->configRegA);

        intUnlock (level);
        }                 

    if (pDrvCtrl->configRegB != 0)
        {
        /* This must be an atomic transaction, so it must be intLocked */

        level = intLock ();

        SYS_IN_CHAR (pDrvCtrl, ENE_RBCR1, &regVal);
        SYS_OUT_CHAR (pDrvCtrl, ENE_RBCR1, pDrvCtrl->configRegB);

        intUnlock (level);
        }         

    /* stop device */

    SYS_OUT_CHAR (pDrvCtrl, ENE_CMD, CMD_NODMA | CMD_PAGE0 | CMD_STOP);

    /* 
     * HELP:
     * In the generic driver it always uses BUS16 here. I agree that this
     * code looks better, but if the device is inactive why are we doing this
     * here at all.  Why not call ne2000Config from ne2000Start and let it set
     * up the chip when we actually start it ???
     */

    if (pDrvCtrl->byteAccess)
	SYS_OUT_CHAR (pDrvCtrl, ENE_DCON, DCON_BSIZE1 | DCON_BUS_8
			| DCON_LOOPBK_OFF);
    else
	SYS_OUT_CHAR (pDrvCtrl, ENE_DCON, DCON_BSIZE1 | DCON_BUS16 
			| DCON_LOOPBK_OFF);

    /* Ask the BSP to provide the ethernet address. */

    SYS_ENET_ADDR_GET (pDrvCtrl);

    /* initialize the END parts of the structure */

    if (END_OBJ_INIT (&pDrvCtrl->endObj, (DEV_OBJ *)pDrvCtrl, NE2000_DEV_NAME,
		      pDrvCtrl->unit, &ne2000FuncTable,
		      "ne2000 Enhanced Network Driver") == ERROR)
	goto errorExit;

    /* initialize the MIB2 parts of the structure */

    if (END_MIB_INIT (&pDrvCtrl->endObj, M2_ifType_ethernet_csmacd,
		      &pDrvCtrl->enetAddr[0], 6, ETHERMTU,
                      END_SPEED) == ERROR)
	goto errorExit;

    /* Perform memory allocation/distribution */

    if (ne2000MemInit (pDrvCtrl) == ERROR)
	goto errorExit;

    /* set the flags to indicate readiness */

    END_OBJ_READY (&pDrvCtrl->endObj,
		    IFF_NOTRAILERS | IFF_MULTICAST | IFF_BROADCAST);

    return (&pDrvCtrl->endObj);

errorExit:
    if (pDrvCtrl != NULL)
	free ((char *)pDrvCtrl);

    return (NULL);
    }

/******************************************************************************
*
* ne2000Parse - parse the init string
*
* Parse the input string.  Fill in values in the driver control structure.
*
* The initialization string format is:
* .CS
*   "unit:adrs:vecnum:intLvl:byteAccess:usePromEnetAddr:offset"
* .CE
*
* .IP <unit>
* Device unit number, a small integer.
* .IP <adrs>
* Base address
* .IP <vecNum>
* Interrupt vector number (used with sysIntConnect)
* .IP <intLvl>
* Interrupt level (used with sysLanIntEnable)
* .IP <byteAccess>
* Use 8-bit access mode.
* .IP <usePromEnetAddr>
* get ethernet address from PROM.
* .IP <offset>
* offset for memory alignment
* Set Configuration Register A. Defaults to reset value. 
* .IP <configRegA>
* Set Configuration Register B. Defaults to reset value. 
* .IP <configRegB>
* .LP
*
* RETURNS: OK or ERROR for invalid arguments.
*/

LOCAL STATUS ne2000Parse
    (
    NE2000END_DEVICE * pDrvCtrl,
    char * initString
    )
    {
    char*	tok;
    char*	holder = NULL;

    /* Parse the initString */

    /* Unit number. */

    tok = strtok_r (initString, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->unit = atoi (tok);

    /* Base address. */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->base = strtoul (tok, NULL, 16);

    /* Interrupt vector. */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->ivec = strtoul (tok, NULL, 16);

    /* Interrupt level. */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->ilevel = strtoul (tok, NULL, 16);

    /* 8-bit access. */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->byteAccess = atoi (tok);

    /* ethernet address from PROM. */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->usePromEnetAddr = atoi (tok);

    /* memory alignment offset */

    tok = strtok_r (NULL, ":", &holder);
    if (tok == NULL)
	return (ERROR);
    pDrvCtrl->offset = strtoul (tok, NULL, 16);

    /* Set configuration register A - optional parameter */
   
    pDrvCtrl->configRegA = 0;

    tok = strtok_r (NULL, ":", &holder);
    if (tok != NULL)
        pDrvCtrl->configRegA = strtoul (tok, NULL, 16);

    /* Set configuration register B - optional parameter */
   
    pDrvCtrl->configRegB = 0;

    tok = strtok_r (NULL, ":", &holder);
    if (tok != NULL)
        pDrvCtrl->configRegB = strtoul (tok, NULL, 16);

    return (OK);
    }

/*******************************************************************************
*
* ne2000MemInit - initialize memory for the chip
*
* This routine is highly specific to the device.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS ne2000MemInit
    (
    NE2000END_DEVICE * pDrvCtrl	/* device to be initialized */
    )
    {
    M_CL_CONFIG	eneMclBlkConfig;
    CL_DESC	clDesc;                      /* cluster description */

    bzero ((char *)&eneMclBlkConfig, sizeof(eneMclBlkConfig));
    bzero ((char *)&clDesc, sizeof(clDesc));

    clDesc.clNum   = 32;
    clDesc.clSize  = NE2000_BUFSIZ;	/* allow for alignment */
    clDesc.memSize = ((clDesc.clNum * (clDesc.clSize + 8)) + 4);

    eneMclBlkConfig.mBlkNum  = 16 * 4;
    eneMclBlkConfig.clBlkNum = clDesc.clNum;

    /*
     * mBlk and cluster configuration memory size initialization
     * memory size adjusted to hold the netPool pointer at the head.
     */
    eneMclBlkConfig.memSize =
      (eneMclBlkConfig.mBlkNum * (MSIZE + sizeof (long)))
      + (eneMclBlkConfig.clBlkNum * (CL_BLK_SZ + sizeof (long)));
    eneMclBlkConfig.memArea = (char *) memalign(sizeof (long),
						eneMclBlkConfig.memSize);
    if (eneMclBlkConfig.memArea == NULL)
        return (ERROR);

    clDesc.memArea = (char *) malloc (clDesc.memSize);
    if (clDesc.memArea == NULL)
	return (ERROR);

    pDrvCtrl->endObj.pNetPool = (NET_POOL_ID) malloc (sizeof(NET_POOL));
    if (pDrvCtrl->endObj.pNetPool == NULL)
        return (ERROR);

    /* Initialize the net buffer pool with transmit buffers */
    if (netPoolInit (pDrvCtrl->endObj.pNetPool, &eneMclBlkConfig,
                     &clDesc, 1, NULL) == ERROR)
        return (ERROR);

    /* Save the cluster pool id */
    pDrvCtrl->clPoolId = clPoolIdGet (pDrvCtrl->endObj.pNetPool,
				      NE2000_BUFSIZ, FALSE);

    return (OK);
    }

/*******************************************************************************
*
* ne2000Ioctl - the driver I/O control routine
*
* Process an ioctl request.
*/

LOCAL int ne2000Ioctl
    (
    void*	pCookie,	/* device ptr */
    int		cmd,
    caddr_t	data
    )
    {
    int error = 0;
    long value;
    NE2000END_DEVICE* pDrvCtrl = (NE2000END_DEVICE *) pCookie;

    switch ((UINT) cmd)
        {
        case EIOCSADDR:
	    if (data == NULL)
		return (EINVAL);
            bcopy ((char *)data, (char *)END_HADDR(&pDrvCtrl->endObj),
		   END_HADDR_LEN(&pDrvCtrl->endObj));
            break;

        case EIOCGADDR:
	    if (data == NULL)
		return (EINVAL);
            bcopy ((char *)END_HADDR(&pDrvCtrl->endObj), (char *)data,
		   END_HADDR_LEN(&pDrvCtrl->endObj));
            break;

        case EIOCSFLAGS:
	    value = (long)data;
	    if (value < 0)
		{
		value = -value;
		value--;
		END_FLAGS_CLR (&pDrvCtrl->endObj, value);
		}
	    else
		END_FLAGS_SET (&pDrvCtrl->endObj, value);

	    ne2000Config (pDrvCtrl, TRUE);
            break;

        case EIOCGFLAGS:
	    *(int *)data = END_FLAGS_GET(&pDrvCtrl->endObj);
            break;

	case EIOCPOLLSTART:
	    ne2000PollStart (pDrvCtrl);
	    break;

	case EIOCPOLLSTOP:
	    ne2000PollStop (pDrvCtrl);
	    break;

        case EIOCGMIB2:
            if (data == NULL)
                return (EINVAL);
            bcopy((char *)&pDrvCtrl->endObj.mib2Tbl, (char *)data,
                  sizeof(pDrvCtrl->endObj.mib2Tbl));
            break;

        case EIOCGFBUF:
            if (data == NULL)
                return (EINVAL);
            break;

        default:
            error = EINVAL;
        }

    return (error);
    }

/*******************************************************************************
*
* ne2000Start - start the device
*
* This function calls BSP functions to connect interrupts and start the
* device running in interrupt mode.
*
* RETURNS: OK or ERROR
*
*/

LOCAL STATUS ne2000Start
    (
    void*	pCookie
    )
    {
    STATUS result;
    NE2000END_DEVICE* pDrvCtrl = (NE2000END_DEVICE *) pCookie;

    ENDLOGMSG (("ne2000Start\n", 0, 0, 0, 0, 0, 0));

    SYS_INT_CONNECT (pDrvCtrl, ne2000Int, (int)pDrvCtrl, &result);
    if (result == ERROR)
	return (ERROR);


    /* mark the interface as up (SPR #32034) */

    END_FLAGS_SET (&pDrvCtrl->endObj, (IFF_UP | IFF_RUNNING));


    /* Enable interrupts */

    pDrvCtrl->imask = (pDrvCtrl->flags & END_POLLING) ? 0 : NE2000_ALL_INTS;
    SYS_OUT_CHAR (pDrvCtrl, ENE_INTMASK, pDrvCtrl->imask);
    SYS_INT_ENABLE (pDrvCtrl);

    return (OK);
    }

/******************************************************************************
*
* ne2000Config - reconfigure the interface under us.
*
* Reconfigure the interface setting promiscuous mode, and changing the
* multicast interface list.
*
* NOMANUAL
*/
LOCAL void ne2000Config
    (
    NE2000END_DEVICE *pDrvCtrl,
    BOOL	      intEnable		/* TRUE to enable interrupts */
    )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产欧美在线播放| 一区二区三区不卡视频在线观看 | 国产真实乱对白精彩久久| 国产精品国产三级国产aⅴ入口| 一本久道久久综合中文字幕| 婷婷夜色潮精品综合在线| 欧美国产成人精品| 欧美丰满一区二区免费视频| 成人精品视频网站| 秋霞电影一区二区| 尤物视频一区二区| 亚洲精品在线三区| 欧美日韩国产大片| 91在线精品一区二区三区| 精品无人码麻豆乱码1区2区 | 精品一区二区三区在线观看| 日韩码欧中文字| www国产精品av| 欧美日韩一区高清| 一本一本大道香蕉久在线精品 | 欧美变态口味重另类| 色妹子一区二区| 国产专区欧美精品| 奇米精品一区二区三区四区| 一区二区三区四区中文字幕| 国产精品麻豆一区二区| 国产亚洲美州欧州综合国| 日韩一区二区免费在线观看| 欧美视频日韩视频在线观看| 欧美韩国日本不卡| 精品处破学生在线二十三| 91精品福利在线一区二区三区 | 一本色道a无线码一区v| 国产aⅴ精品一区二区三区色成熟| 久久精品国产网站| 久久国产尿小便嘘嘘| 日本午夜一本久久久综合| 亚洲第一成年网| 亚洲高清一区二区三区| 午夜伦欧美伦电影理论片| 天天综合色天天综合色h| 亚洲gay无套男同| 香蕉成人伊视频在线观看| 亚洲线精品一区二区三区八戒| 亚洲特级片在线| 亚洲视频在线一区| 亚洲精品少妇30p| 亚洲一区视频在线观看视频| 香蕉影视欧美成人| 日韩电影在线免费观看| 丝袜a∨在线一区二区三区不卡| 日韩黄色免费电影| 久久er精品视频| 国产盗摄女厕一区二区三区| 成人动漫精品一区二区| 99在线精品免费| 在线观看亚洲一区| 欧美日本精品一区二区三区| 91精品国产色综合久久不卡蜜臀| 91麻豆精品国产自产在线 | 色综合一区二区| 欧美福利一区二区| 亚洲美女一区二区三区| 亚洲国产sm捆绑调教视频 | 精品综合久久久久久8888| 久久先锋影音av鲁色资源 | 日韩国产欧美在线视频| 亚洲一区二区三区三| 精品国产1区二区| 久久久久国产精品麻豆ai换脸| 国产日产欧美一区二区视频| 日本一区二区三区国色天香 | 欧美一级高清大全免费观看| 日韩午夜精品视频| 精品久久人人做人人爰| 国产欧美日韩综合精品一区二区 | 综合网在线视频| 亚洲第一激情av| 精品在线免费视频| 久久综合色8888| 18欧美乱大交hd1984| 天天综合色天天综合色h| 黄色日韩三级电影| 色伊人久久综合中文字幕| 在线91免费看| 国产精品久久久久影院色老大| 亚洲3atv精品一区二区三区| 激情六月婷婷综合| 91国偷自产一区二区三区成为亚洲经典| 欧美日韩国产在线播放网站| 久久一区二区三区国产精品| 一区二区三区高清不卡| 国产一区二区三区日韩| 色爱区综合激月婷婷| 精品国产乱码久久久久久老虎| 亚洲乱码国产乱码精品精小说 | 中文字幕亚洲欧美在线不卡| 亚洲老妇xxxxxx| 欧美年轻男男videosbes| 国产精品萝li| 99精品欧美一区二区三区综合在线| 国产91综合网| 成人免费av在线| 欧美亚洲自拍偷拍| 26uuu精品一区二区| 日韩精品1区2区3区| 日韩一区二区在线看| 性感美女极品91精品| 欧美日本精品一区二区三区| 亚洲成a人片在线观看中文| 8x8x8国产精品| 精品伊人久久久久7777人| 久久精品视频网| 色综合 综合色| 婷婷综合在线观看| 久久精品亚洲麻豆av一区二区| 国产乱人伦精品一区二区在线观看| 久久免费看少妇高潮| 懂色av一区二区三区蜜臀| 亚洲欧美在线aaa| 欧美日本高清视频在线观看| 久久精品国产精品亚洲红杏| 中文乱码免费一区二区| 欧美日韩午夜精品| 国产成人av一区二区三区在线| 一区二区在线观看视频在线观看| 欧美精品久久天天躁| 欧美日韩一级黄| 久久99热99| 亚洲影视在线观看| 国产精品天美传媒沈樵| 欧美午夜电影在线播放| 成人午夜视频福利| 男女性色大片免费观看一区二区| 日韩你懂的在线播放| youjizz久久| 国产一区欧美日韩| 美女在线视频一区| 亚洲图片欧美色图| 国产精品美女www爽爽爽| 欧美一二三区在线| 欧美日韩中文字幕精品| 色婷婷综合久久久| 成人免费精品视频| 一本大道久久精品懂色aⅴ| 成人免费视频网站在线观看| 久久福利资源站| 久久精品av麻豆的观看方式| 日韩avvvv在线播放| 日本v片在线高清不卡在线观看| 日韩美女视频在线| 欧美午夜电影一区| av电影在线观看一区| 波多野结衣亚洲一区| www.欧美.com| 在线精品视频免费观看| 欧美日韩国产综合一区二区三区| 在线观看一区不卡| 2022国产精品视频| 国产精品久久久一本精品| 亚洲美女免费在线| 亚洲va欧美va天堂v国产综合| 亚洲综合在线观看视频| 丝袜美腿亚洲一区| 国产在线不卡视频| 亚洲欧美综合网| 综合中文字幕亚洲| 日韩av电影免费观看高清完整版 | 国产日产欧美一区二区视频| ww亚洲ww在线观看国产| 国产精品二区一区二区aⅴ污介绍| 亚洲综合精品久久| 精品一区二区久久| 91婷婷韩国欧美一区二区| 欧美日本一区二区三区四区| 国产欧美精品国产国产专区| 日韩中文字幕一区二区三区| 成人h精品动漫一区二区三区| 欧美午夜精品理论片a级按摩| 久久九九影视网| 久久99日本精品| 久久综合九色综合97婷婷女人| 一区二区三区欧美久久| 成人黄色综合网站| 国产日韩欧美制服另类| 国产一区二区三区四区五区美女| 欧美www视频| 日韩中文字幕不卡| 欧美色电影在线| 免费观看在线综合色| 欧美午夜片在线看| 久久精品国产99久久6| 日本高清免费不卡视频| 一区二区三区四区高清精品免费观看| caoporn国产精品| 一区二区三区四区不卡在线| 99精品久久只有精品| 亚洲福中文字幕伊人影院| 欧美三级电影网| 高清免费成人av|