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

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

?? sngks32cend.c

?? 三星公司S3C4510B的VXWORKS操作系統下的BSP
?? C
?? 第 1 頁 / 共 5 頁
字號:
    /* Join the cluster to the MBlock */    if (netClBlkJoin (pClBlk, pData, SNGKS32C_CL_SIZE, NULL, 0, 0, 0) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: netClBlkJoin failed\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        if (netMblkClJoin (pMblk, pClBlk) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: netMblkClJoin failed\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        /* The ip structure is 14 bytes from the beginning of the valid frame data     * yet it must be aligned on a word boundary.  We have told the ethernet     * controller to insert 2 bytes of garbage at the beginning of each frame     * so now all we need to do is move our pointer to the frame data to the     * real start of the frame causing the frame to be half-word aligned but     * not word aligned.  By counting 14 bytes from the beginning of the frame     * to the ip, we arrive on a word boundary.     */    pMblk->mBlkHdr.mData += SNGKS32C_DATA_OFFSET;#ifdef BUG_KS32C5000    if (gBugFixDone == TRUE)  /* Only for old KS32C5000 version of the chip */        pMblk->mBlkHdr.mData += 4;#endif /*BUG_KS32C5000*/    pMblk->mBlkHdr.mFlags |= M_PKTHDR;    pMblk->mBlkHdr.mLen   = len;    pMblk->mBlkPktHdr.len = len;    /* Call the upper layer's receive routine. */    END_RCV_RTN_CALL(&pDrvCtrl->end, pMblk);    pRxD->rxFrameData.frameDataPtr = (UINT32)pNewCluster;    return (OK);cleanRXD:    if (pClBlk != NULL)        {        netClBlkFree (pDrvCtrl->end.pNetPool, pClBlk);         }    if (pNewCluster != NULL)        {        netClFree (pDrvCtrl->end.pNetPool, pNewCluster);        pNewCluster = NULL;        }    if (pMblk != NULL)        {        netMblkFree (pDrvCtrl->end.pNetPool, pMblk);        }    END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);    return (ERROR);    }/******************************************************************************** sngks32cEndSend - the driver send routine** This routine takes a M_BLK_ID sends off the data in the M_BLK_ID.* The buffer must already have the addressing information properly installed* in it.  This is done by a higher layer.  The last arguments are a free* routine to be called when the device is done with the buffer and a pointer* to the argument to pass to the free routine.  ** RETURNS: OK or ERROR.*/LOCAL STATUS sngks32cEndSend    (    END_DEVICE *pDrvCtrl,    /* device ptr */    M_BLK_ID pNBuff        /* data to send */    )    {    int         len;    int         oldLevel;    TRANSMIT_FRAME_DESC *pTxFd;    BDMATXCON bdmaTxCon;    MACTXCON macTxCon;    *(UINT32 *)(&bdmaTxCon) = 0;    *(UINT32 *)(&macTxCon) = 0;        if (pDrvCtrl->resetting)        {        return ERROR;        }    /* Ownership with BDMA? */    if (pDrvCtrl->pTxFrameDesc->txFrameData.o_bit == OWNED_BY_BDMA)        return ERROR;    pTxFd = pDrvCtrl->pTxFrameDesc;    /*     * Obtain exclusive access to transmitter.  This is necessary because     * we might have more than one stack transmitting at once.     */    END_TX_SEM_TAKE (&pDrvCtrl->end, WAIT_FOREVER);    /* Set pointers in local structures to point to data. */    len = netMblkToBufCopy(pNBuff,                           (void *)pTxFd->txFrameData.frameDataPtr, NULL) ;    *(UINT32 *)(&pTxFd->txControl) = 0;    /* Reset control word */    pTxFd->txControl.t_bit = 1;    pTxFd->txControl.a_bit = 1;    pTxFd->txControl.l_bit = SNGEND_ENDIAN;    pTxFd->txStatusLength.frameLength = len;    pTxFd->txFrameData.o_bit = OWNED_BY_BDMA;    /* place a transmit request */    oldLevel = intLock ();   /* now sngks32cEndInt won't get confused */    /* initiate device transmit */    bdmaTxCon.txCon_resetval = *(volatile UINT32 *)SNGKS32C_BDMATXCON;    bdmaTxCon.txCon_reg.enable = 1;    *(volatile UINT32 *)SNGKS32C_BDMATXCON = bdmaTxCon.txCon_resetval;    macTxCon.macTxCon_resetval = *(volatile UINT32 *)SNGKS32C_MACTXCON;    macTxCon.macTxCon_reg.transmitEnable = 1;    *(volatile UINT32 *)SNGKS32C_MACTXCON = macTxCon.macTxCon_resetval;    intUnlock (oldLevel);   /* now sngks32cEndInt won't get confused */        /* Advance our management index */    pDrvCtrl->pTxFrameDesc = pDrvCtrl->pTxFrameDesc->nextTxFrameDesc;    END_TX_SEM_GIVE (&pDrvCtrl->end);        /* Bump the statistic counter. */    END_ERR_ADD (&pDrvCtrl->end, MIB2_OUT_UCAST, +1);    /*     * Cleanup.  The driver must either free the packet now or     * set up a structure so it can be freed later after a transmit     * interrupt occurs.     */    netMblkClChainFree (pNBuff);    return (OK);    }/******************************************************************************** sngks32cEndIoctl - the driver I/O control routine** Process an ioctl request.** RETURNS: A command specific response, usually OK or ERROR.*/LOCAL int sngks32cEndIoctl    (    END_DEVICE *pDrvCtrl,    /* device receiving command */    int cmd,            /* ioctl command code */    caddr_t data        /* command argument */    )    {    int error = 0;    long value;    DRV_LOG (DRV_DEBUG_IOCTL,             "Ioctl unit=0x%x cmd=%d data=0x%x\n",             pDrvCtrl->unit, cmd, (int)data, 0, 0, 0);    switch ((unsigned int)cmd)        {        case EIOCSADDR:            if (data == NULL)                return (EINVAL);            bcopy ((char *)data, (char *)END_HADDR(&pDrvCtrl->end),                   END_HADDR_LEN(&pDrvCtrl->end));            break;        case EIOCGADDR:            if (data == NULL)                return (EINVAL);            bcopy ((char *)END_HADDR(&pDrvCtrl->end), (char *)data,                   END_HADDR_LEN(&pDrvCtrl->end));            break;        case EIOCSFLAGS:            value = (long)data;            if (value < 0)                {                value = ~value;                END_FLAGS_CLR (&pDrvCtrl->end, value);                }            else                {                END_FLAGS_SET (&pDrvCtrl->end, value);                }            sngks32cEndConfig (pDrvCtrl);            break;        case EIOCGFLAGS:            *(int *)data = END_FLAGS_GET(&pDrvCtrl->end);            break;    case EIOCPOLLSTART:        sngks32cEndPollStart (pDrvCtrl);        break;    case EIOCPOLLSTOP:        sngks32cEndPollStop (pDrvCtrl);        break;    case EIOCGMIB2:         if (data == NULL)             return (EINVAL);         bcopy((char *)&pDrvCtrl->end.mib2Tbl, (char *)data,               sizeof(pDrvCtrl->end.mib2Tbl));         break;        case EIOCGFBUF:        if (data == NULL)            return (EINVAL);        *(int *)data = 0;    /**END_MIN_FBUF;**/        break;    default:        error = EINVAL;        }    return (error);    }/******************************************************************************** sngks32cEndConfig - reconfigure the interface under us.** Reconfigure the interface setting promiscuous mode** RETURNS: N/A.*/LOCAL void sngks32cEndConfig    (    END_DEVICE *pDrvCtrl    /* device to be re-configured */    )    {    sngks32cEndReset(pDrvCtrl);    /* reset the chip */    pDrvCtrl->rxHandling = FALSE;    /* Set up address filter for multicasting. */        if (END_MULTI_LST_CNT(&pDrvCtrl->end) > 0)        sngks32cEndAddrFilterSet (pDrvCtrl);    if (pDrvCtrl->fdInitialized == TRUE)        sngks32cEndFdFree(pDrvCtrl);    /* Free the FDs */    /* Reinitialize FDs */    if (sngks32cEndFdInitialize(pDrvCtrl) == ERROR)        {        DRV_LOG (DRV_DEBUG_LOAD,                  "sngks32cEndFdInitialize failed \n", 0, 0, 0, 0, 0, 0);        return;        }    sngks32cEndMacInitialize(pDrvCtrl);    /* Initialize MAC */    /* Was started before in interrupt mode? */    if ((END_FLAGS_GET(&pDrvCtrl->end) & IFF_RUNNING) &&        ((pDrvCtrl->flags & LS_POLLING) == 0))        sngks32cEndStart(pDrvCtrl);    /* Start again */    return;    }/******************************************************************************** sngks32cEndPollStart - start polled mode operations** RETURNS: OK or ERROR.*/LOCAL STATUS sngks32cEndPollStart    (    END_DEVICE* pDrvCtrl    /* device to be polled */    )    {    int         oldLevel;    BDMARXCON bdmaRxCon;    MACRXCON macRxCon;    oldLevel = intLock ();          /* disable ints during update */    intDisable (pDrvCtrl->ivecBdmaTx);    intDisable (pDrvCtrl->ivecBdmaRx);    intDisable (pDrvCtrl->ivecMacTx);    intDisable (pDrvCtrl->ivecMacRx);    pDrvCtrl->flags |= LS_POLLING;    intUnlock (oldLevel);   /* now sngks32cEndInt won't get confused */    ENDLOGMSG (("Poll STARTED\n", 1, 2, 3, 4, 5, 6));    sngks32cEndConfig (pDrvCtrl);    /* reconfigure device */    /* Enable RX in BDMARXCON register */    *(UINT32 *) (&bdmaRxCon) = *(volatile UINT32 *)SNGKS32C_BDMARXCON;    bdmaRxCon.rxCon_reg.enable = 1 ;    *(volatile UINT32 *)SNGKS32C_BDMARXCON = bdmaRxCon.rxCon_resetval;    /* Enable RX in MACRXCON register */    *(UINT32 *)(&macRxCon) = *(volatile UINT32 *)SNGKS32C_MACRXCON;    macRxCon.macRxCon_reg.receiveEnable = 1;    *(volatile UINT32 *)SNGKS32C_MACRXCON = macRxCon.macRxCon_resetval;    /* Set the flags to indicate that the device is up */    END_FLAGS_SET (&pDrvCtrl->end, IFF_UP | IFF_RUNNING);    return (OK);    }/******************************************************************************** sngks32cEndPollStop - stop polled mode operations** This function terminates polled mode operation.  The device returns to* interrupt mode.** The device interrupts are enabled, the current mode flag is switched* to indicate interrupt mode and the device is then reconfigured for* interrupt operation.** RETURNS: OK or ERROR.*/LOCAL STATUS sngks32cEndPollStop    (    END_DEVICE* pDrvCtrl    /* device to be changed */    )    {    BDMARXCON bdmaRxCon;    BDMATXCON bdmaTxCon;    MACCON    macCon;    *(UINT32 *)(&bdmaRxCon) = *(volatile UINT32 *)SNGKS32C_BDMARXCON;    bdmaRxCon.rxCon_reg.enable = 0;    *(volatile UINT32 *)SNGKS32C_BDMARXCON = *(UINT32 *)(&bdmaRxCon);    *(UINT32 *)(&bdmaTxCon) = *(volatile UINT32 *)SNGKS32C_BDMATXCON;    bdmaTxCon.txCon_reg.enable = 0;    *(volatile UINT32 *)SNGKS32C_BDMATXCON = *(UINT32 *)(&bdmaTxCon);    *(UINT32 *)(&macCon) = *(volatile UINT32 *)SNGKS32C_MACCON;    macCon.macCon_reg.haltImm  = 1;    *(volatile UINT32 *)SNGKS32C_MACCON = *(UINT32 *)(&macCon);    pDrvCtrl->flags &= ~LS_POLLING;    pDrvCtrl->rxHandling = TRUE;    /*     * Restart in interrupt mode.  Calling sngks32cEndConfig without clearing     * IFF_RUNNING flag will result in calling sngks32cEndStart automatically     */    netJobAdd ((FUNCPTR) sngks32cEndConfig, (int) pDrvCtrl,			    0, 0, 0, 0);    ENDLOGMSG (("Poll STOPPED\n", 1, 2, 3, 4, 5, 6));    return (OK);    }/******************************************************************************** sngks32cEndPollRcv - routine to receive a packet in polled mode.** This routine is called by a user to try and get a packet from the* device.** RETURNS: OK upon success.  EAGAIN is returned when no packet is available.*/LOCAL STATUS sngks32cEndPollRcv    (    END_DEVICE *pDrvCtrl,    /* device to be polled */    M_BLK_ID pMblk        /* ptr to buffer */    )    {    BDMASTAT bdmaStat;    char* pPacket;    int len;    STATUS retVal = EAGAIN;#ifdef ENDDEBUG    if (endDebug)        nvLogMsg ("sngks32cEndPollRcv\n", 1, 2, 3, 4, 5, 6);#endif /* ENDDEBUG */    bdmaStat.stat_resetval = *(volatile UINT32 *)SNGKS32C_BDMASTAT;    if (pDrvCtrl->rxHandling)        {#ifdef ENDDEBUG        if (endDebug)            nvLogMsg ("sngks32cEndPollRcv rxHandling\n", 1, 2, 3, 4, 5, 6);#endif /* ENDDEBUG */        return EAGAIN;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频免费一区| 欧美影视一区在线| 欧美在线观看禁18| 精品美女一区二区| 亚洲国产综合在线| eeuss鲁一区二区三区| 欧美日韩电影一区| 亚洲精品综合在线| 成人影视亚洲图片在线| 精品久久久久一区| 日本不卡一区二区三区| 色偷偷88欧美精品久久久| 国产欧美日韩另类一区| 日本午夜一区二区| 欧美午夜宅男影院| 综合自拍亚洲综合图不卡区| 激情综合色播激情啊| 欧美一区二区国产| 午夜精品久久久久| 欧美丝袜丝交足nylons| 一区二区三区中文免费| 99精品欧美一区二区蜜桃免费| 久久这里只有精品视频网| 午夜精品久久久久久久99樱桃 | 欧美日韩在线播放一区| 亚洲精品亚洲人成人网| 99久久综合色| 中文字幕第一区| 成人的网站免费观看| 国产精品天天摸av网| 丁香六月久久综合狠狠色| 国产日韩成人精品| 国产99久久久国产精品免费看| 久久久久成人黄色影片| 国产suv精品一区二区6| 国产精品女上位| 丁香桃色午夜亚洲一区二区三区| 国产午夜亚洲精品理论片色戒| 国产一区二区精品久久| 国产色产综合产在线视频| 国产福利一区二区三区视频在线| 久久久国产精品麻豆| 成人在线视频一区二区| 亚洲男女毛片无遮挡| 91成人在线观看喷潮| 亚洲成av人在线观看| 日韩一区二区不卡| 国产精品99久久久久| 亚洲欧美精品午睡沙发| 欧美日韩美少妇| 久久国产成人午夜av影院| 国产偷v国产偷v亚洲高清| av资源站一区| 亚洲午夜av在线| 精品国产亚洲在线| 成人av在线资源网| 亚洲国产日韩精品| 久久综合九色综合97_久久久| 成a人片国产精品| 亚洲成人资源网| 国产三级欧美三级| 欧美色综合网站| 国产麻豆精品95视频| 一区二区三区四区在线| 日韩视频免费观看高清完整版| 国产成人超碰人人澡人人澡| 亚洲免费毛片网站| 日韩欧美高清在线| 色综合久久综合网欧美综合网 | 欧美福利一区二区| 国产在线视频精品一区| 一区二区三区产品免费精品久久75| 91麻豆精品国产91久久久久久| 粉嫩av亚洲一区二区图片| 亚洲福利视频一区二区| 国产精品丝袜一区| 精品女同一区二区| 欧美日韩午夜精品| aaa欧美日韩| 国产在线精品一区二区夜色| 亚洲五码中文字幕| 日韩一区欧美小说| 久久久欧美精品sm网站| 91精品国产91久久久久久一区二区| 成人激情免费网站| 精品一区二区三区香蕉蜜桃| 亚洲国产成人av| 中文字幕在线不卡视频| 久久久亚洲高清| 欧美一区二区三区四区高清 | 日韩一区欧美小说| 久久久www成人免费无遮挡大片| 欧美精品亚洲二区| 在线亚洲高清视频| 91香蕉视频在线| 成人黄色在线看| 丰满少妇在线播放bd日韩电影| 理论片日本一区| 午夜国产精品影院在线观看| 亚洲同性同志一二三专区| 日本一区二区三区国色天香| 久久亚洲一区二区三区明星换脸| 欧美高清dvd| 欧美另类一区二区三区| 在线观看日韩国产| 色综合久久综合网97色综合| www.欧美日韩国产在线| 国产成人aaa| 国产寡妇亲子伦一区二区| 国产在线精品一区二区| 精一区二区三区| 国产在线精品国自产拍免费| 久久精品免费观看| 蓝色福利精品导航| 经典三级视频一区| 国产乱码精品1区2区3区| 精品一区二区三区视频| 国产一区二区导航在线播放| 国产一区二区影院| 国产精品一区二区久久不卡| 丰满少妇在线播放bd日韩电影| 成人小视频在线| 97精品久久久午夜一区二区三区| 99久精品国产| 在线一区二区三区四区五区| 欧美天天综合网| 日韩一区二区三区三四区视频在线观看 | 亚洲人成影院在线观看| 中文字幕一区二区三区四区不卡| 亚洲另类春色校园小说| 亚洲综合激情网| 另类小说欧美激情| 国产91丝袜在线播放| 一本色道久久综合精品竹菊| 欧美日韩久久一区二区| 精品国产一区二区三区四区四| 亚洲国产精品精华液ab| 亚洲最色的网站| 日韩成人免费看| 国产精品一二三在| 色综合久久中文综合久久97| 欧美精品一二三| 久久免费午夜影院| 亚洲一区免费视频| 激情五月激情综合网| 91麻豆免费在线观看| 91精品国产综合久久久蜜臀图片| 欧美精品一区二区三区视频| 亚洲欧美日韩国产一区二区三区| 午夜日韩在线观看| 国产91精品一区二区| 欧美喷水一区二区| 日本一区免费视频| 日产国产欧美视频一区精品| av成人动漫在线观看| 欧美一区二区三区免费观看视频| 国产精品天天摸av网| 日本不卡不码高清免费观看| 不卡一卡二卡三乱码免费网站 | 色婷婷亚洲综合| 欧美刺激午夜性久久久久久久| 国产精品美女久久久久久2018| 日本欧美一区二区三区乱码| 成人免费视频视频| 欧美xxxx老人做受| 亚洲一区二区三区影院| www.66久久| 精品日本一线二线三线不卡| 亚洲精品日韩专区silk| 国产精品影视在线| 91精品在线一区二区| 一区二区三区四区国产精品| 国产精品99久久久久久久vr | 欧美在线观看视频在线| 国产欧美一区视频| 欧美a一区二区| 欧美日韩精品一区二区天天拍小说| 欧美国产一区在线| 国产一区视频导航| 91麻豆精品国产自产在线| 亚洲综合视频在线| 91麻豆精品视频| 国产精品精品国产色婷婷| 国产成人精品影视| 久久嫩草精品久久久精品| 免费国产亚洲视频| 日韩欧美一级二级三级久久久| 亚洲愉拍自拍另类高清精品| 日本高清不卡在线观看| 亚洲精品福利视频网站| 色综合欧美在线| 亚洲男人天堂av| 91美女片黄在线观看| 亚洲视频香蕉人妖| 色欧美乱欧美15图片| 亚洲人成网站影音先锋播放| 99久久99久久免费精品蜜臀| 亚洲欧洲日韩在线| 日本大香伊一区二区三区| 亚洲在线一区二区三区|