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

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

?? receive.c

?? HomePNA的Usb網卡驅動
?? C
字號:
/*++

Copyright (c) 1999  Microsoft Corporation

Module Name:

    receive.c  | usb NDIS Miniport Driver

Abstract:

    receive logic

Environment:

    kernel mode only

Notes:

  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  PURPOSE.

  Copyright (c) 1999 Microsoft Corporation.  All Rights Reserved.


Revision History:

--*/

#define BINARY_COMPATIBLE 1 // for win9x compatibility with ndis.h

#define DOBREAKS    // enable debug breaks

#include <ndis.h>
#include <ntddndis.h>  // defines OID's

#include "debug.h"
#include "common.h"
#include "usbndis.h"

/*****************************************************************************
*
*  Function:   ProcessData
*
*  Synopsis:   Copy our data to the appropriate buffer ,process
*              the USB header,  check for overrun,
*              deliver to the protocol
*
*  Arguments:  Device     - a pointer to the current ir device object
*              pRecBuf      - a pointer to a RCV_BUFFER struct
*
*  Returns:    STATUS_SUCCESS
*
*
*****************************************************************************/
NTSTATUS
ProcessData(
            IN PUSB_DEVICE        Device,
            IN PRCV_BUFFER      pRecBuf
            )
{
    //UCHAR    inboundHeader;
    NTSTATUS status = STATUS_SUCCESS;

    USB_DUMP( DBG_BUF,( pRecBuf->dataBuf,  pRecBuf->dataLen ) );


    //if ( pRecBuf->dataLen > Device->dongleCaps.dataSize + USB_USB_TOTAL_NON_DATA_SIZE )
    //{
        //
        // Reset the buffer for our next read.
        //
      //  Device->packetsReceivedOverflow++;
        //goto done;
    //}


    //inboundHeader = pRecBuf->dataBuf[0];


    // if fMediaBusy has been reset to 0 since last indication, set it

    /*if (  inboundHeader & INBOUND_HEADER_MEDIA_BUSY_BIT )
    {

        if ( FALSE == Device->fIndicatedMediaBusy )
        {
            InterlockedExchange( &Device->fMediaBusy, TRUE );
            InterlockedExchange( &Device->fIndicatedMediaBusy, TRUE );
            IndicateMediaBusy( Device );
        }
    }

    if ( pRecBuf->dataLen == 1 ){ // if no frame, link speed must be 0 ,bridge doc 5.4.1.2

        if ( 0 != ( inboundHeader & HEADER_LINK_SPEED_MASK )) {

            DEBUGMSG( DBG_ERR, ("   ( 0 != ( inboundHeader & HEADER_LINK_SPEED_MASK )) && ( pRecBuf->dataLen ==1 )\n"));
            ASSERT( 0 ); // bridge doc says this must be 0 if got header with no frame
        }
    }

    // we don't deliver the header to the protocol

    if ( pRecBuf->dataLen == 1 ) { // all we got was the header; this is possible
        goto done;

    }*/


    //
    // DeliverBuffer attempts to deliver the current
    // frame . If the ownership
    // of the packet is retained by the protocol, the
    // DeliverBuffer routine gives us a new receive
    // buffer.
    //

    status = DeliverBuffer(
                    Device,
                    pRecBuf
                    );


//done:
    DEBUGMSG(DBG_FUNC, ("-ProcessData\n"));

    return status;
}

/*****************************************************************************
*
*  Function:   MiniportReturnPacket
*
*  Synopsis:   The protocol returns ownership of a receive packet to
*              the usb device object.
*
*  Arguments:  Context         - a pointer to the current usb device obect.
*              pReturnedPacket - a pointer the packet which the protocol
*                                is returning ownership.
*
*  Returns:    None.
*
*
*
*****************************************************************************/
VOID
MiniportReturnPacket(
            IN NDIS_HANDLE  Context,
            IN PNDIS_PACKET pReturnedPacket
            )
{
    PUSB_DEVICE   device;
    PNDIS_BUFFER pBuffer;
    PRCV_BUFFER  pRecBuffer;
    UINT         Index;
    BOOLEAN      found = FALSE;


    DEBUGONCE(DBG_FUNC, ("+MiniportReturnPacket\n"));
    //
    // The context is just the pointer to the current ir device object.
    //

    device = CONTEXT_TO_DEV(Context);

    NdisInterlockedIncrement( (PLONG) &device->packetsReceived);

    //
    // Sear
    //ch the queue to find the right packet.

    for(Index=0;Index < NUM_RCV_BUFS;Index ++)
	{
        pRecBuffer = &(device->rcvBufs[Index]);

        if( ((PNDIS_PACKET) pRecBuffer->packet) ==  pReturnedPacket )
		{
            ProcessReturnPacket(device, pRecBuffer);
            found = TRUE;
            break;
        }
    }

    //
    // Ensure that the packet was found.
    //

    ASSERT( found );


    DEBUGMSG(DBG_FUNC, ("-MiniportReturnPacket\n"));

    return;
}

VOID ProcessReturnPacket(PUSB_DEVICE Device,
                         PRCV_BUFFER pReceiveBuffer)
{
    PNDIS_BUFFER pBuffer;

    DEBUGONCE(DBG_FUNC, ("+ProcessReturnPacket\n"));


    NdisUnchainBufferAtFront( (PNDIS_PACKET) pReceiveBuffer->packet, &pBuffer);

    ASSERT( pBuffer );

    if (pBuffer) {
        NdisFreeBuffer( pBuffer );
    }

    
    InterlockedExchange( &pReceiveBuffer->dataLen, 0);

    InterlockedExchange( (PULONG)&pReceiveBuffer->state, STATE_FREE);

    DEBUGMSG(DBG_FUNC, ("-ProcessReturnPacket\n"));

}
PRCV_BUFFER GetRcvBuf(
            PUSB_DEVICE Device,
               OUT UINT *pIndex,
      IN rcvBufferState state  // state to set to if found
                      )
{
    UINT    Index;
    PRCV_BUFFER pBuf = NULL;

    DEBUGMSG(DBG_FUNC, (" +GetRcvBuf()\n"));


    for(Index=0;Index < NUM_RCV_BUFS; Index++)
	{
        if( Device->rcvBufs[Index].state == STATE_FREE )
		{
            InterlockedExchange( (PULONG)&Device->rcvBufs[Index].state, (ULONG)state ); // set to input state

            *pIndex = Index;//RcvBuff number

            InterlockedExchange(  &Device->RcvBuffersInUse, Index+1);

            pBuf = &(Device->rcvBufs[*pIndex]);

            break;
        }
    }

    DEBUGMSG(DBG_FUNC, (" -GetRcvBuf()\n"));

    return pBuf;
}


/*****************************************************************************
*
*  Function:   DeliverBuffer
*
*  Synopsis:   Delivers the buffer to the protocol via
*              NdisMIndicateReceivePacket.
*
*  Arguments:  Device - pointer to the current ir device object
*
*  Returns:    STATUS_SUCCESS      - on success
*              STATUS_UNSUCCESSFUL - if packet can't be delivered to protocol
*
*
*
*****************************************************************************/

NTSTATUS
DeliverBuffer(
            IN  PUSB_DEVICE Device,
            IN  PRCV_BUFFER pRecBuf
            )
{
    PNDIS_BUFFER    pBuffer;
    NTSTATUS        status = STATUS_SUCCESS;
    PNDIS_BUFFER    Buffer;
    NDIS_STATUS        Status;

    NdisAllocateBuffer(
        &Status,
        &Buffer,
        Device->hBufferPool,
        pRecBuf->dataBuf,  // don't give header to protocol
        pRecBuf->dataLen  // don't give header to protocol
        );
    
    NdisChainBufferAtFront( (PNDIS_PACKET) pRecBuf->packet, Buffer);

    //
    // Fix up some other packet fields.
    //

    //  remember, we stripped the inbound header, so we only account for A and C fields
    /*NDIS_SET_PACKET_HEADER_SIZE(
                (PNDIS_PACKET) pRecBuf->packet,
                USB_CONTROL_FIELD_SIZE + USB_ADDRESS_FIELD_SIZE
                );*/

    //
    // Set the packet status to SUCCESS
    //
    NDIS_SET_PACKET_STATUS((PNDIS_PACKET) pRecBuf->packet, NDIS_STATUS_SUCCESS);     //for debug
    //
    // Indicate the packet to NDIS.
    //

    NdisMIndicateReceivePacket(
                Device->hNdisAdapter,
                &((PNDIS_PACKET) pRecBuf->packet),
                1
                );


    DEBUGMSG(DBG_FUNC, ("-DeliverBuffer\n"));
    return status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品tushy高清| 欧美三级电影在线观看| 日本人妖一区二区| 亚洲一区二区三区中文字幕| 国产精品剧情在线亚洲| 久久久久久久久97黄色工厂| 精品999在线播放| 欧美大片日本大片免费观看| 欧美浪妇xxxx高跟鞋交| 欧美日韩久久一区| 91精品国产黑色紧身裤美女| 在线播放/欧美激情| 91麻豆精品国产91久久久| 欧美男人的天堂一二区| 日韩欧美自拍偷拍| 精品欧美黑人一区二区三区| 久久久久久久久久久电影| 国产亚洲综合在线| 亚洲欧美在线aaa| 亚洲欧美经典视频| 亚洲一区二区四区蜜桃| 毛片不卡一区二区| 国产一区二区三区在线观看免费视频| 精品在线免费观看| 国产乱理伦片在线观看夜一区| 国产福利一区在线观看| 91污片在线观看| 欧美专区日韩专区| 宅男在线国产精品| 久久久无码精品亚洲日韩按摩| 国产精品视频看| 亚洲国产成人av| 精品在线观看视频| 91网站最新地址| 精品久久久网站| 国产精品视频免费看| 亚洲第一成年网| 国产xxx精品视频大全| 91麻豆高清视频| 5566中文字幕一区二区电影| 国产偷国产偷亚洲高清人白洁| 综合av第一页| 免费在线欧美视频| 成人sese在线| 日韩亚洲电影在线| 中文字幕在线不卡一区二区三区| 亚洲福利国产精品| 粉嫩av一区二区三区粉嫩| 欧美日韩卡一卡二| 亚洲视频在线一区| 久久精品国产99久久6| www.日韩大片| 精品国产第一区二区三区观看体验| 免费的成人av| 成人aa视频在线观看| 欧美一区二区三区男人的天堂| 中文av字幕一区| 精品一区二区三区的国产在线播放| 91久久精品国产91性色tv | 精品成人免费观看| 亚洲第一二三四区| 99久久精品国产精品久久| 精品久久久久香蕉网| 亚洲444eee在线观看| 成人福利在线看| 久久网站最新地址| 丝袜诱惑制服诱惑色一区在线观看 | 欧美日韩国产bt| 亚洲婷婷在线视频| 国产·精品毛片| 久久一日本道色综合| 亚洲大型综合色站| 色综合久久久久久久| 欧美国产欧美亚州国产日韩mv天天看完整 | 色系网站成人免费| 国产精品青草综合久久久久99| 久久精品72免费观看| 欧美日韩电影在线播放| 亚洲大型综合色站| 欧美日韩精品欧美日韩精品一| 亚洲精品少妇30p| av中文字幕一区| 中文字幕不卡三区| 国产69精品久久99不卡| 国产三区在线成人av| 国产美女精品一区二区三区| 欧美一级黄色大片| 毛片av一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 亚洲午夜免费视频| 欧美日韩精品免费| 水野朝阳av一区二区三区| 日韩视频在线一区二区| 蜜臀a∨国产成人精品| 精品国内二区三区| 国产东北露脸精品视频| 国产精品不卡一区| 97久久久精品综合88久久| 亚洲久草在线视频| 欧美色涩在线第一页| 亚洲五月六月丁香激情| 欧美三级日本三级少妇99| 偷窥国产亚洲免费视频| 欧美一区午夜精品| 国产一区二区在线观看免费| 青青草原综合久久大伊人精品优势| 欧美三级一区二区| 免费日韩伦理电影| 日本一区二区三区四区| 99视频精品在线| 日韩精品国产精品| 久久婷婷国产综合精品青草 | 欧美午夜不卡在线观看免费| 无码av中文一区二区三区桃花岛| 日韩欧美国产一区二区在线播放| 国产乱妇无码大片在线观看| 亚洲欧美日韩一区二区 | 欧美性感一区二区三区| 另类小说一区二区三区| 欧美国产乱子伦| 欧美日韩免费观看一区二区三区| 日韩国产欧美视频| 国产精品久久免费看| 在线免费观看不卡av| 久久er精品视频| 国产精品高潮久久久久无| 精品视频一区二区不卡| 国产揄拍国内精品对白| 亚洲激情欧美激情| 欧美sm美女调教| 91极品视觉盛宴| 国产成人久久精品77777最新版本| 亚洲一区二区三区美女| 精品国产免费一区二区三区四区| 91视频你懂的| 国产一区二区三区精品视频 | 亚洲国产精品99久久久久久久久| 欧美在线观看18| 国产精品亚洲人在线观看| 国产成人亚洲精品青草天美| 图片区小说区国产精品视频| 亚洲欧洲精品一区二区精品久久久| 欧美电影在哪看比较好| 99国产麻豆精品| 国产精品正在播放| 日韩精品成人一区二区三区| 亚洲精品国久久99热| 久久理论电影网| 日韩视频在线永久播放| 欧美放荡的少妇| 欧美性受xxxx黑人xyx性爽| 91在线观看污| 9i看片成人免费高清| 国产一区美女在线| 日韩国产欧美视频| 日韩欧美电影一区| 欧美色图在线观看| 国产呦萝稀缺另类资源| 中文字幕字幕中文在线中不卡视频| 日韩区在线观看| 欧美视频中文一区二区三区在线观看| 成熟亚洲日本毛茸茸凸凹| 精品在线免费观看| 老司机午夜精品99久久| 三级欧美在线一区| 天天综合天天做天天综合| 亚洲一区二区在线视频| 亚洲天堂成人在线观看| 国产精品久久久久三级| 国产精品午夜在线观看| 久久免费电影网| 久久久午夜精品| 国产精品乱码一区二区三区软件| 国产欧美日韩卡一| 国产欧美日韩综合| 中文欧美字幕免费| 亚洲欧洲精品一区二区三区| 亚洲免费观看高清完整| 亚洲成人在线免费| 麻豆国产精品官网| 成人网在线免费视频| 91视频精品在这里| 在线播放欧美女士性生活| 日韩一区二区三区观看| 国产午夜久久久久| 亚洲视频在线一区二区| 午夜国产精品一区| 捆绑紧缚一区二区三区视频| 国产激情一区二区三区| 成人国产精品免费观看视频| www.欧美日韩| 欧美午夜精品一区二区蜜桃| 日韩亚洲欧美成人一区| 国产视频911| 一个色在线综合| 亚洲1区2区3区视频| 国产一区二区三区观看| 99国产精品国产精品久久| 欧美在线观看一区| 91精品国产麻豆国产自产在线|