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

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

?? mp_init.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網卡在Windows2000/xp下的PCI驅動程序源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
        {
            DBGPRINT(MP_ERROR, ("Failed to allocate memory - ADAPTER\n"));
            break;
        }

        // Clean up the memory block
        NdisZeroMemory(Adapter, sizeof(MP_ADAPTER));

        MP_INC_REF(Adapter);

        // Init lists, spinlocks, etc.
        InitializeQueueHeader(&Adapter->SendWaitQueue);
        InitializeQueueHeader(&Adapter->SendCancelQueue);

        InitializeListHead(&Adapter->RecvList);
        InitializeListHead(&Adapter->RecvPendList);
        InitializeListHead(&Adapter->PoMgmt.PatternList);

        NdisInitializeEvent(&Adapter->ExitEvent);
        NdisInitializeEvent(&Adapter->AllPacketsReturnedEvent);
        MP_INC_RCV_REF(Adapter);

        NdisAllocateSpinLock(&Adapter->Lock);
        NdisAllocateSpinLock(&Adapter->SendLock);
        NdisAllocateSpinLock(&Adapter->RcvLock);

    } while (FALSE);

    *pAdapter = Adapter;

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

    return Status;

}

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

    Free all the resources and MP_ADAPTER data block

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    None                                                    

--*/    
{
    PMP_TXBUF       pMpTxBuf;
    PMP_RFD         pMpRfd;

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

    // No active and waiting sends
    ASSERT(Adapter->nBusySend == 0);
    ASSERT(Adapter->nWaitSend == 0);
    ASSERT(IsQueueEmpty(&Adapter->SendWaitQueue));
    ASSERT(IsQueueEmpty(&Adapter->SendCancelQueue));

    // No other pending operations
    ASSERT(IsListEmpty(&Adapter->RecvPendList));
    ASSERT(Adapter->bAllocNewRfd == FALSE);
    ASSERT(!MP_TEST_FLAG(Adapter, fMP_ADAPTER_LINK_DETECTION));
    ASSERT(MP_GET_REF(Adapter) == 0);

    //
    // Free hardware resources
    //      
    if (MP_TEST_FLAG(Adapter, fMP_ADAPTER_INTERRUPT_IN_USE))
    {
        NdisMDeregisterInterrupt(&Adapter->Interrupt);
        MP_CLEAR_FLAG(Adapter, fMP_ADAPTER_INTERRUPT_IN_USE);
    }

    if (Adapter->CSRAddress)
    {
        NdisMUnmapIoSpace(
            Adapter->AdapterHandle,
            Adapter->CSRAddress,
            NIC_MAP_IOSPACE_LENGTH);
        Adapter->CSRAddress = NULL;
    }

    if (Adapter->PortOffset)
    {
        NdisMDeregisterIoPortRange(
            Adapter->AdapterHandle,
            Adapter->IoBaseAddress,
            Adapter->IoRange,
            Adapter->PortOffset);
        Adapter->PortOffset = NULL;
    }

    //               
    // Free RECV memory/NDIS buffer/NDIS packets/shared memory
    //
    ASSERT(Adapter->nReadyRecv == Adapter->CurrNumRfd);

    while (!IsListEmpty(&Adapter->RecvList))
    {
        pMpRfd = (PMP_RFD)RemoveHeadList(&Adapter->RecvList);
        NICFreeRfd(Adapter, pMpRfd);
    }

    // Free receive buffer pool
    if (Adapter->RecvBufferPool)
    {
        NdisFreeBufferPool(Adapter->RecvBufferPool);
        Adapter->RecvBufferPool = NULL;
    }

    // Free receive packet pool
    if (Adapter->RecvPacketPool)
    {
        NdisFreePacketPool(Adapter->RecvPacketPool);
        Adapter->RecvPacketPool = NULL;
    }
    
    if (MP_TEST_FLAG(Adapter, fMP_ADAPTER_RECV_LOOKASIDE))
    {
        NdisDeleteNPagedLookasideList(&Adapter->RecvLookaside);
        MP_CLEAR_FLAG(Adapter, fMP_ADAPTER_RECV_LOOKASIDE);
    }
            
    //               
    // Free SEND memory/NDIS buffer/NDIS packets/shared memory
    //
    while (!IsSListEmpty(&Adapter->SendBufList))
    {
        pMpTxBuf = (PMP_TXBUF)PopEntryList(&Adapter->SendBufList);
        ASSERT(pMpTxBuf);

        // Free the shared memory associated with each MP_TXBUF
        if (pMpTxBuf->AllocVa)
        {
            NdisMFreeSharedMemory(
                Adapter->AdapterHandle,
                pMpTxBuf->AllocSize,
                TRUE,
                pMpTxBuf->AllocVa,
                pMpTxBuf->AllocPa);
            pMpTxBuf->AllocVa = NULL;      
        }

        // Free the NDIS buffer
        if (pMpTxBuf->NdisBuffer)
        {
            NdisAdjustBufferLength(pMpTxBuf->NdisBuffer, pMpTxBuf->BufferSize);
            NdisFreeBuffer(pMpTxBuf->NdisBuffer);
            pMpTxBuf->NdisBuffer = NULL;
        }
    }

    // Free the send buffer pool
    if (Adapter->SendBufferPool)
    {
        NdisFreeBufferPool(Adapter->SendBufferPool);
        Adapter->SendBufferPool = NULL;
    }
    
    // Free the memory for MP_TXBUF structures
    if (Adapter->MpTxBufMem)
    {
        MP_FREEMEM(Adapter->MpTxBufMem, Adapter->MpTxBufMemSize, 0);
        Adapter->MpTxBufMem = NULL;
    }

    // Free the shared memory for HW_TCB structures
    if (Adapter->HwSendMemAllocVa)
    {
        NdisMFreeSharedMemory(
            Adapter->AdapterHandle,
            Adapter->HwSendMemAllocSize,
            FALSE,
            Adapter->HwSendMemAllocVa,
            Adapter->HwSendMemAllocPa);
        Adapter->HwSendMemAllocVa = NULL;
    }

    // Free the shared memory for other command data structures                       
    if (Adapter->HwMiscMemAllocVa)
    {
        NdisMFreeSharedMemory(
            Adapter->AdapterHandle,
            Adapter->HwMiscMemAllocSize,
            FALSE,
            Adapter->HwMiscMemAllocVa,
            Adapter->HwMiscMemAllocPa);
        Adapter->HwMiscMemAllocVa = NULL;
    }


    // Free the memory for MP_TCB structures
    if (Adapter->MpTcbMem)
    {
        MP_FREEMEM(Adapter->MpTcbMem, Adapter->MpTcbMemSize, 0);
        Adapter->MpTcbMem = NULL;
    }

#if OFFLOAD    
    // Free the shared memory for offload tasks
    if (Adapter->OffloadSharedMem.StartVa)
    {
        NdisMFreeSharedMemory(
                Adapter->AdapterHandle,
                Adapter->OffloadSharedMemSize,
                FALSE,
                Adapter->OffloadSharedMem.StartVa,
                Adapter->OffloadSharedMem.PhyAddr);
        Adapter->OffloadSharedMem.StartVa = NULL;
    }

#endif

    //Free all the wake up patterns on this adapter
    MPRemoveAllWakeUpPatterns(Adapter);
    
    NdisFreeSpinLock(&Adapter->Lock);
    NdisFreeSpinLock(&Adapter->SendLock);
    NdisFreeSpinLock(&Adapter->RcvLock);


#if LBFO
    if (Adapter->BundleId.MaximumLength)
    {
        MP_FREE_NDIS_STRING(&Adapter->BundleId);
    }
#endif


    MP_FREEMEM(Adapter, sizeof(MP_ADAPTER), 0);  

#if DBG
    if (MPInitDone)
    {
        NdisFreeSpinLock(&MPMemoryLock);
    }
#endif

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

NDIS_STATUS NICReadRegParameters(
    IN  PMP_ADAPTER     Adapter,
    IN  NDIS_HANDLE     WrapperConfigurationContext)
/*++
Routine Description:

    Read the following from the registry
    1. All the parameters
    2. NetworkAddres
    3. LBFO - BundleId

Arguments:

    Adapter                         Pointer to our adapter
    WrapperConfigurationContext     For use by NdisOpenConfiguration

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_FAILURE
    NDIS_STATUS_RESOURCES                                       

--*/    
{
    NDIS_STATUS     Status = NDIS_STATUS_SUCCESS;
    NDIS_HANDLE     ConfigurationHandle;
    PMP_REG_ENTRY   pRegEntry;
    UINT            i;
    UINT            value;
    PUCHAR          pointer;
    PNDIS_CONFIGURATION_PARAMETER ReturnedValue;
    PUCHAR          NetworkAddress;
    UINT            Length;

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

    // Open the registry for this adapter
    NdisOpenConfiguration(
        &Status,
        &ConfigurationHandle,
        WrapperConfigurationContext);
    if (Status != NDIS_STATUS_SUCCESS)
    {
        DBGPRINT(MP_ERROR, ("NdisOpenConfiguration failed\n"));
        DBGPRINT_S(Status, ("<-- NICReadRegParameters, Status=%x\n", Status));
        return Status;
    }

    // read all the registry values 
    for (i = 0, pRegEntry = NICRegTable; i < NIC_NUM_REG_PARAMS; i++, pRegEntry++)
    {
        //
        // Driver should NOT fail the initialization only because it can not
        // read the registry
        //
        ASSERT(pRegEntry->bRequired == FALSE);
        pointer = (PUCHAR) Adapter + pRegEntry->FieldOffset;

        DBGPRINT_UNICODE(MP_INFO, &pRegEntry->RegName);

        // Get the configuration value for a specific parameter.  Under NT the
        // parameters are all read in as DWORDs.
        NdisReadConfiguration(
            &Status,
            &ReturnedValue,
            ConfigurationHandle,
            &pRegEntry->RegName,
            NdisParameterInteger);

        // If the parameter was present, then check its value for validity.
        if (Status == NDIS_STATUS_SUCCESS)
        {
            // Check that param value is not too small or too large
            if (ReturnedValue->ParameterData.IntegerData < pRegEntry->Min ||
                ReturnedValue->ParameterData.IntegerData > pRegEntry->Max)
            {
                value = pRegEntry->Default;
            }
            else
            {
                value = ReturnedValue->ParameterData.IntegerData;
            }

            DBGPRINT_RAW(MP_INFO, ("= 0x%x\n", value));
        }
        else if (pRegEntry->bRequired)
        {
            DBGPRINT_RAW(MP_ERROR, (" -- failed\n"));

            ASSERT(FALSE);

            Status = NDIS_STATUS_FAILURE;
            break;
        }
        else
        {
            value = pRegEntry->Default;
            DBGPRINT_RAW(MP_INFO, ("= 0x%x (default)\n", value));
            Status = NDIS_STATUS_SUCCESS;
        }
        //
        // Store the value in the adapter structure.
        //
        switch(pRegEntry->FieldSize)
        {
            case 1:
                *((PUCHAR) pointer) = (UCHAR) value;
                break;

            case 2:
                *((PUSHORT) pointer) = (USHORT) value;
                break;

            case 4:
                *((PULONG) pointer) = (ULONG) value;
                break;

            default:
                DBGPRINT(MP_ERROR, ("Bogus field size %d\n", pRegEntry->FieldSize));
                break;
        }
    }

    // Read NetworkAddress registry value 
    // Use it as the current address if any
    if (Status == NDIS_STATUS_SUCCESS)
    {
        NdisReadNetworkAddress(
            &Status,
            &NetworkAddress,
            &Length,
            ConfigurationHandle);

        // If there is a NetworkAddress override in registry, use it 
        if ((Status == NDIS_STATUS_SUCCESS) && (Length == ETH_LENGTH_OF_ADDRESS))
        {
            if ((ETH_IS_MULTICAST(NetworkAddress) 
                    || ETH_IS_BROADCAST(NetworkAddress))
                    || !ETH_IS_LOCALLY_ADMINISTERED (NetworkAddress))
            {
                DBGPRINT(MP_ERROR, 
                    ("Overriding NetworkAddress is invalid - %02x-%02x-%02x-%02x-%02x-%02x\n", 
                    NetworkAddress[0], NetworkAddress[1], NetworkAddress[2],
                    NetworkAddress[3], NetworkAddress[4], NetworkAddress[5]));
            }
            else
            {
                ETH_COPY_NETWORK_ADDRESS(Adapter->CurrentAddress, NetworkAddress);
                Adapter->bOverrideAddress = TRUE;
            }
        }

        Status = NDIS_STATUS_SUCCESS;
    }

#if LBFO
    if (Status == NDIS_STATUS_SUCCESS)
    {
        // Read BundleIdentifier string
        NdisReadConfiguration(
            &Status,
            &ReturnedValue,
            ConfigurationHandle,
            &strBundleId,
            NdisParameterString);

        if (Status == NDIS_STATUS_SUCCESS)
        {
            ASSERT(ReturnedValue->ParameterType == NdisParameterString);

            if (ReturnedValue->ParameterData.StringData.Length !=0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产欧美久久久精品| 成人一级黄色片| 国产精品不卡在线观看| 欧美日韩aaaaaa| www.欧美日韩国产在线| 久久电影国产免费久久电影| 亚洲一区二区五区| 中文一区一区三区高中清不卡| 91精品国产综合久久久久久久| 91在线视频免费91| 国产精品一区二区免费不卡| 亚洲第一成年网| 亚洲男人的天堂av| 国产精品毛片久久久久久久| 精品国产免费视频| 91精品国产丝袜白色高跟鞋| 色噜噜狠狠色综合中国| 国产99精品国产| 国产在线国偷精品产拍免费yy| 亚洲国产精品一区二区久久| 亚洲色图欧洲色图| 中文在线一区二区| 欧美韩国日本综合| 日本一区二区三区免费乱视频 | 日本系列欧美系列| 有码一区二区三区| 亚洲欧洲另类国产综合| 国产日韩欧美不卡在线| 久久综合久久综合九色| 日韩精品一区国产麻豆| 日韩欧美不卡在线观看视频| 色一情一乱一乱一91av| www.日韩在线| 91视频com| 一本久道中文字幕精品亚洲嫩| 久久久久99精品一区| 91麻豆精品91久久久久久清纯| 男女男精品网站| 日韩伦理免费电影| 国产精品久久久久久福利一牛影视 | 久久se精品一区二区| 美国毛片一区二区| 久久精品72免费观看| 久久精品国产免费看久久精品| 奇米色777欧美一区二区| 日韩福利视频网| 免费欧美日韩国产三级电影| 麻豆91免费观看| 国产美女视频91| 粉嫩av一区二区三区| 99久久国产综合精品女不卡| 一本色道综合亚洲| 欧美性受极品xxxx喷水| 欧美日韩亚洲综合一区二区三区| 欧美天堂亚洲电影院在线播放| 欧美久久久一区| 欧美精品一区二区高清在线观看| www久久精品| 国产精品久久久久四虎| 亚洲人成精品久久久久| 一级做a爱片久久| 日本色综合中文字幕| 捆绑调教美女网站视频一区| 成人在线综合网| 欧美性xxxxx极品少妇| 日韩一区二区精品葵司在线 | 亚洲精品乱码久久久久| 午夜精品影院在线观看| 精品一二三四区| 北条麻妃一区二区三区| 91福利国产成人精品照片| 91精品欧美久久久久久动漫| 久久久久国色av免费看影院| 亚洲三级电影网站| 日本va欧美va欧美va精品| 国产精品538一区二区在线| 色www精品视频在线观看| 日韩欧美国产一区二区三区| 日本一区二区高清| 日韩精品电影一区亚洲| 成人网在线播放| 欧美日韩国产精品自在自线| 亚洲国产成人午夜在线一区| 亚洲午夜日本在线观看| 国产精品一区二区91| 欧美性生活久久| 欧美激情一区不卡| 青青草原综合久久大伊人精品优势| 国产乱子伦视频一区二区三区 | 天堂久久久久va久久久久| 国产成人在线观看| 欧美三级欧美一级| 亚洲国产高清不卡| 蜜桃av一区二区三区电影| 99精品视频一区二区三区| 日韩三级视频在线看| 一区二区三区在线视频免费观看| 经典三级在线一区| 欧美色视频一区| 欧美国产乱子伦| 国内外精品视频| 精品视频一区 二区 三区| 国产精品视频观看| 国内精品久久久久影院一蜜桃| 91老师片黄在线观看| 久久久亚洲精品石原莉奈| 日日夜夜一区二区| 色婷婷精品大在线视频| 中文字幕电影一区| 国产在线视频一区二区三区| 5858s免费视频成人| 亚洲综合成人在线| 99久久综合国产精品| 国产婷婷精品av在线| 久久成人精品无人区| 91超碰这里只有精品国产| 亚洲一区二区三区爽爽爽爽爽| www.亚洲国产| 国产精品久久免费看| 国产精品一区三区| 日韩精品影音先锋| 麻豆国产精品777777在线| 91 com成人网| 亚洲一区视频在线观看视频| 色呦呦日韩精品| 一区二区三区四区高清精品免费观看| 国产盗摄视频一区二区三区| 欧美精品一区在线观看| 久久99精品久久只有精品| 欧美一级理论性理论a| 国产不卡免费视频| 精品粉嫩aⅴ一区二区三区四区| 日韩在线一区二区| 欧美一区二区三区在线视频| 午夜激情综合网| 91精品欧美综合在线观看最新| 午夜天堂影视香蕉久久| 欧美日韩国产在线播放网站| 亚洲国产精品久久久男人的天堂| 欧美在线free| 亚洲福利视频三区| 3d成人动漫网站| 男女激情视频一区| 精品国精品国产尤物美女| 加勒比av一区二区| 久久久99精品免费观看| 粉嫩绯色av一区二区在线观看| 国产精品福利影院| 色域天天综合网| 视频一区视频二区在线观看| 日韩一区二区免费视频| 国产一区二区在线观看视频| 欧美国产乱子伦| 色婷婷精品久久二区二区蜜臀av | 日韩欧美激情四射| 高清视频一区二区| 亚洲欧洲制服丝袜| 7777女厕盗摄久久久| 韩国女主播一区| 国产精品另类一区| 欧美伊人精品成人久久综合97| 蜜桃91丨九色丨蝌蚪91桃色| 国产欧美视频一区二区三区| 一本到三区不卡视频| 天天综合日日夜夜精品| 久久久精品国产免大香伊| 99久久综合国产精品| 日韩电影一区二区三区四区| 国产午夜久久久久| 在线视频国内自拍亚洲视频| 蜜桃久久av一区| 中文字幕日韩一区| 欧美一区二区三区人| 大陆成人av片| 日本亚洲电影天堂| 亚洲欧洲色图综合| 日韩欧美国产一区二区在线播放| 不卡的av电影| 青青草国产成人av片免费| 国产精品九色蝌蚪自拍| 欧美高清一级片在线| 成人一区二区三区中文字幕| 亚洲一二三四区不卡| 国产亚洲污的网站| 欧美日韩免费电影| 成人黄页毛片网站| 麻豆传媒一区二区三区| 一区二区激情小说| 久久精品一区二区三区不卡| 欧美日韩免费一区二区三区| 丁香婷婷综合五月| 日本不卡视频在线| 亚洲自拍偷拍九九九| 国产精品免费看片| 精品国一区二区三区| 欧美图片一区二区三区| 99视频精品在线| 国产成人精品亚洲午夜麻豆| 免费国产亚洲视频| 午夜精品久久久久影视|