⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtsnt.c

📁 虚拟网络驱动程序ndis for 数字电视 ip 数据接收
💻 C
📖 第 1 页 / 共 5 页
字号:
				}
			}
			else*/
			{
				GenericULong = (ULONG)(1000000);
			}
            break;

        case OID_GEN_TRANSMIT_BUFFER_SPACE:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BUFFER_SPACE !\n");
#endif
            GenericULong = (ULONG)( MAX_WRITE_BUFS * TX_BUF_SIZE);
            break;

        case OID_GEN_RECEIVE_BUFFER_SPACE:
#if DBG
            //DbgPrint("*** OID_GEN_RECEIVE_BUFFER_SPACE !\n");
#endif
            GenericULong = (ULONG)(RX_BUF_SIZE);
            // GenericULong = (ULONG)(0x2000 - (Adapter->NumBuffers * TX_BUF_SIZE));
            break;

        case OID_GEN_TRANSMIT_BLOCK_SIZE:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
            GenericULong = (ULONG)(TX_BUF_SIZE);
            break;

        case OID_GEN_RECEIVE_BLOCK_SIZE:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif

            GenericULong = (ULONG)(256);

            break;


        case OID_GEN_VENDOR_ID:
#if DBG
            DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif

            GenericULong = Adapter->PermanentAddress[0] << 24;
            GenericULong = GenericULong + (Adapter->PermanentAddress[1] << 16);
            GenericULong = GenericULong + (Adapter->PermanentAddress[2] << 8);

            GenericULong &= 0xFFFFFF00;
            MoveSource = (PVOID)(&GenericULong);
            MoveBytes = sizeof(GenericULong);
            break;

        case OID_GEN_VENDOR_DESCRIPTION:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
            MoveSource = (PVOID)(VER_FILEDESCRIPTION_STR);
            MoveBytes = sizeof(VER_FILEDESCRIPTION_STR);
            break;

        case OID_GEN_DRIVER_VERSION:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif
            GenericUShort = ((USHORT)RTFAST_NDIS_MAJOR_VERSION << 8) |
                    RTFAST_NDIS_MINOR_VERSION;

            MoveSource = (PVOID)(&GenericUShort);
            MoveBytes = sizeof(GenericUShort);
            break;

        case OID_GEN_VENDOR_DRIVER_VERSION:
#if DBG
            //DbgPrint("*** OID_GEN_TRANSMIT_BLOCK_SIZE !\n");
#endif

            GenericULong = (ULONG)( (VER_FILEVERSION_High << 16) | VER_FILEVERSION_Low );

            break;

        case OID_GEN_MEDIA_CONNECT_STATUS:
#if 0
            DbgPrint("*** OID_GEN_MEDIA_CONNECT_STATUS !");
#endif
			//if(Adapter->LinkStatus == LINK_CONNECT)
				GenericULong = NdisMediaStateConnected;
			//else
			//	GenericULong = NdisMediaStateDisconnected;

/*            if( Adapter->NwayInProgress )
            {
                GenericULong = NdisMediaStateConnected;
#if DBG
                DbgPrint("*** Nway in progress:up !\n");
#endif
            }
            else
            {
                if(Adapter->MediaLinkStatus == NDIS_STATUS_MEDIA_CONNECT)
                {                           //Link OK
                    GenericULong = NdisMediaStateConnected;
#if DBG
                    DbgPrint("*** :up !\n");
#endif
                }
                else                    //Link Fail
                {
                    GenericULong = NdisMediaStateDisconnected;
#if DBG
                    DbgPrint("*** down:up !\n");
#endif
                }
            }
*/
            break;

        case OID_GEN_CURRENT_LOOKAHEAD:
#if DBG
            //DbgPrint("*** OID_GEN_CURRENT_LOOKAHEAD!\n");
#endif
            GenericULong = (ULONG)(Adapter->MaxLookAhead);
            break;

        case OID_802_3_PERMANENT_ADDRESS:
#if DBG
            //DbgPrint("*** OID_802_3_PERMANENT_ADDRESS !\n");
#endif

            RTFAST_MOVE_MEM((PCHAR)GenericArray,
                    Adapter->PermanentAddress,
                    RTFAST_LENGTH_OF_ADDRESS);

            MoveSource = (PVOID)(GenericArray);
            MoveBytes = sizeof(Adapter->PermanentAddress);
            break;

        case OID_802_3_CURRENT_ADDRESS:
#if DBG
            DbgPrint("*** OID_802_3_CURRENT_ADDRESS !\n");
#endif
            //CardReadEthernetAddress(Adapter);
            RTFAST_MOVE_MEM((PCHAR)GenericArray,
                    Adapter->StationAddress,
                    RTFAST_LENGTH_OF_ADDRESS);

            MoveSource = (PVOID)(GenericArray);
            MoveBytes = sizeof(Adapter->StationAddress);
            break;

        case OID_802_3_MAXIMUM_LIST_SIZE:
#if DBG
            //DbgPrint("*** OID_802_3_MAXIMUM_LIST_SIZE !\n");
#endif

            GenericULong = (ULONG) (Adapter->MulticastListMax);
            break;

        case OID_GEN_XMIT_OK:
#if DBG
            //DbgPrint("*** OID_GEN_XMIT_OK !\n");
#endif
            GenericULong = (UINT)(Adapter->FramesXmitGood);
            break;

        case OID_GEN_RCV_OK:
#if DBG
            //DbgPrint("*** OID_GEN_RCV_OK !\n");
#endif
            GenericULong = (UINT)(Adapter->FramesRcvGood);
            break;

        case OID_GEN_XMIT_ERROR:
#if DBG
            //DbgPrint("*** OID_GEN_XMIT_ERROR !\n");
#endif
            GenericULong = (UINT)(Adapter->FramesXmitBad);
            break;

        case OID_GEN_RCV_CRC_ERROR:
        case OID_GEN_RCV_ERROR:
#if DBG
            //DbgPrint("*** OID_GEN_RCV_CRC_ERROR !\n");
#endif
            GenericULong = (UINT)(Adapter->CrcErrors);
            break;

        case OID_GEN_RCV_NO_BUFFER:
#if DBG
            //DbgPrint("*** OID_GEN_RCV_NO_BUFFER !\n");
#endif
            GenericULong = (UINT)(Adapter->MissedPackets);
            break;

        case OID_GEN_DIRECTED_BYTES_XMIT:
#if DBG
            //DbgPrint("*** OID_GEN_DIRECTED_BYTES_XMIT !\n");
#endif
            MoveSource = (PVOID)(&(Adapter->TotalTransmitBytes.LowPart));
            MoveBytes = sizeof(RTL_LARGE_INTEGER);
            break;

        case OID_GEN_DIRECTED_BYTES_RCV:
#if DBG
            //DbgPrint("*** OID_GEN_DIRECTED_BYTES_RCV !\n");
#endif
            MoveSource = (PVOID)(&(Adapter->TotalReceiveBytes.LowPart));
            MoveBytes = sizeof(RTL_LARGE_INTEGER);
            break;

        case OID_802_3_RCV_ERROR_ALIGNMENT:
#if DBG
            //DbgPrint("*** OID_802_3_RCV_ERROR_ALIGNMENT !\n");
#endif
            GenericULong = (UINT)(Adapter->FrameAlignmentErrors);
            break;

        case OID_802_3_XMIT_ONE_COLLISION:
#if DBG
            //DbgPrint("*** OID_802_3_XMIT_ONE_COLLISION !\n");
#endif
            GenericULong = (UINT)(Adapter->FramesXmitOneCollision);
            break;

        case OID_802_3_XMIT_MORE_COLLISIONS:
#if DBG
            //DbgPrint("*** OID_802_3_XMIT_MORE_COLLISIONS !\n");
#endif
            GenericULong = (UINT)(Adapter->FramesXmitManyCollisions);
            break;

        case OID_GEN_MAXIMUM_SEND_PACKETS:
#if DBG
            //DbgPrint("*** OID_GEN_MAXIMUM_SEND_PACKETS !\n");
#endif
            GenericULong = (UINT)(4);
            break;

#if NDIS50_MINIPORT
#ifdef POWER_MANAGMENT
        case OID_PNP_CAPABILITIES:
            // since we are stubbing power management, return only the
            // D0 power state indicating that the lowest power state we
            // support is D0 (full power)
            //
            /*RTFAST_DbgMessage("OID_PNP_CAPABILITIES!\n");
            switch(Adapter->ChipType)
            {
            case RTL8139:
            case RTL8139REVK:
                Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp   = NdisDeviceStateUnspecified;
                Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp      = NdisDeviceStateUnspecified;
                Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp    = NdisDeviceStateUnspecified;
                RTFAST_DbgMessage(" chip version:RTL8139K: power capability not supported !\n");
                break;
            case RTL8139A:
            case RTL8130:
                Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp   = NdisDeviceStateD2;
                if(Adapter->AddWakeUpFrame == ENABLE)
                    Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp   = NdisDeviceStateD2;
                else
                      Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
                Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp    = NdisDeviceStateD2;
                RTFAST_DbgMessage(" chip version:RTL8139A: support D2 !\n");
                break;
            case RTL8139B:
            case RTL8139C:
            default:
                Power_Management_Capabilities.WakeUpCapabilities.MinMagicPacketWakeUp  = NdisDeviceStateD3;
                if(Adapter->AddWakeUpFrame==ENABLE)
                    Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp  = NdisDeviceStateD3;
                else
                    Power_Management_Capabilities.WakeUpCapabilities.MinPatternWakeUp  = NdisDeviceStateUnspecified;
                Power_Management_Capabilities.WakeUpCapabilities.MinLinkChangeWakeUp   = NdisDeviceStateD3;
                RTFAST_DbgMessage(" chip version:RTL8139B/C: support D3 !\n");
            }*/
            //MoveSource = (PVOID) &Power_Management_Capabilities;
            //MoveBytes = sizeof(NDIS_PNP_CAPABILITIES);
            //StatusToReturn = NDIS_STATUS_SUCCESS;
DbgPrint("*** OID_PNP_CAPABILITIES !\n");
			StatusToReturn = NDIS_STATUS_NOT_SUPPORTED;

            break;
    
        case OID_PNP_QUERY_POWER:
#if 1 //DBG
            DbgPrint("*** OID_PNP_QUERY_POWER!\n");
#endif
            //Adapter->NextPowerState = (NDIS_DEVICE_POWER_STATE) InformationBuffer;
            QUERY_POWER(Adapter);
            //GenericULong = (ULONG)(Adapter->NextPowerState);
            //StatusToReturn = NDIS_STATUS_SUCCESS;
			StatusToReturn = NDIS_STATUS_NOT_SUPPORTED;
            break;
#endif // #define POWER_MANAGMENT
#endif // #if NDIS50_MINIPORT

        default:
#if DBG
            //DbgPrint("*** default !, OID :%x not implemented\n", Oid);
#endif
            StatusToReturn = NDIS_STATUS_INVALID_OID;
            break;
    }


    if(StatusToReturn == NDIS_STATUS_SUCCESS)
    {
        if(MoveBytes > BytesLeft)
        {
            //
            // Not enough room in InformationBuffer. Punt
            //

            *BytesNeeded = MoveBytes;

            StatusToReturn = NDIS_STATUS_INVALID_LENGTH;

        }
        else
        {
            //
            // Store result.
            //

            RTFAST_MOVE_MEM(InfoBuffer, MoveSource, MoveBytes);

            (*BytesWritten) += MoveBytes;
            *BytesNeeded = MoveBytes;
        }
    }

    return (StatusToReturn);
}


/*++

Routine Description:

    RTL8139SetInformation handles a set operation for a
    single OID.

Arguments:

    MiniportAdapterContext - Context registered with the wrapper, really
        a pointer to the adapter.

    Oid - The OID of the set.

    InformationBuffer - Holds the data to be set.

    InformationBufferLength - The length of InformationBuffer.

    BytesRead - If the call is successful, returns the number
        of bytes read from InformationBuffer.

    BytesNeeded - If there is not enough data in InformationBuffer
        to satisfy the OID, returns the amount of storage needed.

Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_PENDING
    NDIS_STATUS_INVALID_LENGTH
    NDIS_STATUS_INVALID_OID

--*/
extern
NDIS_STATUS
RTFast_SetInformation(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesRead,
    OUT PULONG BytesNeeded
    )

{
    //
    // Pointer to the adapter structure.
    //

    PRTFAST_ADAPTER Adapter = (PRTFAST_ADAPTER)MiniportAdapterContext;

    //
    // General Algorithm:
    //
    //     Verify length
    //     Switch(Request)
    //        Process Request
    //

    UINT BytesLeft = InformationBufferLength;
    PUCHAR InfoBuffer = (PUCHAR)(InformationBuffer);

    //
    // Variables for a particular request
    //
    UINT OidLength;

    //
    // Variables for holding the new values to be used.
    //
    ULONG LookAhead;
    ULONG Filter;
    //UCHAR PowerState,TmpUchar;
    PBOOLEAN AddressingReset = NULL;

    //
    // Status of the operation.
    //
    NDIS_STATUS StatusToReturn = NDIS_STATUS_SUCCESS;

#if DBG
    //DbgBreakPoint();
#endif

#if DBG
    //DbgPrint("***In SetInfo\n");
#endif



//	DbgPrint("2830S*** Set Information!\n");

	//return STATUS_UNSUCCESSFUL;


    //
    // Get Oid and Length of request
    //
    OidLength = BytesLeft;
#if DBG
    //DbgPrint("*** Enter RTFast SetInformation !\n");
#endif
    switch (Oid)
    {
        case OID_802_3_MULTICAST_LIST:
#if DBG
            //DbgPrint("*** OID_802_3_MULTICAST_LIST !\n");
#endif

            //
            // Verify length
            //

            if((OidLength % RTFAST_LENGTH_OF_ADDRESS) != 0)
            {
                StatusToReturn = NDIS_STATUS_INVALID_LENGTH;
                *BytesRead = 0;
                *BytesNeeded = 0;

                break;
            }

            //
            // Set the new list on the adapter.
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -