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

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

?? secend.c

?? ARM板驅(qū)動(dòng)程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* secEnd.c - END style ATMEL AAT91RM9200 Ethernet network interface driver  */#include "vxWorks.h"#include "intLib.h"#include "errno.h"#include "net/mbuf.h"#include "net/unixLib.h"#include "net/protosw.h"#include "sys/socket.h"#include "sys/ioctl.h"#include "net/route.h"#include "cacheLib.h"#include "logLib.h"#include "netLib.h"#include "stdio.h"#include "stdlib.h"#include "sysLib.h"#include "taskLib.h"#include "net/systm.h"#include "sys/times.h"#include "net/if_subr.h"#undef  ETHER_MAP_IP_MULTICAST#include "etherMultiLib.h"#include "end.h"#include "semLib.h"#define END_MACROS#include "endLib.h"#include "miiLib.h"#include "lstLib.h"#include "config.h"#include "drv/end/secEnd.h"/* Defines */#undef  DEBUG_TRACE/*#define DEBUG_LOG(x, p1, p2, p3, p4, p5, p6) \        logMsg(x, (int)(UINT32)(p1), (int)(UINT32)(p2), (int)(UINT32)(p3), (int)(UINT32)(p4), (int)(UINT32)(p5), (int)(UINT32)(p6))*//* Forward Function Declarations */LOCAL STATUS    secEndInitParse(DRV_CTRL *pDrvCtrl, char *initString);LOCAL STATUS    secEndInitMem(DRV_CTRL *pDrvCtrl);LOCAL STATUS    secEndUnload(DRV_CTRL *pDrvCtrl);LOCAL STATUS    secEndStart(DRV_CTRL *pDrvCtrl);LOCAL STATUS    secEndStop(DRV_CTRL *pDrvCtrl);LOCAL int       secEndIoctl(DRV_CTRL *pDrvCtrl, int cmd, caddr_t data);LOCAL STATUS    secEndSend(DRV_CTRL *pDrvCtrl, M_BLK_ID pMblk);LOCAL STATUS    secEndMCastAddrAdd(DRV_CTRL *pDrvCtrl, UCHAR *pAddr);LOCAL STATUS    secEndMCastAddrDel(DRV_CTRL *pDrvCtrl, UCHAR *pAddr);LOCAL STATUS    secEndMCastAddrGet(DRV_CTRL *pDrvCtrl, MULTI_TABLE *pTable);LOCAL STATUS    secEndPollSend(DRV_CTRL *pDrvCtrl, M_BLK_ID pMblk);LOCAL STATUS    secEndPollReceive(DRV_CTRL *pDrvCtrl, M_BLK_ID pMblk);/* Declare our function table. This is static across all driver instances. */LOCAL NET_FUNCS endFuncTable = {    (FUNCPTR)secEndStart,                                   /* start func. */    (FUNCPTR)secEndStop,                                    /* stop func. */    (FUNCPTR)secEndUnload,                                  /* unload func. */    (FUNCPTR)secEndIoctl,                                   /* ioctl func. */    (FUNCPTR)secEndSend,                                    /* send func. */    (FUNCPTR)secEndMCastAddrAdd,                            /* multicast add func. */    (FUNCPTR)secEndMCastAddrDel,                            /* multicast delete func. */    (FUNCPTR)secEndMCastAddrGet,                            /* multicast get fun. */    (FUNCPTR)secEndPollSend,                                /* polling send func. */    (FUNCPTR)secEndPollReceive,                             /* polling receive func. */    endEtherAddressForm,                                    /* put address info into a NET_BUFFER */    (FUNCPTR)endEtherPacketDataGet,                         /* get pointer to data in NET_BUFFER */    (FUNCPTR)endEtherPacketAddrGet                          /* Get packet addresses */};/********************************************************************************* secEndLoad - 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 number:"** RETURNS: An END object pointer or NULL on error.*/END_OBJ* secEndLoad(    char *initString                                        /* parameter string */    ){    DRV_CTRL *pDrvCtrl;                                     /* pointer to DRV_CTRL structure */    UCHAR enetAddr[SEC_END_ADDR_LEN];                       /* ethernet address */#ifdef  DEBUG_TRACE    printf("secEnd Load, %s\n", initString);#endif  /* DEBUG_TRACE */    if (initString == NULL)    {        printf("secEnd Error: NULL parameter string\n");        return NULL;    }    if (initString[0] == 0)    {        bcopy((char *)SEC_END_DEV_NAME, (char *)initString, SEC_END_DEV_NAME_LEN);#ifdef  DEBUG_TRACE        printf("secEnd Load, %s\n", initString);#endif  /* DEBUG_TRACE */        return NULL;    }    /* Allocate the device structure. */    pDrvCtrl = (DRV_CTRL *)calloc(sizeof(DRV_CTRL), 1);    if (pDrvCtrl == NULL)    {        printf("secEnd Error: Failed to allocate DRV_CTRL\n");        return (NULL);    }    while (1)    {        /* Parse InitString. */        if (secEndInitParse(pDrvCtrl, initString) != OK)        {            break;        }        /* Memory initialization. */        if (secEndInitMem(pDrvCtrl) != OK)        {            break;        }        /* Initialize physical device. */        if (DRV_INIT(pDrvCtrl) != OK)        {            break;        }        /* Initialize END object. */        if (END_OBJ_INIT(                &pDrvCtrl->endObj,                (DEV_OBJ *)pDrvCtrl,                SEC_END_DEV_NAME,                pDrvCtrl->unit,                &endFuncTable,                SEC_END_DEV_DESCRIPTION                ) == ERROR)        {            printf("secEnd%d Error: Failed to initialize END_OBJ\n", pDrvCtrl->unit);            break;        }        /* Get ethernet hardware address. */        sysSecEnetAddrGet(pDrvCtrl->unit, enetAddr);        /* Initialize MIB. */        if (END_MIB_INIT(                &pDrvCtrl->endObj,                M2_ifType_ethernet_csmacd,                 enetAddr,                SEC_END_ADDR_LEN,                ETHERMTU,                pDrvCtrl->phyInfo.phySpeed                ) == ERROR)        {            printf("secEnd%d Error: Failed to initialize END_MIB\n", pDrvCtrl->unit);            break;        }        /* Mark the device ready. */        END_OBJ_READY(&pDrvCtrl->endObj, IFF_NOTRAILERS | IFF_MULTICAST | IFF_BROADCAST);        return (&pDrvCtrl->endObj);    }    secEndUnload(pDrvCtrl);    return NULL;}/******************************************************************************** secEndUnload - unload a driver from the system** This function first brings down the device, and then frees any stuff that was* allocated by the driver in the load function.** RETURNS: OK or ERROR.*/STATUS secEndUnload(    DRV_CTRL *pDrvCtrl                                      /* pointer to DRV_CTRL structure */    ){#ifdef  DEBUG_TRACE    printf("secEnd%d Unload\n", pDrvCtrl->unit);#endif  /* DEBUG_TRACE */    if (pDrvCtrl == NULL)    {        return ERROR;    }    /* Uninitialize END object. */    END_OBJ_UNLOAD(&pDrvCtrl->endObj);    /* Free buffer descriptor pool if necessary. */  /*  if (pDrvCtrl->pBdArea != NULL)    {        cacheDmaFree(pDrvCtrl->pBdArea);    }*/    /* Free cluster pool if necessary. */    if (pDrvCtrl->pClArea != NULL)    {        cacheDmaFree(pDrvCtrl->pClArea);        pDrvCtrl->pClArea = 0 ;    }    /* Free mBlk/clBlk pool if necessary. */    if (pDrvCtrl->pMblkArea != NULL)    {        free(pDrvCtrl->pMblkArea);        pDrvCtrl->pMblkArea = 0 ;    }    /* Free netPool if necessary. */    if (pDrvCtrl->endObj.pNetPool != NULL)    {        free(pDrvCtrl->endObj.pNetPool);    }    /* Free the device structure. */    cfree((char *)pDrvCtrl);    return OK;}/********************************************************************************* secEndStart - 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 secEndStart(    DRV_CTRL *pDrvCtrl                                      /* pointer to DRV_CTRL structure */    ){#ifdef  DEBUG_TRACE    printf("secEnd%d Start\n", pDrvCtrl->unit);#endif  /* DEBUG_TRACE */    /* Mark the interface as up. */    END_FLAGS_SET(&pDrvCtrl->endObj, (IFF_UP | IFF_RUNNING));    return DRV_START(pDrvCtrl);}/********************************************************************************* secEndStop - stop the device** This function calls BSP functions to disconnect interrupts and stop the device* from operating in interrupt mode.** RETURNS: OK or ERROR.*/LOCAL STATUS secEndStop(    DRV_CTRL *pDrvCtrl                                      /* pointer to DRV_CTRL structure */    ){#ifdef  DEBUG_TRACE    printf("secEnd%d Stop\n", pDrvCtrl->unit);#endif  /* DEBUG_TRACE */    /* Mark the interface as down. */    END_FLAGS_CLR(&pDrvCtrl->endObj, (IFF_UP | IFF_RUNNING));    return DRV_STOP(pDrvCtrl);}/********************************************************************************* secEndIoctl - the driver I/O control routine** Process an ioctl request.** RETURNS: A command specific response, usually OK or ERROR.*/LOCAL int secEndIoctl(    DRV_CTRL *pDrvCtrl,                                     /* pointer to DRV_CTRL structure */    int cmd,                                                /* command to process */    caddr_t data                                            /* pointer to data */    ){    int error = OK;    END_OBJ *pEndObj = &pDrvCtrl->endObj;    long value;#ifdef  DEBUG_TRACE    printf("secEnd%d Ioctl: ", pDrvCtrl->unit);#endif  /* DEBUG_TRACE */    switch (cmd)    {    case EIOCSADDR:#ifdef  DEBUG_TRACE        printf("EIOCSADDR\n");#endif  /* DEBUG_TRACE */        /* Stop the device. */        DRV_STOP(pDrvCtrl);        /* Save the enet address. */        bcopy ((char *)data, END_HADDR(pEndObj), SEC_END_ADDR_LEN);        /* Program the individual enet address. */        error = DRV_ADDR_SET(pDrvCtrl);        /* Restart the device. */        DRV_START(pDrvCtrl);        break;    case EIOCGADDR:#ifdef  DEBUG_TRACE        printf("EIOCGADDR\n");#endif  /* DEBUG_TRACE */        /* Retrieve the enet address. */        bcopy (END_HADDR(pEndObj), (char *)data, SEC_END_ADDR_LEN);        break;    case EIOCSFLAGS:#ifdef  DEBUG_TRACE        printf("EIOCSFLAGS\n");#endif  /* DEBUG_TRACE */        value = (long)data;        if (value < 0)        {            value = -value;            value--;            END_FLAGS_CLR(pEndObj, value);        }        else        {            END_FLAGS_SET(pEndObj, value);        }        /* Set device flags. */        error = DRV_FLAGS_SET(pDrvCtrl);        break;    case EIOCGFLAGS:#ifdef  DEBUG_TRACE        printf("EIOCGFLAGS\n");#endif  /* DEBUG_TRACE */        /* Get device flags. */        *(long *)data = END_FLAGS_GET(pEndObj);        break;    case EIOCMULTIADD:#ifdef  DEBUG_TRACE        printf("EIOCMULTIADD\n");#endif  /* DEBUG_TRACE */        /* Add multicast address. */        error = secEndMCastAddrAdd(pDrvCtrl, (UCHAR *)data);        break;    case EIOCMULTIDEL:#ifdef  DEBUG_TRACE        printf("EIOCMULTIDEL\n");#endif  /* DEBUG_TRACE */        /* Delete multicast address. */        error = secEndMCastAddrDel(pDrvCtrl, (UCHAR *)data);        break;    case EIOCMULTIGET:#ifdef  DEBUG_TRACE        printf("EIOCMULTIGET\n");#endif  /* DEBUG_TRACE */        /* Retrieve a table of multicast addresses. */        error = secEndMCastAddrGet(pDrvCtrl, (MULTI_TABLE *)data);        break;    case EIOCPOLLSTART:#ifdef  DEBUG_TRACE        printf("EIOCPOLLSTART\n");#endif  /* DEBUG_TRACE */        /* Start polling mode. */        error = DRV_POLL_START(pDrvCtrl);        break;    case EIOCPOLLSTOP:#ifdef  DEBUG_TRACE        printf("EIOCPOLLSTOP\n");#endif  /* DEBUG_TRACE */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产欧美一区二区视频| 日韩电影网1区2区| 亚洲另类一区二区| 国产在线精品一区二区| 91精彩视频在线| 2020国产成人综合网| 一区二区久久久久久| 国产99久久久国产精品免费看| 欧美性受xxxx黑人xyx| 国产色综合久久| 亚洲高清免费在线| 成人免费视频一区二区| 日韩欧美综合在线| 亚洲福利一区二区| 色综合久久久久综合99| 国产精品区一区二区三区| 麻豆91小视频| 91精品欧美久久久久久动漫| 亚洲麻豆国产自偷在线| www.欧美日韩国产在线| 久久综合色婷婷| 蜜臀av性久久久久蜜臀aⅴ流畅| 91福利在线导航| 亚洲欧美日韩国产一区二区三区| 国产精品综合二区| 亚洲精品在线电影| 麻豆精品一区二区| 欧美老女人在线| 亚洲一卡二卡三卡四卡无卡久久| 成人av在线播放网址| 中文无字幕一区二区三区| 韩国av一区二区三区| 久久久久久99久久久精品网站| 久久精品国产在热久久| 色成年激情久久综合| 亚洲综合色成人| 欧美在线你懂的| 亚洲国产精品久久人人爱| 一本一道综合狠狠老| 一区二区三区精品视频| 日本精品视频一区二区| 亚洲一区中文日韩| 欧美精品视频www在线观看| 亚洲主播在线观看| 欧美精品1区2区| 美女久久久精品| 精品国产百合女同互慰| 国产福利一区二区三区| 中文字幕日本乱码精品影院| 9久草视频在线视频精品| 中文字幕在线观看不卡| 色综合久久中文综合久久牛| 夜夜操天天操亚洲| 91麻豆精品国产自产在线| 麻豆视频观看网址久久| 久久久精品日韩欧美| 不卡av在线免费观看| 一区二区三区成人在线视频| 欧美精品日日鲁夜夜添| 国内成人精品2018免费看| 国产欧美久久久精品影院 | 欧美国产成人在线| 99精品视频在线播放观看| 亚洲午夜电影在线| 精品999在线播放| caoporn国产一区二区| 亚洲成人免费av| 久久久久久久久一| 91丨九色丨黑人外教| 青青青伊人色综合久久| 国产农村妇女毛片精品久久麻豆| 色国产精品一区在线观看| 免费成人在线网站| 亚洲人成精品久久久久久| 日韩欧美一区二区三区在线| 成人小视频在线| 日韩精品91亚洲二区在线观看| 久久午夜免费电影| 欧美日韩一区二区不卡| 国产91精品一区二区麻豆亚洲| 亚洲高清视频中文字幕| 中文字幕一区二区三区色视频| 91精品免费在线观看| 91亚洲永久精品| 精品一区二区三区免费毛片爱| 亚洲日本va午夜在线影院| www一区二区| 欧美一区二区福利视频| 91色在线porny| 国产一区二区美女| 日韩国产在线观看| 亚洲欧洲中文日韩久久av乱码| 精品久久久久一区二区国产| 欧美视频日韩视频| 99国产一区二区三精品乱码| 国产精品一区二区三区四区| 日韩电影在线一区| 亚洲国产精品久久人人爱蜜臀| 国产女人18毛片水真多成人如厕| 欧美电影免费观看高清完整版在线 | 亚洲图片你懂的| 欧美mv日韩mv国产网站| 欧美人与z0zoxxxx视频| 色94色欧美sute亚洲13| 成人黄色国产精品网站大全在线免费观看 | 国产成人精品三级| 狠狠色丁香久久婷婷综合丁香| 午夜亚洲国产au精品一区二区| 一区在线播放视频| 国产片一区二区三区| 久久综合色天天久久综合图片| 欧美日韩成人综合在线一区二区| 色婷婷狠狠综合| 91美女片黄在线观看| 91一区一区三区| 色综合久久久久综合| 色噜噜久久综合| 色视频成人在线观看免| 色婷婷亚洲精品| 在线看国产一区二区| 欧美色网站导航| 欧美日韩亚州综合| 欧美精品电影在线播放| 欧美无砖专区一中文字| 欧美三级视频在线观看| 91麻豆精品国产91久久久久久| 欧美午夜片在线观看| 538prom精品视频线放| 这里只有精品电影| 精品日韩欧美一区二区| 久久久久久久网| 中文字幕视频一区| 亚洲成人第一页| 美国三级日本三级久久99| 久久99精品国产麻豆不卡| 国产精品影视在线| 99热精品一区二区| 欧洲一区在线观看| 日韩免费高清视频| 国产精品久久久久aaaa樱花| 亚洲黄色av一区| 秋霞影院一区二区| 风间由美中文字幕在线看视频国产欧美 | 久久久久久黄色| 亚洲免费观看视频| 日韩福利电影在线| 成人免费毛片片v| 欧美影院精品一区| 久久久综合视频| 一区二区久久久久久| 九色综合狠狠综合久久| 成人动漫中文字幕| 在线播放亚洲一区| 国产嫩草影院久久久久| 一区二区三区四区在线播放| 男女男精品视频| 91亚洲资源网| 亚洲精品一区二区三区99| 中日韩av电影| 日韩国产精品久久久| 99久久99久久免费精品蜜臀| 日韩欧美一级精品久久| 亚洲色图制服丝袜| 久久精品av麻豆的观看方式| 91在线看国产| 精品成人佐山爱一区二区| 亚洲欧洲三级电影| 久久se这里有精品| 91搞黄在线观看| 国产精品久久久久影视| 精彩视频一区二区| 欧美三级蜜桃2在线观看| 国产精品国产自产拍在线| 精品一区二区三区不卡| 欧美在线播放高清精品| 中文字幕国产一区二区| 蜜桃av一区二区在线观看| 日本韩国精品在线| 欧美韩国日本一区| 久久精品国产澳门| 777奇米成人网| 一卡二卡三卡日韩欧美| 国产成都精品91一区二区三| 日韩免费观看高清完整版在线观看| 亚洲自拍另类综合| 色综合婷婷久久| 中文字幕亚洲精品在线观看| 国产suv精品一区二区三区| 精品国产免费久久| 极品销魂美女一区二区三区| 91精品国产综合久久精品麻豆| 亚洲一二三四久久| 欧美三级电影一区| 亚洲一区二区3| 欧美日韩精品免费观看视频 | 麻豆成人免费电影| 日韩西西人体444www| 日本不卡高清视频| 日韩欧美一级片| 国产真实精品久久二三区|