Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 85 of file requests.c.
{ NDIS_STATUS Status; PVOID CopyFrom; UINT CopySize; ULONG GenericULONG; PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; DPRINT("Called. OID 0x%x\n", Oid); ASSERT(Adapter); NdisAcquireSpinLock(&Adapter->Lock); Status = NDIS_STATUS_SUCCESS; CopyFrom = (PVOID)&GenericULONG; CopySize = sizeof(ULONG); switch (Oid) { case OID_GEN_SUPPORTED_LIST: { CopyFrom = (PVOID)&MiniportOIDList; CopySize = sizeof(MiniportOIDList); break; } case OID_GEN_HARDWARE_STATUS: { GenericULONG = (ULONG)NdisHardwareStatusReady; break; } case OID_GEN_MEDIA_SUPPORTED: case OID_GEN_MEDIA_IN_USE: { static const NDIS_MEDIUM Medium = NdisMedium802_3; CopyFrom = (PVOID)&Medium; CopySize = sizeof(NDIS_MEDIUM); break; } case OID_GEN_CURRENT_LOOKAHEAD: case OID_GEN_MAXIMUM_LOOKAHEAD: { GenericULONG = 1500; break; } case OID_GEN_MAXIMUM_FRAME_SIZE: { /* * The value returned by this OID must be equal to * OID_GEN_MAXIMUM_TOTAL_SIZE - sizeof(ETHERNET_HEADER) * where sizeof(ETHERNET_HEADER) is 14. */ GenericULONG = 1500; break; } case OID_GEN_LINK_SPEED: { GenericULONG = Adapter->MediaSpeed * 10000; break; } case OID_GEN_TRANSMIT_BUFFER_SPACE: { /* XXX fix me */ GenericULONG = BUFFER_SIZE; break; } case OID_GEN_RECEIVE_BUFFER_SPACE: { /* XXX fix me */ GenericULONG = BUFFER_SIZE; break; } case OID_GEN_TRANSMIT_BLOCK_SIZE: { GenericULONG = BUFFER_SIZE; break; } case OID_GEN_RECEIVE_BLOCK_SIZE: { GenericULONG = BUFFER_SIZE; break; } case OID_GEN_VENDOR_ID: { UCHAR *CharPtr = (UCHAR *)&GenericULONG; GenericULONG = 0; /* Read the first three bytes of the permanent MAC address */ NdisRawReadPortUchar(Adapter->PortOffset, CharPtr); NdisRawReadPortUchar(Adapter->PortOffset + 1, CharPtr + 1); NdisRawReadPortUchar(Adapter->PortOffset + 2, CharPtr + 2); break; } case OID_GEN_VENDOR_DESCRIPTION: { static UCHAR VendorDesc[] = "ReactOS Team"; CopyFrom = VendorDesc; CopySize = sizeof(VendorDesc); break; } case OID_GEN_VENDOR_DRIVER_VERSION: { /* XXX implement me */ GenericULONG = 1; break; } case OID_GEN_CURRENT_PACKET_FILTER: { GenericULONG = Adapter->CurrentPacketFilter; break; } case OID_GEN_DRIVER_VERSION: { /* NDIS version used by the driver. */ static const USHORT DriverVersion = (NDIS_MINIPORT_MAJOR_VERSION << 8) + NDIS_MINIPORT_MINOR_VERSION; CopyFrom = (PVOID)&DriverVersion; CopySize = sizeof(DriverVersion); break; } case OID_GEN_MAXIMUM_TOTAL_SIZE: { /* See comment in OID_GEN_MAXIMUM_FRAME_SIZE. */ GenericULONG = 1514; break; } case OID_GEN_PROTOCOL_OPTIONS: { DPRINT("OID_GEN_PROTOCOL_OPTIONS.\n"); Status = NDIS_STATUS_NOT_SUPPORTED; break; } case OID_GEN_MAC_OPTIONS: { GenericULONG = NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA | NDIS_MAC_OPTION_RECEIVE_SERIALIZED | NDIS_MAC_OPTION_TRANSFERS_NOT_PEND | NDIS_MAC_OPTION_NO_LOOPBACK; break; } case OID_GEN_MEDIA_CONNECT_STATUS: { GenericULONG = (ULONG)NdisMediaStateConnected; /* Adapter->MediaState */ break; } case OID_GEN_MAXIMUM_SEND_PACKETS: { GenericULONG = 1; break; } case OID_802_3_CURRENT_ADDRESS: case OID_802_3_PERMANENT_ADDRESS: { CopyFrom = (PVOID)&Adapter->InitializationBlockVirt->PADR; CopySize = 6; break; } case OID_802_3_MAXIMUM_LIST_SIZE: { GenericULONG = MAX_MULTICAST_ADDRESSES; break; } case OID_GEN_XMIT_OK: GenericULONG = Adapter->Statistics.XmtGoodFrames; break; case OID_GEN_RCV_OK: GenericULONG = Adapter->Statistics.RcvGoodFrames; break; case OID_GEN_XMIT_ERROR: GenericULONG = Adapter->Statistics.XmtRetryErrors + Adapter->Statistics.XmtLossesOfCarrier + Adapter->Statistics.XmtCollisions + Adapter->Statistics.XmtLateCollisions + Adapter->Statistics.XmtExcessiveDefferals + Adapter->Statistics.XmtBufferUnderflows + Adapter->Statistics.XmtBufferErrors; break; case OID_GEN_RCV_ERROR: GenericULONG = Adapter->Statistics.RcvBufferErrors + Adapter->Statistics.RcvCrcErrors + Adapter->Statistics.RcvOverflowErrors + Adapter->Statistics.RcvFramingErrors; break; case OID_GEN_RCV_NO_BUFFER: GenericULONG = Adapter->Statistics.RcvBufferErrors + Adapter->Statistics.RcvOverflowErrors; break; case OID_GEN_RCV_CRC_ERROR: GenericULONG = Adapter->Statistics.RcvCrcErrors; break; case OID_802_3_RCV_ERROR_ALIGNMENT: GenericULONG = Adapter->Statistics.RcvFramingErrors; break; case OID_802_3_XMIT_ONE_COLLISION: GenericULONG = Adapter->Statistics.XmtOneRetry; break; case OID_802_3_XMIT_MORE_COLLISIONS: GenericULONG = Adapter->Statistics.XmtMoreThanOneRetry; break; default: { DPRINT1("Unknown OID\n"); Status = NDIS_STATUS_NOT_SUPPORTED; break; } } if (Status == NDIS_STATUS_SUCCESS) { if (CopySize > InformationBufferLength) { *BytesNeeded = CopySize; *BytesWritten = 0; Status = NDIS_STATUS_INVALID_LENGTH; } else { NdisMoveMemory(InformationBuffer, CopyFrom, CopySize); *BytesWritten = CopySize; *BytesNeeded = CopySize; } } else { *BytesWritten = 0; *BytesNeeded = 0; } NdisReleaseSpinLock(&Adapter->Lock); DPRINT("Leaving. Status is 0x%x\n", Status); return Status; }