/* Check if this interface is USB Rndis SubType but not CDC Data interface */
BOOLEAN IsRndisInterface(IN EFI_USB_IO_PROTOCOL *UsbIo)
/* Check if this interface is USB Rndis SubType but not CDC Data interface */
BOOLEAN IsRndisInterface(IN EFI_USB_IO_PROTOCOL *UsbIo)
{
  EFI_STATUS                    Status;
  EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;
  Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &InterfaceDescriptor);
  if (EFI_ERROR (Status)) {
    return FALSE;
  }
  if (((InterfaceDescriptor.InterfaceClass == USB_CDC_CLASS) &&
       (InterfaceDescriptor.InterfaceSubClass == USB_CDC_ACM_SUBCLASS) &&
       (InterfaceDescriptor.InterfaceProtocol == USB_VENDOR_PROTOCOL)) || \
      ((InterfaceDescriptor.InterfaceClass == USB_MISC_CLASS) &&
       (InterfaceDescriptor.InterfaceSubClass == USB_RNDIS_SUBCLASS) &&
       (InterfaceDescriptor.InterfaceProtocol == USB_RNDIS_ETHERNET_PROTOCOL))
      )
  {
    return TRUE;
  }
  return FALSE;
}