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

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

?? mp_nic.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網卡在Windows2000/xp下的PCI驅動程序源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    ASSERT(Adapter->nReadyRecv <= Adapter->CurrNumRfd);
}

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

    Start the receive unit if it's not in a ready state                    
    Assumption: Rcv spinlock has been acquired 

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_HARD_ERRROS
    
--*/
{
    PMP_RFD         pMpRfd;
    NDIS_STATUS     Status;

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

    //
    // If the receiver is ready, then don't try to restart.
    //
    if (NIC_IS_RECV_READY(Adapter))
    {
        DBGPRINT(MP_LOUD, ("Receive unit already active\n"));
        return NDIS_STATUS_SUCCESS;
    }

    DBGPRINT(MP_LOUD, ("Re-start receive unit...\n"));
    ASSERT(!IsListEmpty(&Adapter->RecvList));
    
    //
    // Get the MP_RFD head
    //
    pMpRfd = (PMP_RFD)GetListHeadEntry(&Adapter->RecvList);

    //
    // If more packets are received, clean up RFD chain again
    //
    if (NIC_RFD_GET_STATUS(pMpRfd->HwRfd))
    {
        MpHandleRecvInterrupt(Adapter);
        ASSERT(!IsListEmpty(&Adapter->RecvList));

        //
        // Get the new MP_RFD head
        //
        pMpRfd = (PMP_RFD)GetListHeadEntry(&Adapter->RecvList);
    }

    //
    // Start the receive unit with the next free RFD
    //
    while(NIC_RFD_GET_STATUS(pMpRfd->HwRfd))
    {
        pMpRfd = (PMP_RFD)GetListFLink(&pMpRfd->List);

        if (&Adapter->RecvList == (PLIST_ENTRY)pMpRfd)
        {
            //
            // If all RFDs are being used we exit without
            // restarting the receive unit. Another
            // interrupt may be needed to restart the receive unit
            //
            Status = NDIS_STATUS_SUCCESS;
            MP_EXIT;
        }
    }

    //
    // Wait for the SCB to clear before we set the general pointer
    //
    if (!WaitScb(Adapter))
    {
        Status = NDIS_STATUS_HARD_ERRORS;
        MP_EXIT;
    }

    if (Adapter->CurrentPowerState > NdisDeviceStateD0)
    {
        Status = NDIS_STATUS_HARD_ERRORS;
        MP_EXIT;
    }
    //
    // Set the SCB General Pointer to point the current Rfd
    //
    Adapter->CSRAddress->ScbGeneralPointer = pMpRfd->HwRfdPhys;

    //
    // Issue the SCB RU start command
    //
    Status = D100IssueScbCommand(Adapter, SCB_RUC_START, FALSE);
    if (Status == NDIS_STATUS_SUCCESS)
    {
        // wait for the command to be accepted
        if (!WaitScb(Adapter))
        {
            Status = NDIS_STATUS_HARD_ERRORS;
        }
    }        
    
    exit:

    DBGPRINT_S(Status, ("<--- NICStartRecv, Status=%x\n", Status));
    return Status;
}

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

    Free and complete the pended sends on SendWaitQueue
    Assumption: spinlock has been acquired 
    
Arguments:

    Adapter     Pointer to our adapter

Return Value:

     None

--*/
{
    PQUEUE_ENTRY    pEntry;
    PNDIS_PACKET    Packet;
    NDIS_STATUS     Status = MP_GET_STATUS_FROM_FLAGS(Adapter);

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

    while (!IsQueueEmpty(&Adapter->SendWaitQueue))
    {
        pEntry = RemoveHeadQueue(&Adapter->SendWaitQueue); 
        Adapter->nWaitSend--;
        NdisReleaseSpinLock(&Adapter->SendLock);

        ASSERT(pEntry);
        Packet = CONTAINING_RECORD(pEntry, NDIS_PACKET, MiniportReserved);

        NdisMSendComplete(
            MP_GET_ADAPTER_HANDLE(Adapter),
            Packet,
            Status);

        NdisAcquireSpinLock(&Adapter->SendLock);
    }

    DBGPRINT(MP_TRACE, ("<-- MpFreeQueuedSendPackets\n"));

}

void MpFreeBusySendPackets(
    IN  PMP_ADAPTER  Adapter
    )
/*++
Routine Description:

    Free and complete the stopped active sends
    Assumption: Send spinlock has been acquired 
    
Arguments:

    Adapter     Pointer to our adapter

Return Value:

     None

--*/
{
    PMP_TCB  pMpTcb;

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

    //
    // Any packets being sent? Check the first TCB on the send list
    //
    while (Adapter->nBusySend > 0)
    {
        pMpTcb = Adapter->CurrSendHead;

        //
        // Is this TCB completed?
        //
        if ((pMpTcb->HwTcb->TxCbHeader.CbCommand & CB_CMD_MASK) != CB_MULTICAST)
        {
            MP_FREE_SEND_PACKET_FUN(Adapter, pMpTcb);
        }
        else
        {
            break;
        }
    }

    DBGPRINT(MP_TRACE, ("<-- MpFreeBusySendPackets\n"));
}

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

    Reset the receive list                    
    Assumption: Rcv spinlock has been acquired 
    
Arguments:

    Adapter     Pointer to our adapter

Return Value:

     None

--*/
{
    PMP_RFD   pMpRfd;      
    PHW_RFD   pHwRfd;    
    LONG      RfdCount;

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

    ASSERT(!IsListEmpty(&Adapter->RecvList));
    
    //
    // Get the MP_RFD head
    //
    pMpRfd = (PMP_RFD)GetListHeadEntry(&Adapter->RecvList);
    for (RfdCount = 0; RfdCount < Adapter->nReadyRecv; RfdCount++)
    {
        pHwRfd = pMpRfd->HwRfd;
        pHwRfd->RfdCbHeader.CbStatus = 0;

        pMpRfd = (PMP_RFD)GetListFLink(&pMpRfd->List);
    }

    DBGPRINT(MP_TRACE, ("<-- NICResetRecv\n"));
}

VOID MpLinkDetectionDpc(
    IN  PVOID	    SystemSpecific1,
    IN  PVOID	    FunctionContext,
    IN  PVOID	    SystemSpecific2, 
    IN  PVOID	    SystemSpecific3
    )
/*++

Routine Description:
    
    Timer function for postponed link negotiation
    
Arguments:

    SystemSpecific1     Not used
    FunctionContext     Pointer to our adapter
    SystemSpecific2     Not used
    SystemSpecific3     Not used

Return Value:

    None
    
--*/
{
    PMP_ADAPTER         Adapter = (PMP_ADAPTER)FunctionContext;
    NDIS_STATUS         Status;
    NDIS_MEDIA_STATE    CurrMediaState;
    NDIS_STATUS         IndicateStatus;

	UNREFERENCED_PARAMETER(SystemSpecific1);
	UNREFERENCED_PARAMETER(SystemSpecific2);
	UNREFERENCED_PARAMETER(SystemSpecific3);
    //
    // Handle the link negotiation.
    //
    if (Adapter->bLinkDetectionWait)
    {
        Status = ScanAndSetupPhy(Adapter);
    }
    else
    {
        Status = PhyDetect(Adapter);
    }
    
    if (Status == NDIS_STATUS_PENDING)
    {
        // Wait for 100 ms   
        Adapter->bLinkDetectionWait = TRUE;
        NdisMSetTimer(&Adapter->LinkDetectionTimer, NIC_LINK_DETECTION_DELAY);
        return;
    }

    //
    // Reset some variables for link detection
    //
    Adapter->bLinkDetectionWait = FALSE;
    
    DBGPRINT(MP_WARN, ("MpLinkDetectionDpc - negotiation done\n"));

    NdisDprAcquireSpinLock(&Adapter->Lock);
    MP_CLEAR_FLAG(Adapter, fMP_ADAPTER_LINK_DETECTION);
    NdisDprReleaseSpinLock(&Adapter->Lock);

    //
    // Any OID query request?                                                        
    //
    if (Adapter->bQueryPending)
    {
        
        switch(Adapter->QueryRequest.Oid)
        {
            case OID_GEN_LINK_SPEED:
                *((PULONG) Adapter->QueryRequest.InformationBuffer) = Adapter->usLinkSpeed * 10000;
                *((PULONG) Adapter->QueryRequest.BytesWritten) = sizeof(ULONG);

                break;

            case OID_GEN_MEDIA_CONNECT_STATUS:
            default:
                ASSERT(Adapter->QueryRequest.Oid == OID_GEN_MEDIA_CONNECT_STATUS);
                CurrMediaState = NICGetMediaState(Adapter);
                NdisMoveMemory(Adapter->QueryRequest.InformationBuffer,
                               &CurrMediaState,
                               sizeof(NDIS_MEDIA_STATE));
                NdisDprAcquireSpinLock(&Adapter->Lock);
                if (Adapter->MediaState != CurrMediaState)
                {
                    Adapter->MediaState = CurrMediaState;
                    DBGPRINT(MP_WARN, ("Media state changed to %s\n",
                              ((CurrMediaState == NdisMediaStateConnected)? 
                              "Connected": "Disconnected")));

                    IndicateStatus = (CurrMediaState == NdisMediaStateConnected) ? 
                              NDIS_STATUS_MEDIA_CONNECT : NDIS_STATUS_MEDIA_DISCONNECT;          
                    if (IndicateStatus == NDIS_STATUS_MEDIA_CONNECT)
                    {
                        MP_CLEAR_FLAG(Adapter, fMP_ADAPTER_NO_CABLE);
                    }
                    else
                    {
                        MP_SET_FLAG(Adapter, fMP_ADAPTER_NO_CABLE);
                    }
                        
                    NdisDprReleaseSpinLock(&Adapter->Lock);
                      
                    // Indicate the media event
                    NdisMIndicateStatus(Adapter->AdapterHandle, IndicateStatus, (PVOID)0, 0);
                    NdisMIndicateStatusComplete(Adapter->AdapterHandle);
      
                }
                else
                {
                    NdisDprReleaseSpinLock(&Adapter->Lock);
                }

                *((PULONG) Adapter->QueryRequest.BytesWritten) = sizeof(NDIS_MEDIA_STATE);
        }

        Adapter->bQueryPending = FALSE;
        NdisMQueryInformationComplete(Adapter->AdapterHandle, NDIS_STATUS_SUCCESS);
    }

    //
    // Any OID set request?                             
    //
    if (Adapter->bSetPending)
    {
        ULONG    PacketFilter; 

        if (Adapter->SetRequest.Oid == OID_GEN_CURRENT_PACKET_FILTER)
        {

            NdisMoveMemory(&PacketFilter, Adapter->SetRequest.InformationBuffer, sizeof(ULONG));

            NdisDprAcquireSpinLock(&Adapter->Lock);

            Status = NICSetPacketFilter(
                         Adapter,
                         PacketFilter);

            NdisDprReleaseSpinLock(&Adapter->Lock);
 
            if (Status == NDIS_STATUS_SUCCESS)
            {
                Adapter->PacketFilter = PacketFilter;
            }
 
            Adapter->bSetPending = FALSE;
            NdisMSetInformationComplete(Adapter->AdapterHandle, Status);
        }
    }

    NdisDprAcquireSpinLock(&Adapter->Lock);
    //
    // Any pendingf reset?
    //
    if (Adapter->bResetPending)
    {
        // The link detection may have held some requests and caused reset. 
        // Complete the reset with NOT_READY status
        Adapter->bResetPending = FALSE;
        MP_CLEAR_FLAG(Adapter, fMP_ADAPTER_RESET_IN_PROGRESS);
        
        NdisDprReleaseSpinLock(&Adapter->Lock);

        NdisMResetComplete(
            Adapter->AdapterHandle, 
            NDIS_STATUS_ADAPTER_NOT_READY,
            FALSE);
    }
    else
    {
        NdisDprReleaseSpinLock(&Adapter->Lock);
    }

    NdisDprAcquireSpinLock(&Adapter->RcvLock);

    //
    // Start the NIC receive unit                                                     
    //
    Status = NICStartRecv(Adapter);
    if (Status != NDIS_STATUS_SUCCESS)
    {
        MP_SET_HARDWARE_ERROR(Adapter);
    }
    
    NdisDprReleaseSpinLock(&Adapter->RcvLock);
    NdisDprAcquireSpinLock(&Adapter->SendLock);

    //
    // Send packets which have been queued while link detection was going on. 
    //
    if (MP_IS_READY(Adapter))
    {
        while (!IsQueueEmpty(&Adapter->SendWaitQueue) &&
            MP_TCB_RESOURCES_AVAIABLE(Adapter))
        {
            PNDIS_PACKET Packet;
            PQUEUE_ENTRY pEntry;
#if OFFLOAD
            if (MP_TEST_FLAG(Adapter, fMP_SHARED_MEM_IN_USE))
            {
                break;
            }
#endif
            
            pEntry = RemoveHeadQueue(&Adapter->SendWaitQueue); 
            
            ASSERT(pEntry);
            
            Adapter->nWaitSend--;

            Packet = CONTAINING_RECORD(pEntry, NDIS_PACKET, MiniportReserved);

            DBGPRINT(MP_INFO, ("MpLinkDetectionDpc - send a queued packet\n"));

            Status = MpSendPacketFun(Adapter, Packet, TRUE);
            if (Status != NDIS_STATUS_SUCCESS)
            {
                break;
            }
        }
    }

    MP_DEC_REF(Adapter);

    if (MP_GET_REF(Adapter) == 0)
    {
        NdisSetEvent(&Adapter->ExitEvent);
    }

    NdisDprReleaseSpinLock(&Adapter->SendLock);

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频一区| 欧美一级视频精品观看| 欧美日韩国产在线观看| 欧美韩国日本一区| 青娱乐精品在线视频| 91蜜桃传媒精品久久久一区二区| 欧美成人性战久久| 亚洲综合久久久久| 国产91高潮流白浆在线麻豆| 91精品国产综合久久精品app| 亚洲欧洲日韩女同| 国产精品亚洲视频| 欧美成人vr18sexvr| 视频一区中文字幕国产| 91久久精品午夜一区二区| 国产精品久久精品日日| 精品一区二区三区蜜桃| 91精品国产综合久久香蕉的特点 | 在线视频国内一区二区| 最新欧美精品一区二区三区| 国产成人精品aa毛片| 欧美精品一区二区三区一线天视频| 五月天激情综合网| 欧美三级三级三级| 五月激情六月综合| 欧美日韩久久不卡| 日本女优在线视频一区二区| 欧美日韩电影在线| 亚洲高清视频中文字幕| 欧美日韩在线免费视频| 亚洲国产人成综合网站| 欧美在线观看一区| 日韩中文字幕一区二区三区| 91精品综合久久久久久| 日韩成人dvd| 精品国产一区二区三区久久影院| 精品一区中文字幕| 久久久久久久久久久黄色| 国产成人一区在线| 专区另类欧美日韩| 在线看国产日韩| 欧美a一区二区| 亚洲精品一区二区三区精华液| 国产一区二区成人久久免费影院| 国产日产欧美一区二区视频| 国产91精品精华液一区二区三区 | 国产在线看一区| 久久久不卡影院| 99久久精品99国产精品| 亚洲午夜激情av| 日韩欧美成人一区| 成人午夜精品一区二区三区| 亚洲免费观看高清完整版在线观看 | 欧美日韩精品一区二区天天拍小说 | 精品精品欲导航| 国产精品综合av一区二区国产馆| 欧美国产日韩a欧美在线观看| 91美女片黄在线| 日韩高清欧美激情| 中文字幕中文字幕在线一区| 欧美在线高清视频| 国产精品一区在线| 亚洲成人在线观看视频| 2023国产精华国产精品| 色婷婷国产精品综合在线观看| 免费成人深夜小野草| 中文字幕一区日韩精品欧美| 欧美群妇大交群中文字幕| 韩国中文字幕2020精品| 伊人性伊人情综合网| 久久久久综合网| 欧美日韩国产综合草草| av一区二区不卡| 狠狠色2019综合网| 天天亚洲美女在线视频| 亚洲国产成人在线| 日韩女优制服丝袜电影| 91福利社在线观看| 成人午夜激情影院| 国产在线视频一区二区| 婷婷国产v国产偷v亚洲高清| 最新高清无码专区| 精品va天堂亚洲国产| 欧美精品1区2区| 色综合视频在线观看| 国产99久久精品| 国产一区二区伦理| 日本vs亚洲vs韩国一区三区二区 | 亚洲欧美色图小说| 久久久久亚洲蜜桃| 日韩精品一区二区三区四区| 91蜜桃在线观看| 国产99久久精品| 国产精品小仙女| 日韩高清国产一区在线| 亚洲国产欧美在线| 一区二区成人在线视频 | 不卡视频在线观看| 国产一区二区在线看| 婷婷丁香久久五月婷婷| 亚洲国产日韩精品| 亚洲国产中文字幕在线视频综合| 亚洲精品自拍动漫在线| 中文字幕一区视频| 国产精品国产自产拍高清av王其| 国产性做久久久久久| 日韩免费在线观看| 欧美一区二区视频在线观看2022 | 欧美性感一类影片在线播放| 色一区在线观看| 91香蕉视频黄| 91传媒视频在线播放| 欧美色图一区二区三区| 91黄视频在线观看| 欧美午夜片在线看| 欧美一区二区福利在线| 欧美一区二区久久久| 欧美成人综合网站| xnxx国产精品| 久久精品视频一区二区| 欧美国产日韩在线观看| 亚洲三级小视频| 亚洲va韩国va欧美va| 天堂久久一区二区三区| 久久精品国产久精国产| 国产一区二区不卡在线| 成人av中文字幕| 精品写真视频在线观看| 日韩**一区毛片| 五月婷婷另类国产| 亚洲色欲色欲www| 一区二区三区四区在线播放| 亚洲午夜av在线| 久久国产精品露脸对白| 国产一区二区三区日韩| 99精品久久99久久久久| 欧美一a一片一级一片| 91精品国产品国语在线不卡| 久久综合999| 一级女性全黄久久生活片免费| 天堂va蜜桃一区二区三区漫画版 | 国产99精品视频| 在线观看中文字幕不卡| 日韩美女在线视频| 国产精品乱码一区二三区小蝌蚪| 亚洲少妇中出一区| 久草精品在线观看| 日本韩国精品一区二区在线观看| 日韩一卡二卡三卡四卡| 国产精品久99| 看国产成人h片视频| 色哦色哦哦色天天综合| 久久久另类综合| 男人的天堂久久精品| 岛国精品一区二区| 在线电影一区二区三区| 国产精品久久午夜| 日韩精品成人一区二区三区| 99久久婷婷国产综合精品| 日韩三级伦理片妻子的秘密按摩| 中文字幕一区二区三区四区不卡| 日韩精品国产精品| 91在线观看成人| 久久色中文字幕| 秋霞影院一区二区| 欧美性猛交xxxx黑人交| 国产精品视频在线看| 久久精品国产99| 欧美群妇大交群中文字幕| 亚洲视频在线一区观看| 国产一区二区三区不卡在线观看| 欧洲国内综合视频| 中文字幕一区二区三区av| 国产一区二区在线电影| 3d成人h动漫网站入口| 亚洲综合免费观看高清在线观看| 粉嫩在线一区二区三区视频| 欧美成人伊人久久综合网| 日韩成人午夜电影| 欧美群妇大交群的观看方式| 亚洲综合成人在线| 91一区二区在线| 亚洲欧洲国产日本综合| 成人免费毛片aaaaa**| 久久久久久久久久久电影| 精品中文av资源站在线观看| 91精品国产高清一区二区三区蜜臀| 亚洲高清视频在线| 欧美日韩不卡视频| 性欧美大战久久久久久久久| 欧美色老头old∨ideo| 亚洲永久精品大片| 欧美日韩午夜在线| 日韩成人av影视| 欧美一区二区不卡视频| 美腿丝袜亚洲综合| 日韩亚洲欧美成人一区| 久国产精品韩国三级视频| 久久嫩草精品久久久精品一| 国产高清一区日本|