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

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

?? mp_init.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網卡在Windows2000/xp下的PCI驅動程序源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
            {
                Status = MP_ALLOCMEMTAG(&Adapter->BundleId.Buffer, 
                             ReturnedValue->ParameterData.StringData.Length + sizeof(WCHAR));
                if (Status == NDIS_STATUS_SUCCESS)
                {
                    Adapter->BundleId.MaximumLength = 
                        ReturnedValue->ParameterData.StringData.Length + sizeof(WCHAR);
                    NdisUpcaseUnicodeString(
                        &Adapter->BundleId, 
                        &ReturnedValue->ParameterData.StringData);
                }
                else
                {
                    DBGPRINT(MP_ERROR, ("Failed to allocate memory - BundleIdentifier\n"));
                }
            }
        }
        else
        {
            // This parameter is optional, set status to SUCCESS
            Status = NDIS_STATUS_SUCCESS;
        }
    }
#endif   

    // Close the registry
    NdisCloseConfiguration(ConfigurationHandle);
    
    // Decode SpeedDuplex
    if (Status == NDIS_STATUS_SUCCESS && Adapter->SpeedDuplex)
    {
        switch(Adapter->SpeedDuplex)
        {
            case 1:
            Adapter->AiTempSpeed = 10; Adapter->AiForceDpx = 1;
            break;
            
            case 2:
            Adapter->AiTempSpeed = 10; Adapter->AiForceDpx = 2;
            break;
            
            case 3:
            Adapter->AiTempSpeed = 100; Adapter->AiForceDpx = 1;
            break;
            
            case 4:
            Adapter->AiTempSpeed = 100; Adapter->AiForceDpx = 2;
            break;
        }
    
    }

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

    return Status;
}

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

    Allocate all the memory blocks for send, receive and others

Arguments:

    Adapter     Pointer to our adapter

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_FAILURE
    NDIS_STATUS_RESOURCES

--*/    
{
    NDIS_STATUS     Status;
    PMP_TXBUF       pMpTxbuf;
    PUCHAR          pMem;
    ULONG           MemPhys;
    LONG            index;
    ULONG           ErrorValue = 0;
    UINT            MaxNumBuffers;

#if OFFLOAD
    BOOLEAN         OffloadSharedMemSuccess = FALSE;
    UINT            i;
#endif
    
    DBGPRINT(MP_TRACE, ("--> NICAllocMemory\n"));

    DBGPRINT(MP_INFO, ("NumTcb=%d\n", Adapter->NumTcb));
    Adapter->NumTbd = Adapter->NumTcb * NIC_MAX_PHYS_BUF_COUNT;

    do
    {

#if OFFLOAD          
        Status = NdisMInitializeScatterGatherDma(
                     Adapter->AdapterHandle,
                     FALSE,
                     LARGE_SEND_OFFLOAD_SIZE);
#else
        Status = NdisMInitializeScatterGatherDma(
                     Adapter->AdapterHandle,
                     FALSE,
                     NIC_MAX_PACKET_SIZE);
#endif        


        
        if (Status == NDIS_STATUS_SUCCESS)
        {
            MP_SET_FLAG(Adapter, fMP_ADAPTER_SCATTER_GATHER);
        }
        else
        {

            DBGPRINT(MP_WARN, ("Failed to init ScatterGather DMA\n"));

            //
            // NDIS 5.1 miniport should NOT use map registers
            //
            ErrorValue = ERRLOG_OUT_OF_SG_RESOURCES;
            
            break;  
        }

        //
        // Send + Misc
        //
        //
        // Allocate MP_TCB's
        // 
        Adapter->MpTcbMemSize = Adapter->NumTcb * sizeof(MP_TCB);
        Status = MP_ALLOCMEMTAG(&pMem, Adapter->MpTcbMemSize);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ErrorValue = ERRLOG_OUT_OF_MEMORY;
            DBGPRINT(MP_ERROR, ("Failed to allocate MP_TCB's\n"));
            break;
        }
        NdisZeroMemory(pMem, Adapter->MpTcbMemSize);
        Adapter->MpTcbMem = pMem;
        //
        // Now the driver needs to allocate send buffer pool, the number 
        // of send buffers the driver needs is the larger one of Adapter->NumBuffer  
        // and Adapter->NumTcb.
        //
        MaxNumBuffers = Adapter->NumBuffers > Adapter->NumTcb ? Adapter->NumBuffers: Adapter->NumTcb;
        NdisAllocateBufferPool(
            &Status,
            &Adapter->SendBufferPool,
            MaxNumBuffers);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ErrorValue = ERRLOG_OUT_OF_BUFFER_POOL;
            DBGPRINT(MP_ERROR, ("Failed to allocate send buffer pool\n"));
            break;
        }


        // Allocate send buffers
        Adapter->MpTxBufMemSize = Adapter->NumBuffers * sizeof(MP_TXBUF);
        Status = MP_ALLOCMEMTAG(&pMem, Adapter->MpTxBufMemSize);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ErrorValue = ERRLOG_OUT_OF_MEMORY;
            DBGPRINT(MP_ERROR, ("Failed to allocate MP_TXBUF's\n"));
            break;
        }
        NdisZeroMemory(pMem, Adapter->MpTxBufMemSize);
        Adapter->MpTxBufMem = pMem;

        pMpTxbuf = (PMP_TXBUF) pMem;         

        //
        // NdisMGetDmaAlignment is provided in XP (WINVER=0x0501) and higher
        // if you need to write a driver that runs on older versions of Windows
        // you need to compile with older versions of DDK which have WINVER < 0x0501
        // such as W2K DDK.
        //
        Adapter->CacheFillSize = NdisMGetDmaAlignment(Adapter->AdapterHandle);
        DBGPRINT(MP_INFO, ("CacheFillSize=%d\n", Adapter->CacheFillSize));

        for (index = 0; index < Adapter->NumBuffers; index++)
        {
            pMpTxbuf->AllocSize = NIC_MAX_PACKET_SIZE + Adapter->CacheFillSize;
            pMpTxbuf->BufferSize = NIC_MAX_PACKET_SIZE;

            NdisMAllocateSharedMemory(
                Adapter->AdapterHandle,
                pMpTxbuf->AllocSize,
                TRUE,                           // CACHED
                &pMpTxbuf->AllocVa,  
                &pMpTxbuf->AllocPa);

            if (!pMpTxbuf->AllocVa)
            {
                ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY;
                DBGPRINT(MP_ERROR, ("Failed to allocate a big buffer\n"));
                Status = NDIS_STATUS_RESOURCES;
                break;
            }
            //
            // Align the buffer on the cache line boundary
            //
            pMpTxbuf->pBuffer = MP_ALIGNMEM(pMpTxbuf->AllocVa, Adapter->CacheFillSize);
            pMpTxbuf->BufferPa.QuadPart = MP_ALIGNMEM_PA(pMpTxbuf->AllocPa, Adapter->CacheFillSize);

            NdisAllocateBuffer(
                &Status,
                &pMpTxbuf->NdisBuffer,
                Adapter->SendBufferPool,
                pMpTxbuf->pBuffer,
                pMpTxbuf->BufferSize);

            if (Status != NDIS_STATUS_SUCCESS)
            {
                ErrorValue = ERRLOG_OUT_OF_NDIS_BUFFER;
                DBGPRINT(MP_ERROR, ("Failed to allocate NDIS buffer for a big buffer\n"));

                NdisMFreeSharedMemory(
                    Adapter->AdapterHandle,
                    pMpTxbuf->AllocSize,
                    TRUE,                           // CACHED
                    pMpTxbuf->AllocVa,   
                    pMpTxbuf->AllocPa);

                break;
            }

            PushEntryList(&Adapter->SendBufList, &pMpTxbuf->SList);

            pMpTxbuf++;
        }

        if (Status != NDIS_STATUS_SUCCESS) break;

        // HW_START

        //
        // Allocate shared memory for send
        // 
        Adapter->HwSendMemAllocSize = Adapter->NumTcb * (sizeof(TXCB_STRUC) + 
                                          NIC_MAX_PHYS_BUF_COUNT * sizeof(TBD_STRUC));

        NdisMAllocateSharedMemory(
            Adapter->AdapterHandle,
            Adapter->HwSendMemAllocSize,
            FALSE,
            (PVOID) &Adapter->HwSendMemAllocVa,
            &Adapter->HwSendMemAllocPa);

        if (!Adapter->HwSendMemAllocVa)
        {
            ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY;
            DBGPRINT(MP_ERROR, ("Failed to allocate send memory\n"));
            Status = NDIS_STATUS_RESOURCES;
            break;
        }

        NdisZeroMemory(Adapter->HwSendMemAllocVa, Adapter->HwSendMemAllocSize);

        //
        // Allocate shared memory for other uses
        // 
        Adapter->HwMiscMemAllocSize =
            sizeof(SELF_TEST_STRUC) + ALIGN_16 +
            sizeof(DUMP_AREA_STRUC) + ALIGN_16 +
            sizeof(NON_TRANSMIT_CB) + ALIGN_16 +
            sizeof(ERR_COUNT_STRUC) + ALIGN_16;
       
        //
        // Allocate the shared memory for the command block data structures.
        //
        NdisMAllocateSharedMemory(
            Adapter->AdapterHandle,
            Adapter->HwMiscMemAllocSize,
            FALSE,
            (PVOID *) &Adapter->HwMiscMemAllocVa,
            &Adapter->HwMiscMemAllocPa);
        if (!Adapter->HwMiscMemAllocVa)
        {
            ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY;
            DBGPRINT(MP_ERROR, ("Failed to allocate misc memory\n"));
            Status = NDIS_STATUS_RESOURCES;
            break;
        }

        NdisZeroMemory(Adapter->HwMiscMemAllocVa, Adapter->HwMiscMemAllocSize);

        pMem = Adapter->HwMiscMemAllocVa; 
        MemPhys = NdisGetPhysicalAddressLow(Adapter->HwMiscMemAllocPa);

        Adapter->SelfTest = (PSELF_TEST_STRUC)MP_ALIGNMEM(pMem, ALIGN_16);
        Adapter->SelfTestPhys = MP_ALIGNMEM_PHYS(MemPhys, ALIGN_16);
        pMem = (PUCHAR)Adapter->SelfTest + sizeof(SELF_TEST_STRUC);
        MemPhys = Adapter->SelfTestPhys + sizeof(SELF_TEST_STRUC);

        Adapter->NonTxCmdBlock = (PNON_TRANSMIT_CB)MP_ALIGNMEM(pMem, ALIGN_16);
        Adapter->NonTxCmdBlockPhys = MP_ALIGNMEM_PHYS(MemPhys, ALIGN_16);
        pMem = (PUCHAR)Adapter->NonTxCmdBlock + sizeof(NON_TRANSMIT_CB);
        MemPhys = Adapter->NonTxCmdBlockPhys + sizeof(NON_TRANSMIT_CB);

        Adapter->DumpSpace = (PDUMP_AREA_STRUC)MP_ALIGNMEM(pMem, ALIGN_16);
        Adapter->DumpSpacePhys = MP_ALIGNMEM_PHYS(MemPhys, ALIGN_16);
        pMem = (PUCHAR)Adapter->DumpSpace + sizeof(DUMP_AREA_STRUC);
        MemPhys = Adapter->DumpSpacePhys + sizeof(DUMP_AREA_STRUC);

        Adapter->StatsCounters = (PERR_COUNT_STRUC)MP_ALIGNMEM(pMem, ALIGN_16);
        Adapter->StatsCounterPhys = MP_ALIGNMEM_PHYS(MemPhys, ALIGN_16);

        // HW_END

        //
        // Recv
        //

        NdisInitializeNPagedLookasideList(
            &Adapter->RecvLookaside,
            NULL,
            NULL,
            0,
            sizeof(MP_RFD),
            NIC_TAG, 
            0);

        MP_SET_FLAG(Adapter, fMP_ADAPTER_RECV_LOOKASIDE);

        // set the max number of RFDs
        // disable the RFD grow/shrink scheme if user specifies a NumRfd value 
        // larger than NIC_MAX_GROW_RFDS
        Adapter->MaxNumRfd = max(Adapter->NumRfd, NIC_MAX_GROW_RFDS);
        DBGPRINT(MP_INFO, ("NumRfd = %d\n", Adapter->NumRfd));
        DBGPRINT(MP_INFO, ("MaxNumRfd = %d\n", Adapter->MaxNumRfd));

        //
        // The driver should allocate more data than sizeof(RFD_STRUC) to allow the
        // driver to align the data(after ethernet header) at 8 byte boundary
        //
        Adapter->HwRfdSize = sizeof(RFD_STRUC) + MORE_DATA_FOR_ALIGN;      

        // alloc the recv packet pool

        NdisAllocatePacketPoolEx(
            &Status,
            &Adapter->RecvPacketPool,
            Adapter->NumRfd,
            Adapter->MaxNumRfd,
            sizeof(PVOID) * 4);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ErrorValue = ERRLOG_OUT_OF_PACKET_POOL;
            break;
        }

        // alloc the buffer pool
        NdisAllocateBufferPool(
            &Status,
            &Adapter->RecvBufferPool,
            Adapter->MaxNumRfd);
        if (Status != NDIS_STATUS_SUCCESS)
        {
            ErrorValue = ERRLOG_OUT_OF_BUFFER_POOL;
            break;
        }

#if OFFLOAD
        //
        // Allocate the shared memory for the offloading packet
        // this miniport use this shared memory when OFFLAOD is on
        // 
        for (i = 0; i < LARGE_SEND_MEM_SIZE_OPTION; i++)
        {
            NdisMAllocateSharedMemory(
                Adapter->AdapterHandle,
                LargeSendSharedMemArray[i],
                FALSE,
                (PVOID *)&(Adapter->OffloadSharedMem.StartVa),
                &(Adapter->OffloadSharedMem.PhyAddr));
            if (Adapter->OffloadSharedMem.StartVa)
            {
                Adapter->OffloadSharedMemSize = LargeSendSharedMemArray[i];
                OffloadSharedMemSuccess = TRUE;
                Adapter->OffloadEnable = TRUE;

                break;
            }
        }
        //
        // The driver cannot allocate the shared memory used by offload, but it should 
        // NOT fail the initialization
        //
        if (OffloadSharedMemSuccess == FALSE)
        {

            DBGPRINT(MP_ERROR, ("Failed to allocate offload used memory\n"));
            Adapter->OffloadEnable = FALSE;
            
        }
#endif

        Status = NDIS_STATUS_SUCCESS;

    } while (FALSE);

    if (Status != NDIS_STATUS_SUCCESS)
    {
        NdisWriteErrorLogEntry(
            Adapter->AdapterHandle,
            NDIS_ERROR_CODE_OUT_OF_RESOURCES,
            1,
            ErrorValue);
    }

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲综合另类| 日本午夜一区二区| 日本精品视频一区二区| 91麻豆.com| 国产成人午夜片在线观看高清观看| 91.com在线观看| 亚洲超碰精品一区二区| 欧美亚洲综合色| 久久综合狠狠综合久久激情| 国产91精品精华液一区二区三区 | 久久精品免费看| 国产在线一区二区| 色综合天天综合在线视频| 欧美性感一区二区三区| 精品国产3级a| 国产精品污网站| 亚洲成av人片一区二区三区| 国产呦精品一区二区三区网站| 精品一区二区日韩| 精品在线播放免费| 91国偷自产一区二区使用方法| 欧美成人精品3d动漫h| 亚洲黄色尤物视频| 国产精品18久久久久久久网站| 91黄视频在线观看| 国产精品久久久久久久久久免费看 | 2023国产精品| 一区二区三区四区五区视频在线观看| 国产suv精品一区二区6| 美女视频网站久久| 国产一区激情在线| 青青草国产精品亚洲专区无| 国产在线观看一区二区| 欧美日韩高清影院| 国产精品乱人伦中文| 亚洲成人免费在线| 蜜臀a∨国产成人精品| 成人黄色一级视频| 风间由美性色一区二区三区| 免费成人美女在线观看.| 日本一区二区成人在线| 日韩午夜精品电影| 日韩一区二区三免费高清| 在线不卡的av| 制服丝袜亚洲色图| 国内精品写真在线观看| 欧美日本一道本在线视频| 亚洲免费看黄网站| eeuss鲁片一区二区三区 | 久久久高清一区二区三区| 日韩国产高清在线| 欧美美女一区二区三区| 亚洲v中文字幕| 欧美日韩日本视频| 午夜国产精品一区| 欧美一区二视频| 麻豆精品精品国产自在97香蕉| 日韩一区二区三区av| 亚洲国产精品一区二区久久恐怖片| 日本精品视频一区二区三区| 亚洲一区二三区| 正在播放一区二区| 另类小说欧美激情| 国产视频一区在线播放| 经典三级一区二区| 久久欧美一区二区| 精品国产三级电影在线观看| 久久久99久久| 国产三级欧美三级| 国产欧美日韩麻豆91| 亚洲综合成人在线视频| 久久精品国产网站| 亚洲欧洲一区二区三区| 国产精品亚洲成人| 一区二区三区免费在线观看| 久久一区二区三区国产精品| 欧洲一区二区三区免费视频| 精品在线免费视频| 亚洲丶国产丶欧美一区二区三区| 国产乱码精品一品二品| 91九色02白丝porn| 精品国产91洋老外米糕| 国产高清精品久久久久| 欧美人牲a欧美精品| 亚洲精品国产无天堂网2021 | 春色校园综合激情亚洲| 中文字幕一区在线| 国产综合色精品一区二区三区| 国产精品久久久久久久久久久免费看 | 欧美欧美欧美欧美| 国产精品1024| 首页亚洲欧美制服丝腿| 日本一区二区免费在线观看视频| 欧洲国内综合视频| 国产成人综合亚洲网站| 亚洲成人av电影在线| 国产视频一区二区在线| 欧美精品日日鲁夜夜添| 国产v综合v亚洲欧| 日韩专区中文字幕一区二区| 中文字幕乱码一区二区免费| 欧美一卡二卡三卡| 色婷婷av一区二区三区之一色屋| 精品亚洲aⅴ乱码一区二区三区| 色婷婷久久久久swag精品| 日韩高清一级片| 亚洲男人电影天堂| 欧美亚洲日本国产| 亚洲精品国产成人久久av盗摄 | 一二三四区精品视频| 欧美大片在线观看一区二区| 国产日韩欧美亚洲| 国产精品午夜在线| 三级精品在线观看| 国产精品综合二区| 欧美一激情一区二区三区| 欧美激情综合网| 亚洲免费av观看| 久久久久久久精| 国产亚洲欧美色| 91精品国产91久久综合桃花| 91社区在线播放| 成人av网在线| 国产黄色91视频| 久久99热狠狠色一区二区| 青青青伊人色综合久久| 国产精品电影院| 一区二区三区资源| 欧美精品三级在线观看| 国产精品毛片大码女人| 欧美激情自拍偷拍| 亚洲精品在线免费观看视频| 欧美亚洲综合色| 欧美极品xxx| 精品综合免费视频观看| 91在线视频官网| 91精品国产全国免费观看| 中文字幕免费不卡| 玖玖九九国产精品| 在线电影国产精品| 久久精品网站免费观看| 亚洲18女电影在线观看| 亚洲.国产.中文慕字在线| 日韩主播视频在线| 国内精品免费**视频| 4438x成人网最大色成网站| 一区二区三区四区亚洲| 日韩一区二区在线看片| 日本一区二区三区久久久久久久久不| 九九九久久久精品| 最近中文字幕一区二区三区| 精品国内片67194| 91久久香蕉国产日韩欧美9色| 青青草伊人久久| 亚洲三级小视频| 欧美乱熟臀69xxxxxx| 国产九色sp调教91| 国产精品久久久久久久久动漫 | 亚洲国产欧美另类丝袜| 蜜臀久久久久久久| 欧美一区国产二区| 久久99热99| 欧美电影免费观看完整版| 自拍偷拍欧美激情| 粉嫩av一区二区三区粉嫩| 欧美日精品一区视频| 国产福利一区在线| 国产精品国产三级国产普通话99 | 99久久婷婷国产| 国产精品久久精品日日| 欧洲一区在线观看| 国产麻豆精品95视频| 国内久久婷婷综合| 中文字幕精品—区二区四季| 一区二区三区视频在线看| 日韩美女视频一区二区| 精品国内二区三区| 欧美大尺度电影在线| 欧美tickle裸体挠脚心vk| 51午夜精品国产| 丁香婷婷综合激情五月色| 亚洲成人资源在线| 制服丝袜成人动漫| 国产精品资源网站| 首页亚洲欧美制服丝腿| 久久综合国产精品| 欧美午夜精品免费| www.欧美色图| 韩国欧美国产1区| 亚洲色图视频网| 精品免费国产二区三区| 成人精品在线视频观看| av一区二区不卡| 欧美亚洲一区二区三区四区| 日日夜夜免费精品视频| 国产午夜亚洲精品不卡| 欧美久久久久久久久中文字幕| 色天使久久综合网天天| 欧美老肥妇做.爰bbww| 色综合网色综合|