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

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

?? sndsend_cjw.c

?? 4510b的vxworks的BSP
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
    {
    END_DEVICE 	*pDrvCtrl;

#if 0
    ENDLOGMSG (("Loading sndsEndEnd...\n", 1, 2, 3, 4, 5, 6));
#endif

	if (initString[0] == NULL)
	{
		strcpy (initString, "secEnd");
		return (END_OBJ *)0;
	}

	/* allocate the device structure */

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

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

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

    pDrvCtrl->ivecBdmaTx = INT_LVL_BDMATx;
    pDrvCtrl->ivecBdmaRx = INT_LVL_BDMARx;
    pDrvCtrl->ivecMacTx = INT_LVL_MACTx;
    pDrvCtrl->ivecMacRx = INT_LVL_MACRx;

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

    SYS_ENET_ADDR_GET(pDrvCtrl);

	strcpy (pDrvCtrl->end.devObject.name, "secEnd");
	strcpy (pDrvCtrl->end.devObject.description, "Samsung SNDS100 END Driver");

   /* initialize the END and MIB2 parts of the structure */

    /*
     * The M2 element must come from m2Lib.h 
     * This sndsEnd is set up for a DIX type ethernet device.
     */
    if (END_OBJ_INIT (&pDrvCtrl->end, (DEV_OBJ *)pDrvCtrl, "secEnd",
                      pDrvCtrl->unit, &endFuncTable,
                      "Samsung SNDS100 END Driver") == ERROR
     || END_MIB_INIT (&pDrvCtrl->end, M2_ifType_ethernet_csmacd,
                      &pDrvCtrl->enetAddr[0], 6, ETHERMTU,
                      END_SPEED)
		    == ERROR)
	goto errorExit;

    /* Perform memory allocation/distribution */

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

    /* reset and reconfigure the device */
    sndsEndConfig (pDrvCtrl);

    /* set the flags to indicate readiness */
    END_OBJ_READY (&pDrvCtrl->end, IFF_NOTRAILERS | IFF_BROADCAST | IFF_MULTICAST);
    return (&pDrvCtrl->end);

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

    return NULL;
    }

/*******************************************************************************
*
* sndsEndParse - parse the init string
*
* Parse the input string.  Fill in values in the driver control structure.
*
* The initialization string format is:
* "<unit>:<Speed>:<duplex>:<autoneg>"
*
* .bS
* unit			Device unit number, a small integer.
* Speed			10 (10Mbps) or 100 (100 Mbps)
* duplex		0 (HDX) or 1 (FDX)
* autoneg		Autonegotiation disabled (0) or enabled (1)
* .bE
*
* RETURNS: OK or ERROR for invalid arguments.
*/

STATUS sndsEndParse
    (
    END_DEVICE * pDrvCtrl,	/* device pointer */
    char * initString		/* information string */
    )
    {
    char*	tok;
    char*	pHolder = NULL;
    
    /* Parse the initString */

     /* Unit number. */
    tok = strtok_r (initString, ":", &pHolder);
    if (tok == NULL)
	return ERROR;
    pDrvCtrl->unit = atoi (tok);

	/* netSpeed */
    tok = strtok_r (NULL, ":", &pHolder);
    if (tok == NULL)
	return ERROR;
    pDrvCtrl->netSpeed = atoi (tok);


	/* DuplexMode */
    tok = strtok_r (NULL, ":", &pHolder);
    if (tok == NULL)
	return ERROR;
    pDrvCtrl->duplexMode = atoi (tok);

	/* auto Negotiation */
    tok = strtok_r (NULL, ":", &pHolder);
    if (tok == NULL)
	return ERROR;
    pDrvCtrl->autoNeg = atoi (tok);

    return OK;
    }

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

STATUS sndsEndMemInit
    (
    END_DEVICE * pDrvCtrl	/* device to be initialized */
    )
    {

    /*
     * This is how we would set up and END netPool using netBufLib(1).
     * This code is pretty generic.
     */
    
    if ((pDrvCtrl->end.pNetPool = (NET_POOL_ID) malloc (sizeof(NET_POOL))) == NULL)
        return (ERROR);

    endMclConfig.mBlkNum = END_MBLK_NUM;
    endClDescTbl[0].clNum = END_CL_NUM;
    endMclConfig.clBlkNum = endClDescTbl[0].clNum;

    /* Calculate the total memory for all the M-Blks and CL-Blks. */
    endMclConfig.memSize = (endMclConfig.mBlkNum * (MSIZE + sizeof (long))) +
                          (endMclConfig.clBlkNum * (CL_BLK_SZ + sizeof(long)));

    if ((endMclConfig.memArea = (char *) memalign (sizeof(long),
                                                  endMclConfig.memSize))
        == NULL)
        return (ERROR);
    
    /* Calculate the memory size of all the clusters. */
    endClDescTbl[0].memSize = (endClDescTbl[0].clNum * (endClDescTbl[0].clSize + 8))
        + sizeof(int);        /* +8 is for proper alignment */

    /* Allocate the memory for the clusters */
	endClDescTbl[0].memArea =
        (char *) malloc (endClDescTbl[0].memSize);

    if ((int)endClDescTbl[0].memArea == NULL)
        {
        return (ERROR);
        }

    /* Initialize the memory pool. */
    if (netPoolInit(pDrvCtrl->end.pNetPool, &endMclConfig,
                    &endClDescTbl[0], endClDescTblNumEnt, NULL) == ERROR)
        {
        return (ERROR);
        }
    return OK;
    }
/*******************************************************************************
*
* sndsEndStart - 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 sndsEndStart
    (
    END_DEVICE *pDrvCtrl	/* device to be started */
    )
    {
	BDMARXCON bdmaRxCon;
	MACRXCON macRxCon;

	/* init BDMARXCON register */
	*(UINT32 *) (&bdmaRxCon) = *(UINT32 *)SNDS_BDMARXCON;
	bdmaRxCon.rxCon_reg.recvFrameIntrEnb = 1;
	bdmaRxCon.rxCon_reg.nullListIntrEnb = 1;
    bdmaRxCon.rxCon_reg.notOwnerIntrEnb = 1;
	bdmaRxCon.rxCon_reg.enable = 1 ;
	*(UINT32 *)SNDS_BDMARXCON = bdmaRxCon.rxCon_resetval;

printf("\rBDMARXCON %x\r", *(UINT32 *)SNDS_BDMARXCON) ;


	/* init MACRXCON register */
	*(UINT32 *)(&macRxCon) = *(UINT32 *)SNDS_MACRXCON;
	macRxCon.macRxCon_reg.receiveEnable = 1;
	*(UINT32 *)SNDS_MACRXCON = macRxCon.macRxCon_resetval;



	/* Connect BDMA and MAC TX and RX interrupts */ /*modified by knp/nts 27/9/99 */ 
													
	intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecBdmaTx), sndsEndBdmaTxInt, NULL);
	intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecBdmaRx), sndsEndBdmaRxInt, (UINT32) pDrvCtrl);
	intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecMacTx), sndsEndMacTxInt, (UINT32) pDrvCtrl);
	intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivecMacRx), sndsEndMacRxInt, NULL);

	/* Enable all the four interrupts */ /*modified by knp/nts 27/9/9/99 */

	intEnable (pDrvCtrl->ivecBdmaTx);
	intEnable (pDrvCtrl->ivecBdmaRx);
	intEnable (pDrvCtrl->ivecMacTx);
	intEnable (pDrvCtrl->ivecMacRx);

	/* Set the flags to indicate that the device is up */
	END_FLAGS_SET (&pDrvCtrl->end, IFF_UP | IFF_RUNNING);

    return (OK);
    }


/****************************************************************************** 
* sndsEndBdmaTxInt - handle controller interrupt
*
* This routine is called at interrupt level in response to an interrupt from
* the BdmaTx controller.
*
* RETURNS: N/A.
*/

LOCAL void sndsEndBdmaTxInt
    (
    END_DEVICE  *pDrvCtrl	/* interrupting device */
    )
    {
	/**Nothing to be done here**/
    }

/*******************************************************************************
* sndsEndBdmaRxInt - handle controller interrupt
*
* This routine is called at interrupt level in response to an interrupt from
* the BdmaTx controller.
*
* RETURNS: N/A.
*/

LOCAL void sndsEndBdmaRxInt
    (
    END_DEVICE  *pDrvCtrl	/* interrupting device */
    )
    {
	BDMASTAT bdmaStat;

	bdmaStat.stat_resetval = *(UINT32 *)SNDS_BDMASTAT;
	*(UINT32 *)SNDS_BDMASTAT |= bdmaStat.stat_resetval;	/* Clear status bits */

    netJobAdd ((FUNCPTR)sndsEndHandleRcvInt, (int)pDrvCtrl, bdmaStat.stat_resetval,0,0,0); 
    }
/*******************************************************************************
* sndsEndMacTxInt - handle controller interrupt
*
* This routine is called at interrupt level in response to an interrupt from
* the MacRx controller.
*
* RETURNS: N/A.
*/

LOCAL void sndsEndMacTxInt
    (
    END_DEVICE  *pDrvCtrl	/* interrupting device */
    )
    {
	TRANSMIT_FRAME_DESC *pTxDesc;

	*(UINT32 *)(&pTxDesc) = *(UINT32 *)(SNDS_BDMATXPTR);

	while (pTxDesc != gpTransmitFrameDescStart)
		{
		if (pTxDesc->txFrameData.o_bit)
			break;	/* Ownership is still with BDMA */
		if (pTxDesc->txStatusLength.comp)
			{
			pDrvCtrl->statistics.txGood++;
			}
		else	/* Update error statistics */
			{
			if (pTxDesc->txStatusLength.underRun)
				pDrvCtrl->statistics.txUnderErr++;
			if (pTxDesc->txStatusLength.exColl)
				pDrvCtrl->statistics.txExCollErr++;
			if (pTxDesc->txStatusLength.txDefer)
				pDrvCtrl->statistics.txDeferredErr++;
			if (pTxDesc->txStatusLength.paused)
				pDrvCtrl->statistics.txPaused++;
			if (pTxDesc->txStatusLength.deferAl)
				pDrvCtrl->statistics.txDeferErr++;
			if (pTxDesc->txStatusLength.ncArr)
				pDrvCtrl->statistics.txNCarrErr++;
			if (pTxDesc->txStatusLength.sqeErr)
				pDrvCtrl->statistics.txSQE++;
			if (pTxDesc->txStatusLength.lateColl)
				pDrvCtrl->statistics.txLateCollErr++;
			if (pTxDesc->txStatusLength.txPar)
				pDrvCtrl->statistics.txParErr++;
			if (pTxDesc->txStatusLength.txHalted)
				pDrvCtrl->statistics.txHalted++;
			}
		*(UINT32 *)(&pTxDesc->txStatusLength) = 0;	/* Clear status field */
		pTxDesc = pTxDesc->nextTxFrameDesc;
		}
    }

/*******************************************************************************
* sndsEndMacRxInt - handle controller interrupt
*
* This routine is called at interrupt level in response to an interrupt from
* the MacRx controller.
*
* RETURNS: N/A.
*/

LOCAL void sndsEndMacRxInt
    (
    END_DEVICE  *pDrvCtrl	/* interrupting device */
    )
    {
	/***Nothing to be done here***/
    }


/*******************************************************************************
*
* sndsEndHandleRcvInt - task level interrupt service for input packets
*
* This routine is called at task level indirectly by the interrupt
* service routine to do any message received processing.
*
* RETURNS: N/A.
*/

LOCAL void sndsEndHandleRcvInt
    (
    END_DEVICE *pDrvCtrl,	/* interrupting device */
	UINT32 stat	/* receive status */
    )
    {
	BDMASTAT bdmaStat;
/* inserted by jwchoi */
	BDMARXCON bdmaRxCon;
	MACRXCON macRxCon;
/* */
	RECEIVE_FRAME_DESC *pReceiveFrameDesc;
	UINT16 *	pFrameData;
	UINT32 frameLength;

	bdmaStat.stat_resetval = stat;
	*(UINT32 *)(&pReceiveFrameDesc) = *(UINT32 *)(SNDS_BDMARXPTR);

/*
	if ((*(UINT32 *) (&gpReceiveFrameDescStart->rxStatusLength)) == 0)
		return;
*/
    do
        {
		/*
		 * Check if Null list interrupt has occurred.  If yes, reset
		 * and restart the Ethernet MAC (as given in Samsung sample code.
		 */

		/*
		 * Received a good frame
		 */
		frameLength = gpReceiveFrameDescStart->rxStatusLength.frameLength;

		if ((*(UINT32 *) (&gpReceiveFrameDescStart->rxStatusLength)) & 0xbfff0000 )
			{
			pDrvCtrl->statistics.rxBad++;
	    	*(UINT32 *)SNDS_IOPDATA = 0xf3 ; 
			if (gpReceiveFrameDescStart->rxStatusLength.ovMax)
				pDrvCtrl->statistics.rxOvMaxSize++;
			if (gpReceiveFrameDescStart->rxStatusLength.ctlRcv)
				pDrvCtrl->statistics.rxCtlRecd++;
			if (gpReceiveFrameDescStart->rxStatusLength.rx10Stat)
				pDrvCtrl->statistics.rx10Stat++;
			if (gpReceiveFrameDescStart->rxStatusLength.alignErr)
				pDrvCtrl->statistics.rxAlignErr++;
			if (gpReceiveFrameDescStart->rxStatusLength.crcErr)
				pDrvCtrl->statistics.rxCRCErr++;
			if (gpReceiveFrameDescStart->rxStatusLength.overFlow)
				pDrvCtrl->statistics.rxOverflowErr++;
			if (gpReceiveFrameDescStart->rxStatusLength.longErr)
				pDrvCtrl->statistics.rxLongErr++;
			if (gpReceiveFrameDescStart->rxStatusLength.rxPar)
				pDrvCtrl->statistics.rxParErr++;
			if (gpReceiveFrameDescStart->rxStatusLength.rxHalted)
				pDrvCtrl->statistics.rxHalted++;
			}
		else if((gpReceiveFrameDescStart->rxStatusLength.good))
			{
			pDrvCtrl->statistics.rxGood++;
			pFrameData = (UINT16 *)(gpReceiveFrameDescStart->rxFrameData.frameDataPtr);
			sndsEndBugFix (pFrameData);
			sndsEndRecv (pDrvCtrl, (char *)pFrameData, frameLength);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级免费观看| 久久一日本道色综合| 国产精品自拍三区| 亚洲综合男人的天堂| 精品剧情v国产在线观看在线| 一本到高清视频免费精品| 精品影院一区二区久久久| 亚洲国产一区视频| 国产精品午夜春色av| 91精品国产欧美一区二区成人| 99国产精品久久| 国产风韵犹存在线视精品| 免费一级片91| 亚洲成人一二三| 中文字幕日韩精品一区| 国产亚洲精品超碰| 欧美一卡二卡在线| 欧美巨大另类极品videosbest| 99久久伊人网影院| 国产精品亚洲一区二区三区在线| 日韩成人免费在线| 亚洲成av人**亚洲成av**| 亚洲天堂久久久久久久| 日本一区二区三区久久久久久久久不 | 奇米888四色在线精品| 亚洲精品老司机| 最近日韩中文字幕| 亚洲人成精品久久久久| 中文字幕制服丝袜一区二区三区| 国产日韩影视精品| 久久久精品免费网站| 精品电影一区二区| 精品卡一卡二卡三卡四在线| 日韩视频在线你懂得| 欧美精品日韩一本| 欧美中文字幕一区二区三区亚洲| 日本高清无吗v一区| 色婷婷综合久久久中文字幕| 色悠悠久久综合| 91精品办公室少妇高潮对白| 日本精品一级二级| 日本久久一区二区| 欧美日韩三级视频| 91精品国产乱码久久蜜臀| 欧美精品tushy高清| 欧美一三区三区四区免费在线看| 91精品午夜视频| 欧美不卡一区二区三区四区| 久久综合资源网| 国产午夜精品一区二区三区四区| 国产精品乱码久久久久久| 中文字幕一区二区日韩精品绯色| 亚洲人成人一区二区在线观看 | 色欧美片视频在线观看| 91社区在线播放| 91啪九色porn原创视频在线观看| 在线免费观看视频一区| 欧美日韩aaaaa| 日韩欧美电影在线| 国产午夜精品一区二区三区视频 | 精品国产99国产精品| www日韩大片| 中文字幕第一区二区| 亚洲精品乱码久久久久久久久 | 欧美精品一二三| 26uuu亚洲综合色欧美| 国产网红主播福利一区二区| 中文字幕在线不卡一区| 亚洲午夜精品在线| 精品一区二区免费视频| www.亚洲国产| 欧美精品久久99久久在免费线| 久久综合久久久久88| 国产精品久久久久久亚洲毛片| 亚洲一区二区精品视频| 免费成人深夜小野草| 国产成人高清在线| 欧美日韩精品一区二区三区四区| 亚洲精品在线三区| 亚洲婷婷综合色高清在线| 丝袜a∨在线一区二区三区不卡| 国产美女精品人人做人人爽| 亚洲欧洲韩国日本视频| 亚洲视频在线观看三级| 亚洲国产精品自拍| 久久99热99| 91麻豆自制传媒国产之光| 欧美一区二区三区视频免费播放| 国产精品欧美极品| 天天综合网天天综合色| 成人综合婷婷国产精品久久蜜臀 | 精品久久一二三区| 一区二区三区国产精品| 精品亚洲成a人在线观看| 色综合久久六月婷婷中文字幕| 日韩欧美高清在线| 亚洲一区在线视频观看| 丰满放荡岳乱妇91ww| 欧美一区日本一区韩国一区| 中文字幕制服丝袜成人av | 国产成人自拍网| 欧美精品99久久久**| 亚洲欧洲国产日本综合| 精品亚洲成a人| 欧美福利视频一区| 亚洲精品国产无天堂网2021| 国产一区二区三区国产| 欧美日韩成人综合在线一区二区| 国产精品夫妻自拍| 国产剧情一区二区三区| 欧美一区二区三区不卡| 亚洲综合网站在线观看| proumb性欧美在线观看| 久久久99精品免费观看不卡| 日本vs亚洲vs韩国一区三区| 欧美专区在线观看一区| 亚洲日本欧美天堂| 成人av在线影院| 国产农村妇女毛片精品久久麻豆 | 欧美日韩在线播放一区| 亚洲视频免费在线观看| 国产不卡高清在线观看视频| 精品国产精品网麻豆系列| 日本在线不卡视频| 欧美猛男gaygay网站| 一区二区三区精品视频在线| 色av成人天堂桃色av| 亚洲精品成人a在线观看| 99re8在线精品视频免费播放| 中文字幕不卡在线观看| 国产99久久久国产精品潘金网站| 国产亚洲一区字幕| 国产精品羞羞答答xxdd| 久久久一区二区三区捆绑**| 精品一区二区三区在线观看国产 | 亚洲国产成人tv| 欧美性生交片4| 亚洲一区在线观看免费| 欧美在线观看一区二区| 亚洲一区二区免费视频| 欧美日韩综合在线免费观看| 午夜不卡av在线| 欧美一级艳片视频免费观看| 日本成人在线电影网| 日韩手机在线导航| 国产一区二区三区电影在线观看| 国产无人区一区二区三区| 丁香六月综合激情| 一区二区三区成人在线视频| 欧美午夜视频网站| 日韩二区在线观看| 久久久久久亚洲综合影院红桃 | 日本大胆欧美人术艺术动态| 精品日韩欧美一区二区| 国产不卡在线视频| 一区二区三区不卡视频| 欧美精品电影在线播放| 国产一区啦啦啦在线观看| 亚洲国产精品成人久久综合一区| 91片在线免费观看| 婷婷成人激情在线网| 久久免费精品国产久精品久久久久| av亚洲精华国产精华| 午夜电影一区二区| 国产日韩欧美综合一区| 色先锋aa成人| 麻豆国产精品视频| 国产精品久久久久久久午夜片| 欧美日韩中文一区| 精品一区二区三区的国产在线播放| 国产精品女同一区二区三区| 欧美在线观看禁18| 国产乱子伦视频一区二区三区| 亚洲特级片在线| 欧美一卡2卡三卡4卡5免费| 粉嫩绯色av一区二区在线观看| 亚洲在线观看免费| 久久婷婷久久一区二区三区| 色综合久久88色综合天天6| 蜜桃视频在线观看一区| 亚洲视频网在线直播| 欧美剧情电影在线观看完整版免费励志电影| 激情成人综合网| 中文字幕亚洲在| 日韩欧美成人一区| 91香蕉视频污在线| 精品亚洲国产成人av制服丝袜| 一区二区三区影院| 国产日韩欧美激情| 欧美一区在线视频| 日本韩国欧美三级| 成人小视频免费观看| 男女性色大片免费观看一区二区| 中文字幕在线免费不卡| 91精品国产日韩91久久久久久| 99精品国产91久久久久久 | 国产一区二区在线免费观看| 一区二区三区在线观看网站| 久久午夜免费电影| 91麻豆精品国产91久久久久久|