ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

NDIS_STATUS NTAPI MiniportQueryInformation ( IN NDIS_HANDLE  MiniportAdapterContext,
IN NDIS_OID  Oid,
IN PVOID  InformationBuffer,
IN ULONG  InformationBufferLength,
OUT PULONG  BytesWritten,
OUT PULONG  BytesNeeded 
)

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;
}

Generated on Sun May 27 2012 05:24:46 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.