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

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

?? card.c

?? 使用網絡驅動器接口標準開發的ne2000網卡的NT驅動.
?? C
?? 第 1 頁 / 共 5 頁
字號:

            //
            // Set direction (Read)
            //

            NdisRawWritePortUchar(
                           Adapter->IoPAddr + NIC_COMMAND,
                           CR_START | CR_PAGE0 | CR_DMA_READ
                          );

            NdisRawReadPortUshort(
                           Adapter->IoPAddr + NIC_RACK_NIC,
                           &Tmp
                           );

            *TargetBuffer = MSB(Tmp);

            //
            // Wait for DMA to complete
            //

            Count = 0xFFFF;

            while (Count) {

                NdisRawReadPortUchar(
                              Adapter->IoPAddr + NIC_INTR_STATUS,
                              &IsrValue
                             );

                if (IsrValue & ISR_DMA_DONE) {

                    break;

                } else {

                    Count--;

                    NdisStallExecution(4);

                }

#if DBG
                if (!(IsrValue & ISR_DMA_DONE)) {

                    DbgPrint("CopyUpDMA didn't finish!");

                }
#endif // DBG

            }

            SourceBuffer++;
            TargetBuffer++;
            BufferLength--;
        }

        //
        // Set Count and destination address
        //

        NdisRawWritePortUchar(
                           Adapter->IoPAddr + NIC_RMT_ADDR_LSB,
                           LSB(PtrToUlong(SourceBuffer))
                          );

        NdisRawWritePortUchar(
                           Adapter->IoPAddr + NIC_RMT_ADDR_MSB,
                           MSB(PtrToUlong(SourceBuffer))
                          );

// NE2000 PCMCIA CHANGE!!!  start

//        NdisRawWritePortUchar(
//            Adapter->IoPAddr + NIC_RMT_COUNT_LSB,
//            LSB(BufferLength)
//        );
//
//        NdisRawWritePortUchar(
//            Adapter->IoPAddr + NIC_RMT_COUNT_MSB,
//            MSB(BufferLength)
//        );

        if (BufferLength & 1)
        {
            NdisRawWritePortUchar(
                Adapter->IoPAddr + NIC_RMT_COUNT_LSB,
                LSB(BufferLength + 1)
            );

            NdisRawWritePortUchar(
                Adapter->IoPAddr + NIC_RMT_COUNT_MSB,
                MSB(BufferLength + 1)
            );
        }
        else
        {
            NdisRawWritePortUchar(
                Adapter->IoPAddr + NIC_RMT_COUNT_LSB,
                LSB(BufferLength)
            );

            NdisRawWritePortUchar(
                Adapter->IoPAddr + NIC_RMT_COUNT_MSB,
                MSB(BufferLength)
            );
        }

// NE2000 PCMCIA CHANGE!!!  end


        //
        // Set direction (Read)
        //

        NdisRawWritePortUchar(
                       Adapter->IoPAddr + NIC_COMMAND,
                       CR_START | CR_PAGE0 | CR_DMA_READ
                      );

        //
        // Read words from port
        //

        NdisRawReadPortBufferUshort(
                       Adapter->IoPAddr + NIC_RACK_NIC,
                       (PUSHORT)TargetBuffer,
                       (BufferLength >> 1));

        //
        // Read trailing byte (if necessary)
        //

        if (BufferLength & 1) {

            TargetBuffer += (BufferLength - 1);

// NE2000 PCMCIA CHANGE!!!  start

            //NdisRawReadPortUchar(
            //    Adapter->IoPAddr + NIC_RACK_NIC,
            //    TargetBuffer
            //);

            NdisRawReadPortUshort(
                Adapter->IoPAddr + NIC_RACK_NIC,
                &Tmp
            );

            *TargetBuffer = LSB(Tmp);

// NE2000 PCMCIA CHANGE!!!  end
        }

    }

    //
    // Wait for DMA to complete
    //

    Count = 0xFFFF;

    while (Count) {

        NdisRawReadPortUchar(
                      Adapter->IoPAddr + NIC_INTR_STATUS,
                      &IsrValue
                     );

        if (IsrValue & ISR_DMA_DONE) {

            break;

        } else {

            Count--;

            NdisStallExecution(4);

        }

    }

#if DBG
    if (!(IsrValue & ISR_DMA_DONE)) {

        DbgPrint("CopyUpDMA didn't finish!\n");

    }

    IF_LOG(Ne2000Log('<');)

#endif // DBG

    return TRUE;

}

ULONG
CardComputeCrc(
    IN PUCHAR Buffer,
    IN UINT Length
    )

/*++

Routine Description:

    Runs the AUTODIN II CRC algorithm on buffer Buffer of
    length Length.

Arguments:

    Buffer - the input buffer

    Length - the length of Buffer

Return Value:

    The 32-bit CRC value.

Note:

    This is adapted from the comments in the assembly language
    version in _GENREQ.ASM of the DWB NE1000/2000 driver.

--*/

{
    ULONG Crc, Carry;
    UINT i, j;
    UCHAR CurByte;

    Crc = 0xffffffff;

    for (i = 0; i < Length; i++) {

        CurByte = Buffer[i];

        for (j = 0; j < 8; j++) {

            Carry = ((Crc & 0x80000000) ? 1 : 0) ^ (CurByte & 0x01);

            Crc <<= 1;

            CurByte >>= 1;

            if (Carry) {

                Crc = (Crc ^ 0x04c11db6) | Carry;

            }

        }

    }

    return Crc;

}


VOID
CardGetMulticastBit(
    IN UCHAR Address[NE2000_LENGTH_OF_ADDRESS],
    OUT UCHAR * Byte,
    OUT UCHAR * Value
    )

/*++

Routine Description:

    For a given multicast address, returns the byte and bit in
    the card multicast registers that it hashes to. Calls
    CardComputeCrc() to determine the CRC value.

Arguments:

    Address - the address

    Byte - the byte that it hashes to

    Value - will have a 1 in the relevant bit

Return Value:

    None.

--*/

{
    ULONG Crc;
    UINT BitNumber;

    //
    // First compute the CRC.
    //

    Crc = CardComputeCrc(Address, NE2000_LENGTH_OF_ADDRESS);


    //
    // The bit number is now in the 6 most significant bits of CRC.
    //

    BitNumber = (UINT)((Crc >> 26) & 0x3f);

    *Byte = (UCHAR)(BitNumber / 8);
    *Value = (UCHAR)((UCHAR)1 << (BitNumber % 8));
}

VOID
CardFillMulticastRegs(
    IN PNE2000_ADAPTER Adapter
    )

/*++

Routine Description:

    Erases and refills the card multicast registers. Used when
    an address has been deleted and all bits must be recomputed.

Arguments:

    Adapter - pointer to the adapter block

Return Value:

    None.

--*/

{
    UINT i;
    UCHAR Byte, Bit;

    //
    // First turn all bits off.
    //

    for (i=0; i<8; i++) {

        Adapter->NicMulticastRegs[i] = 0;

    }

    //
    // Now turn on the bit for each address in the multicast list.
    //

    for ( ; i > 0; ) {

        i--;

        CardGetMulticastBit(Adapter->Addresses[i], &Byte, &Bit);

        Adapter->NicMulticastRegs[Byte] |= Bit;

    }

}








BOOLEAN SyncCardStop(
    IN PVOID SynchronizeContext
)

/*++

Routine Description:

    Sets the NIC_COMMAND register to stop the card.

Arguments:

    SynchronizeContext - pointer to the adapter block

Return Value:

    TRUE if the power has failed.

--*/

{
    PNE2000_ADAPTER Adapter = ((PNE2000_ADAPTER)SynchronizeContext);

    NdisRawWritePortUchar(
        Adapter->IoPAddr + NIC_COMMAND,
        CR_STOP | CR_NO_DMA
    );

    return(FALSE);
}

VOID
CardStartXmit(
    IN PNE2000_ADAPTER Adapter
    )

/*++

Routine Description:

    Sets the NIC_COMMAND register to start a transmission.
    The transmit buffer number is taken from Adapter->CurBufXmitting
    and the length from Adapter->PacketLens[Adapter->CurBufXmitting].

Arguments:

    Adapter - pointer to the adapter block

Return Value:

    TRUE if the power has failed.

--*/

{
    UINT Length = Adapter->PacketLens[Adapter->CurBufXmitting];
    UCHAR Tmp;

    //
    // Prepare the NIC registers for transmission.
    //

    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_XMIT_START,
        (UCHAR)(Adapter->NicXmitStart + (UCHAR)(Adapter->CurBufXmitting*BUFS_PER_TX)));

    //
    // Pad the length to 60 (plus CRC will be 64) if needed.
    //

    if (Length < 60) {

        Length = 60;

    }

    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_XMIT_COUNT_MSB, MSB(Length));
    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_XMIT_COUNT_LSB, LSB(Length));

    //
    // Start transmission, check for power failure first.
    //

    NdisRawReadPortUchar(Adapter->IoPAddr+NIC_COMMAND, &Tmp);
    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_COMMAND,
            CR_START | CR_XMIT | CR_NO_DMA);

    IF_LOG( Ne2000Log('x');)

}

BOOLEAN
SyncCardGetCurrent(
    IN PVOID SynchronizeContext
    )

/*++

Routine Description:

    Gets the value of the CURRENT NIC register and stores it in Adapter->Current

Arguments:

    SynchronizeContext - pointer to the adapter block

Return Value:

    None.

--*/

{
    PNE2000_ADAPTER Adapter = ((PNE2000_ADAPTER)SynchronizeContext);

    //
    // Have to go to page 1 to read this register
    //

    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_COMMAND,
                       CR_START | CR_NO_DMA | CR_PAGE1);

    NdisRawReadPortUchar(Adapter->IoPAddr+NIC_CURRENT,
                       &Adapter->Current);

    NdisRawWritePortUchar(Adapter->IoPAddr+NIC_COMMAND,
                       CR_START | CR_NO_DMA | CR_PAGE0);

    return FALSE;

}

BOOLEAN
SyncCardGetXmitStatus(
    IN PVOID SynchronizeContext
    )

/*++

Routine Description:

    Gets the value of the "transmit status" NIC register and stores
    it in Adapter->XmitStatus.

Arguments:

    SynchronizeContext - pointer to the adapter block

Return Value:

    None.

--*/

{
    PNE2000_ADAPTER Adapter = ((PNE2000_ADAPTER)SynchronizeContext);

    NdisRawReadPortUchar( Adapter->IoPAddr+NIC_XMIT_STATUS, &Adapter->XmitStatus);

    return FALSE;

}

VOID
CardSetBoundary(
    IN PNE2000_ADAPTER Adapter
    )

/*++

Routine Description:

    Sets the value of the "boundary" NIC register to one behind
    Adapter->NicNextPacket, to prevent packets from being received
    on top of un-indicated ones.

Arguments:

    Adapter - pointer to the adapter block

Return Value:

    None.

--*/

{
    //
    // Have to be careful with "one behind NicNextPacket" when
    // NicNextPacket is the first buffer in receive area.
    //

    if (Adapter->NicNextPacket == Adapter->NicPageStart) {

        NdisRawWritePortUchar( Adapter->IoPAddr+NIC_BOUNDARY,
                    (UCHAR)(Adapter->NicPageStop-(UCHAR)1));

    } else {

        NdisRawWritePortUchar( Adapter->IoPAddr+NIC_BOUNDARY,
                    (UCHAR)(Adapter->NicNextPacket-(UCHAR)1));

    }

}

BOOLEAN
SyncCardSetReceiveConfig(
    IN PVOID SynchronizeContext
    )

/*++

Routine Description:

    Sets the value of the "receive configuration" NIC register to

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆高清免费国产一区| 日韩女优制服丝袜电影| 99在线精品视频| 97se亚洲国产综合自在线| 久久精品夜色噜噜亚洲aⅴ| 日韩欧美成人激情| 精品成人一区二区三区四区| 国产欧美一区二区在线| 亚洲六月丁香色婷婷综合久久| 狠狠狠色丁香婷婷综合久久五月| 国模套图日韩精品一区二区| 国产精品美女久久久久久久久 | 美女视频一区在线观看| 欧美日韩一区中文字幕| 久久夜色精品一区| 欧美日韩一区三区四区| 国产欧美一区二区精品秋霞影院 | 国产精品乱码妇女bbbb| 亚洲色图清纯唯美| 久久国产综合精品| 91精品国产欧美一区二区| 欧美电视剧在线看免费| 欧美一级日韩免费不卡| 欧美最新大片在线看| **性色生活片久久毛片| 2021国产精品久久精品| 精品国产一区二区三区av性色| 久久精品国内一区二区三区| 欧美一区二区三区精品| 欧美伊人久久久久久午夜久久久久| 国产亚洲美州欧州综合国| 91麻豆精品国产91久久久久| 色婷婷综合视频在线观看| 岛国精品在线观看| 最近日韩中文字幕| 97久久精品人人做人人爽50路| 成人性生交大合| 中文字幕国产一区| 欧美日韩成人综合天天影院| 日韩综合小视频| 奇米影视一区二区三区| 日韩欧美国产一区二区在线播放| 日韩精品专区在线| 91浏览器入口在线观看| 亚洲最色的网站| 日韩欧美中文字幕公布| 国产色综合一区| 亚洲成人av福利| 久久精品无码一区二区三区| 国产精品小仙女| 成人高清伦理免费影院在线观看| 色婷婷av一区二区三区之一色屋| 日韩视频中午一区| 亚洲精选视频免费看| 日韩精品一区二区三区视频播放| 九九**精品视频免费播放| 一区二区三区**美女毛片| 国产一区二区福利| 欧美午夜理伦三级在线观看| 成人爱爱电影网址| 高清不卡一二三区| 制服丝袜日韩国产| 亚欧色一区w666天堂| 一区二区成人在线观看| av不卡免费电影| 日本一区二区动态图| 欧美国产1区2区| 国产麻豆精品视频| 久久一二三国产| 国产精品亚洲人在线观看| 精品电影一区二区| 国产精品久久99| av成人动漫在线观看| 欧美在线观看你懂的| 一区二区三区四区五区视频在线观看 | 国产精品久久久久久久岛一牛影视 | 亚洲国产高清在线观看视频| 又紧又大又爽精品一区二区| 亚洲视频在线一区二区| 欧美无人高清视频在线观看| 在线观看91精品国产麻豆| 亚洲电影激情视频网站| 在线成人av影院| 国产精品性做久久久久久| 2020国产精品| 亚洲欧美日韩在线| 久久av老司机精品网站导航| 久久久久国产精品人| 91精品福利在线| 欧美大片日本大片免费观看| 中日韩免费视频中文字幕| 欧美天堂一区二区三区| 久久精品一区二区三区四区| 91麻豆精品国产无毒不卡在线观看| 国产做a爰片久久毛片| 午夜天堂影视香蕉久久| 国产传媒久久文化传媒| 亚洲成年人影院| 91精选在线观看| 欧美视频一区二区| aaa欧美色吧激情视频| 久久99精品国产91久久来源| 日韩精品一二三区| 日本黄色一区二区| 国产欧美一区在线| 欧美一级在线观看| 蜜桃视频第一区免费观看| 亚洲欧美国产三级| 亚洲欧美激情小说另类| 一本色道久久综合亚洲aⅴ蜜桃 | aa级大片欧美| 国产精品伦理一区二区| 成人av资源网站| 日韩毛片精品高清免费| 国产欧美精品一区二区色综合朱莉| 欧美一级欧美三级在线观看| 国产精品色一区二区三区| 亚洲欧洲成人精品av97| 91黄视频在线| 日精品一区二区| 国产精品麻豆久久久| 亚洲色图.com| 丝袜美腿亚洲综合| 欧美成人精品高清在线播放 | 视频一区二区三区中文字幕| 蜜臀久久久久久久| 国产精品久久久99| 在线观看日产精品| 狠狠网亚洲精品| 一区二区三区自拍| 欧美一区二区人人喊爽| 精品亚洲国产成人av制服丝袜 | 久久久不卡网国产精品一区| 精品少妇一区二区三区在线视频| 久久久夜色精品亚洲| 在线精品视频免费观看| 亚洲国产中文字幕| 欧美精选午夜久久久乱码6080| 日韩视频国产视频| 亚洲免费资源在线播放| 欧美极品xxx| 久久99国产精品免费| 亚洲不卡在线观看| 色婷婷综合在线| www.亚洲色图| 中文字幕一区在线观看视频| 91精品国产品国语在线不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 狂野欧美性猛交blacked| 亚洲高清一区二区三区| 亚洲免费观看在线观看| 成人黄色网址在线观看| 国产一区二区不卡在线| 久久综合资源网| 欧美一卡二卡三卡四卡| 337p亚洲精品色噜噜噜| 亚洲综合色成人| 亚洲第一狼人社区| 亚洲成av人综合在线观看| 一二三四区精品视频| 欧美日韩一区高清| 天堂资源在线中文精品| 欧美一区二区久久| 成人激情动漫在线观看| 日本韩国欧美一区| 欧美日韩国产影片| 久久综合九色综合欧美就去吻| 日韩一区二区免费视频| 国内精品在线播放| 亚洲男同性恋视频| 精品日韩在线观看| 亚洲欧美在线高清| 91精品欧美福利在线观看| 久久美女艺术照精彩视频福利播放| 国产在线麻豆精品观看| 亚洲欧洲日本在线| 成人网在线播放| 亚洲一二三四区不卡| 2014亚洲片线观看视频免费| 欧美日韩视频一区二区| 1区2区3区精品视频| 日韩成人免费在线| 一区二区视频在线| 久久网这里都是精品| 香蕉成人伊视频在线观看| 亚洲精品第1页| 最新热久久免费视频| 精品成人一区二区| 日韩精品一区二区三区四区| 欧美三级乱人伦电影| 国产精品嫩草99a| 经典三级视频一区| 免费欧美在线视频| 免费看日韩a级影片| 欧美高清性hdvideosex| 在线免费不卡电影| 亚洲一区二区视频| 91黄色免费网站| 欧美一区二区三区精品| 视频一区免费在线观看|