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

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

?? mp_init.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網卡在Windows2000/xp下的PCI驅動程序源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
    return Status;

}

VOID NICInitSend(
    IN  PMP_ADAPTER     Adapter)
/*++
Routine Description:

    Initialize send data structures

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    None                                                    

--*/    
{
    PMP_TCB         pMpTcb;
    PHW_TCB         pHwTcb;
    ULONG           HwTcbPhys;
    LONG            TcbCount;

    PTBD_STRUC      pHwTbd;  
    ULONG           HwTbdPhys;     

    DBGPRINT(MP_TRACE, ("--> NICInitSend\n"));

    Adapter->TransmitIdle = TRUE;
    Adapter->ResumeWait = TRUE;

    // Setup the initial pointers to the SW and HW TCB data space
    pMpTcb = (PMP_TCB) Adapter->MpTcbMem;
    pHwTcb = (PHW_TCB) Adapter->HwSendMemAllocVa;
    HwTcbPhys = NdisGetPhysicalAddressLow(Adapter->HwSendMemAllocPa);

    // Setup the initial pointers to the TBD data space.
    // TBDs are located immediately following the TCBs
    pHwTbd = (PTBD_STRUC) (Adapter->HwSendMemAllocVa +
                 (sizeof(TXCB_STRUC) * Adapter->NumTcb));
    HwTbdPhys = HwTcbPhys + (sizeof(TXCB_STRUC) * Adapter->NumTcb);

    // Go through and set up each TCB
    for (TcbCount = 0; TcbCount < Adapter->NumTcb; TcbCount++)
    {
        pMpTcb->HwTcb = pHwTcb;                 // save ptr to HW TCB
        pMpTcb->HwTcbPhys = HwTcbPhys;      // save HW TCB physical address

        pMpTcb->HwTbd = pHwTbd;                 // save ptr to TBD array
        pMpTcb->HwTbdPhys = HwTbdPhys;      // save TBD array physical address

        if (TcbCount)
            pMpTcb->PrevHwTcb = pHwTcb - 1;
        else
            pMpTcb->PrevHwTcb   = (PHW_TCB)((PUCHAR)Adapter->HwSendMemAllocVa +
                                      ((Adapter->NumTcb - 1) * sizeof(HW_TCB)));

        pHwTcb->TxCbHeader.CbStatus = 0;        // clear the status 
        pHwTcb->TxCbHeader.CbCommand = CB_EL_BIT | CB_TX_SF_BIT | CB_TRANSMIT;


        // Set the link pointer in HW TCB to the next TCB in the chain.  
        // If this is the last TCB in the chain, then set it to the first TCB.
        if (TcbCount < Adapter->NumTcb - 1)
        {
            pMpTcb->Next = pMpTcb + 1;
            pHwTcb->TxCbHeader.CbLinkPointer = HwTcbPhys + sizeof(HW_TCB);
        }
        else
        {
            pMpTcb->Next = (PMP_TCB) Adapter->MpTcbMem;
            pHwTcb->TxCbHeader.CbLinkPointer = 
                NdisGetPhysicalAddressLow(Adapter->HwSendMemAllocPa);
        }

        pHwTcb->TxCbThreshold = (UCHAR) Adapter->AiThreshold;
        pHwTcb->TxCbTbdPointer = HwTbdPhys;

        pMpTcb++; 
        pHwTcb++;
        HwTcbPhys += sizeof(TXCB_STRUC);
        pHwTbd = (PTBD_STRUC)((PUCHAR)pHwTbd + sizeof(TBD_STRUC) * NIC_MAX_PHYS_BUF_COUNT);
        HwTbdPhys += sizeof(TBD_STRUC) * NIC_MAX_PHYS_BUF_COUNT;
    }

    // set the TCB head/tail indexes
    // head is the olded one to free, tail is the next one to use
    Adapter->CurrSendHead = (PMP_TCB) Adapter->MpTcbMem;
    Adapter->CurrSendTail = (PMP_TCB) Adapter->MpTcbMem;


    DBGPRINT(MP_TRACE, ("<-- NICInitSend, Status=%x\n"));
}

NDIS_STATUS NICInitRecv(
    IN  PMP_ADAPTER     Adapter)
/*++
Routine Description:

    Initialize receive data structures

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_RESOURCES

--*/    
{
    NDIS_STATUS     Status = NDIS_STATUS_RESOURCES;

    PMP_RFD         pMpRfd;      
    LONG            RfdCount;
    ULONG           ErrorValue = 0;

    DBGPRINT(MP_TRACE, ("--> NICInitRecv\n"));

    // Setup each RFD
    for (RfdCount = 0; RfdCount < Adapter->NumRfd; RfdCount++)
    {
        pMpRfd = NdisAllocateFromNPagedLookasideList(&Adapter->RecvLookaside);
        if (!pMpRfd)
        {
            ErrorValue = ERRLOG_OUT_OF_LOOKASIDE_MEMORY;
            continue;
        }
        //
        // Allocate the shared memory for this RFD.
        //
        NdisMAllocateSharedMemory(
            Adapter->AdapterHandle,
            Adapter->HwRfdSize,
            FALSE,
            &pMpRfd->OriginalHwRfd,
            &pMpRfd->OriginalHwRfdPa);

        if (!pMpRfd->OriginalHwRfd)
        {
            ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY;
            NdisFreeToNPagedLookasideList(&Adapter->RecvLookaside, pMpRfd);
            continue;
        }
        //
        // Get a 8-byts aligned memory from the original HwRfd
        //
        pMpRfd->HwRfd = (PHW_RFD)DATA_ALIGN(pMpRfd->OriginalHwRfd);
        
        //
        // Now HwRfd is already 8-bytes aligned, and the size of HwPfd header(not data part) is a multiple of 8,
        // If we shift HwRfd 0xA bytes up, the Ethernet header size is 14 bytes long, then the data will be at
        // 8 byte boundary. 
        // 
        pMpRfd->HwRfd = (PHW_RFD)((PUCHAR)(pMpRfd->HwRfd) + HWRFD_SHIFT_OFFSET);
        //
        // Update physical address accordingly
        // 
        pMpRfd->HwRfdPa.QuadPart = pMpRfd->OriginalHwRfdPa.QuadPart + BYTES_SHIFT(pMpRfd->HwRfd, pMpRfd->OriginalHwRfd);


        ErrorValue = NICAllocRfd(Adapter, pMpRfd);
        if (ErrorValue)
        {
            NdisFreeToNPagedLookasideList(&Adapter->RecvLookaside, pMpRfd);
            continue;
        }
        //
        // Add this RFD to the RecvList
        // 
        Adapter->CurrNumRfd++;                      
        NICReturnRFD(Adapter, pMpRfd);
    }

    if (Adapter->CurrNumRfd > NIC_MIN_RFDS)
    {
        Status = NDIS_STATUS_SUCCESS;
    }
    //
    // Adapter->CurrNumRfd < NIC_MIN_RFDs
    //
    if (Status != NDIS_STATUS_SUCCESS)
    {
        NdisWriteErrorLogEntry(
            Adapter->AdapterHandle,
            NDIS_ERROR_CODE_OUT_OF_RESOURCES,
            1,
            ErrorValue);

    }

    DBGPRINT_S(Status, ("<-- NICInitRecv, Status=%x\n", Status));

    return Status;
}

ULONG NICAllocRfd(
    IN  PMP_ADAPTER     Adapter,
    IN  PMP_RFD         pMpRfd)
/*++
Routine Description:

    Allocate NDIS_PACKET and NDIS_BUFFER associated with a RFD

Arguments:

    Adapter     Pointer to our adapter
    pMpRfd      pointer to a RFD

Return Value:

    ERRLOG_OUT_OF_NDIS_PACKET
    ERRLOG_OUT_OF_NDIS_BUFFER

--*/    
{
    NDIS_STATUS         Status;
    PHW_RFD             pHwRfd;    
    ULONG               ErrorValue = 0;

    do
    {
        pHwRfd = pMpRfd->HwRfd;
        pMpRfd->HwRfdPhys = NdisGetPhysicalAddressLow(pMpRfd->HwRfdPa);

        pMpRfd->Flags = 0;
        pMpRfd->NdisPacket = NULL;
        pMpRfd->NdisBuffer = NULL;

        NdisAllocatePacket(
            &Status,
            &pMpRfd->NdisPacket,
            Adapter->RecvPacketPool);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ASSERT(pMpRfd->NdisPacket == NULL);
            ErrorValue = ERRLOG_OUT_OF_NDIS_PACKET;
            break;
        }

        //
        // point our buffer for receives at this Rfd
        // 
        NdisAllocateBuffer(
            &Status,
            &pMpRfd->NdisBuffer,
            Adapter->RecvBufferPool,
            (PVOID)&pHwRfd->RfdBuffer.RxMacHeader,
            NIC_MAX_PACKET_SIZE);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ASSERT(pMpRfd->NdisBuffer == NULL);
            ErrorValue = ERRLOG_OUT_OF_NDIS_BUFFER;
            break;
        }

        // Init each RFD header
        pHwRfd->RfdRbdPointer = DRIVER_NULL;
        pHwRfd->RfdSize = NIC_MAX_PACKET_SIZE;

        NDIS_SET_PACKET_HEADER_SIZE(pMpRfd->NdisPacket, NIC_HEADER_SIZE);

        NdisChainBufferAtFront(pMpRfd->NdisPacket, pMpRfd->NdisBuffer);
        //
        // Save ptr to MP_RFD in the packet, used in MPReturnPackets 
        // 
        MP_SET_PACKET_RFD(pMpRfd->NdisPacket, pMpRfd);      


    } while (FALSE);

    if (ErrorValue)
    {
        if (pMpRfd->NdisPacket)
        {
            NdisFreePacket(pMpRfd->NdisPacket);
        }

        if (pMpRfd->HwRfd)
        {
            //
            // Free HwRfd, we need to free the original memory pointed by OriginalHwRfd.
            // 
            NdisMFreeSharedMemory(
                Adapter->AdapterHandle,
                Adapter->HwRfdSize,
                FALSE,
                pMpRfd->OriginalHwRfd,
                pMpRfd->OriginalHwRfdPa);

            pMpRfd->HwRfd = NULL;
            pMpRfd->OriginalHwRfd = NULL;
        }
    }

    return ErrorValue;

}

VOID NICFreeRfd(
    IN  PMP_ADAPTER     Adapter,
    IN  PMP_RFD         pMpRfd)
/*++
Routine Description:

    Free a RFD and assocaited NDIS_PACKET and NDIS_BUFFER

Arguments:

    Adapter     Pointer to our adapter
    pMpRfd      Pointer to a RFD

Return Value:

    None                                                    

--*/    
{
    ASSERT(pMpRfd->NdisBuffer);      
    ASSERT(pMpRfd->NdisPacket);  
    ASSERT(pMpRfd->HwRfd);    

    NdisAdjustBufferLength(pMpRfd->NdisBuffer, NIC_MAX_PACKET_SIZE);
    NdisFreeBuffer(pMpRfd->NdisBuffer);
    NdisFreePacket(pMpRfd->NdisPacket);
    pMpRfd->NdisBuffer = NULL;
    pMpRfd->NdisPacket = NULL;

    //
    // Free HwRfd, we need to free the original memory pointed by OriginalHwRfd.
    // 
    NdisMFreeSharedMemory(
        Adapter->AdapterHandle,
        Adapter->HwRfdSize,
        FALSE,
        pMpRfd->OriginalHwRfd,
        pMpRfd->OriginalHwRfdPa);
    
    pMpRfd->HwRfd = NULL;
    pMpRfd->OriginalHwRfd = NULL;
    
    NdisFreeToNPagedLookasideList(&Adapter->RecvLookaside, pMpRfd);
}


NDIS_STATUS NICSelfTest(
    IN  PMP_ADAPTER     Adapter)
/*++
Routine Description:

    Perform a NIC self-test

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_DEVICE_FAILED

--*/    
{
    NDIS_STATUS     Status = NDIS_STATUS_SUCCESS;
    ULONG           SelfTestCommandCode;

    DBGPRINT(MP_TRACE, ("--> NICSelfTest\n"));

    DBGPRINT(MP_INFO, ("SelfTest=%x, SelfTestPhys=%x\n", 
        Adapter->SelfTest, Adapter->SelfTestPhys));

    //
    // Issue a software reset to the adapter
    // 
    HwSoftwareReset(Adapter);

    //
    // Execute The PORT Self Test Command On The 82558.
    // 
    ASSERT(Adapter->SelfTestPhys != 0);
    SelfTestCommandCode = Adapter->SelfTestPhys;

    //
    // Setup SELF TEST Command Code in D3 - D0
    // 
    SelfTestCommandCode |= PORT_SELFTEST;

    //
    // Initialize the self-test signature and results DWORDS
    // 
    Adapter->SelfTest->StSignature = 0;
    Adapter->SelfTest->StResults = 0xffffffff;

    //
    // Do the port command
    // 
    Adapter->CSRAddress->Port = SelfTestCommandCode;

    MP_STALL_EXECUTION(NIC_DELAY_POST_SELF_TEST_MS);

    //
    // if The First Self Test DWORD Still Zero, We've timed out.  If the second
    // DWORD is not zero then we have an error.
    // 
    if ((Adapter->SelfTest->StSignature == 0) || (Adapter->SelfTest->StResults != 0))
    {
        DBGPRINT(MP_ERROR, ("StSignature=%x, StResults=%x\n", 
            Adapter->SelfTest->StSignature, Adapter->SelfTest->StResults));

        NdisWriteErrorLogEntry(
            Adapter->AdapterHandle,
            NDIS_ERROR_CODE_HARDWARE_FAILURE,
            1,
            ERRLOG_SELFTEST_FAILED);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va在线播放| 亚洲欧美日韩中文字幕一区二区三区 | 国产性天天综合网| 国产成人高清视频| 国产精品美女久久久久av爽李琼| 福利电影一区二区| 亚洲国产日韩一区二区| 欧美日韩成人一区| 国产91在线|亚洲| 亚洲一区二区三区影院| 精品99久久久久久| 欧美三级在线播放| 国产激情精品久久久第一区二区| 国产精品理论片在线观看| 欧美性一级生活| 国产精品123| 美女视频黄久久| 亚洲一卡二卡三卡四卡 | 日韩亚洲欧美一区| 欧美特级限制片免费在线观看| 日本不卡一区二区| 国产精品久久一卡二卡| 久久夜色精品国产欧美乱极品| 91 com成人网| 欧美一区二区三区免费在线看| 成人av资源下载| 99久久777色| aaa亚洲精品| 91网站最新地址| 成人精品免费看| a4yy欧美一区二区三区| 国产九色sp调教91| 国产大陆亚洲精品国产| 99精品在线观看视频| 一本大道久久a久久精品综合| 国内外成人在线| 99久久综合国产精品| 高清不卡一区二区在线| 韩国av一区二区三区在线观看| 毛片一区二区三区| 国产一区在线看| 欧美午夜电影网| 国产精品久久影院| 久草这里只有精品视频| 色婷婷综合激情| 欧美一区二区成人| 日韩理论片一区二区| 亚洲成人一区二区在线观看| 国产精品亚洲第一| 666欧美在线视频| 中文乱码免费一区二区| 日本成人在线一区| 在线一区二区视频| 久久亚洲欧美国产精品乐播| 亚洲三级电影全部在线观看高清| 天堂一区二区在线| 在线视频国内自拍亚洲视频| 国产精品久久久久四虎| 色综合久久中文字幕| 亚洲三级小视频| 91免费版pro下载短视频| 久久美女高清视频| 国产精品一区二区三区网站| 欧美久久久一区| 亚洲一区在线观看免费观看电影高清| av欧美精品.com| 久久久高清一区二区三区| 狠狠色伊人亚洲综合成人| 7777精品伊人久久久大香线蕉完整版 | 日韩欧美视频一区| 热久久免费视频| 国产日韩高清在线| 91视频xxxx| 奇米一区二区三区| 精品久久一区二区三区| 国产成人免费av在线| 精品国免费一区二区三区| 成人高清视频在线| 日韩伦理电影网| 日韩欧美在线不卡| 在线观看日韩毛片| 精品亚洲国内自在自线福利| 欧美美女bb生活片| 国产精品香蕉一区二区三区| 国产精品丝袜久久久久久app| av电影天堂一区二区在线| 亚洲国产中文字幕| 26uuu色噜噜精品一区二区| 不卡影院免费观看| 亚洲chinese男男1069| 精品理论电影在线观看| 在线精品亚洲一区二区不卡| 国产成人午夜电影网| 亚洲在线视频免费观看| 欧美夫妻性生活| 国产不卡视频在线播放| 久久er精品视频| 毛片av中文字幕一区二区| 日韩久久一区二区| 国产欧美日韩精品一区| 91精品国产aⅴ一区二区| 成人a区在线观看| 丁香一区二区三区| 高清av一区二区| 国产91综合网| 成人avav影音| 色欲综合视频天天天| 激情国产一区二区| 国产精品乡下勾搭老头1| 韩国三级中文字幕hd久久精品| 日韩综合在线视频| 日本亚洲免费观看| 青娱乐精品在线视频| 国产麻豆视频一区| 美女诱惑一区二区| 狠狠色综合色综合网络| 九色|91porny| a级高清视频欧美日韩| 91免费版在线| 精品国产凹凸成av人网站| 国产欧美一区二区精品忘忧草| 亚洲精品在线三区| 国产精品美女视频| 综合久久给合久久狠狠狠97色 | 99精品桃花视频在线观看| 亚洲国产精品欧美一二99| 亚洲成人精品一区二区| 色婷婷久久99综合精品jk白丝| 91国产福利在线| 久久久99久久| 久草热8精品视频在线观看| 91精彩视频在线| 国产精品色一区二区三区| 国内外成人在线视频| 欧美亚洲动漫精品| 日韩欧美激情四射| 亚洲精品视频自拍| 国产精品免费视频观看| 七七婷婷婷婷精品国产| 99久久婷婷国产综合精品电影| 久久中文娱乐网| 午夜欧美视频在线观看| 91在线视频网址| 亚洲美女免费在线| 99re视频精品| 日韩一区二区三区精品视频| 亚洲精品乱码久久久久久黑人 | 午夜激情久久久| 99re8在线精品视频免费播放| 欧美一区二区在线免费播放| 午夜激情一区二区| 男人的天堂久久精品| 白白色亚洲国产精品| 69久久夜色精品国产69蝌蚪网| 欧美日韩情趣电影| 午夜精品国产更新| 日本黄色一区二区| 欧美不卡视频一区| 国产成人精品网址| 欧美电影免费观看高清完整版在 | 日精品一区二区三区| 8x福利精品第一导航| 午夜激情综合网| 欧美日韩一区不卡| 亚洲自拍偷拍网站| 欧美日韩国产高清一区二区三区| 国产成人综合亚洲91猫咪| 欧美精品一二三四| 免费观看30秒视频久久| 日韩精品一区二区三区中文精品| 极品少妇xxxx精品少妇| 国产亚洲精品aa| 国产美女主播视频一区| 国产日韩高清在线| 欧美中文字幕亚洲一区二区va在线| 五月天欧美精品| 日韩一区二区免费在线观看| 韩国女主播成人在线| www久久精品| 91精品国产91久久综合桃花| 男人的j进女人的j一区| 亚洲国产高清在线观看视频| 欧美日韩一级片在线观看| 精品一二线国产| 亚洲男人的天堂一区二区| 欧美一级二级三级蜜桃| 国产.欧美.日韩| 美女视频一区在线观看| 亚洲精品国产一区二区精华液| 欧美巨大另类极品videosbest| 国产成人亚洲精品狼色在线| 亚洲色图欧美在线| 久久久噜噜噜久久人人看| 欧美色图片你懂的| aaa亚洲精品一二三区| 成人性生交大片免费看中文网站| 久久国内精品自在自线400部| 亚洲人妖av一区二区| 久久精品人人做人人综合| 欧美人狂配大交3d怪物一区|