devicepathtotext.c

来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C语言 代码 · 共 1,553 行 · 第 1/3 页

C
1,553
字号
  IN BOOLEAN         AllowShortcuts
  )
{
  ATAPI_DEVICE_PATH *Atapi;

  Atapi = DevPath;

  if (DisplayOnly) {
    CatPrint (Str, L"Ata(%x)", Atapi->Lun);
  } else {
    CatPrint (
      Str,
      L"Ata(%s,%s,%x)",
      Atapi->PrimarySecondary ? L"Secondary" : L"Primary",
      Atapi->SlaveMaster ? L"Slave" : L"Master",
      Atapi->Lun
      );
  }
}

VOID
DevPathToTextScsi (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  SCSI_DEVICE_PATH  *Scsi;

  Scsi = DevPath;
  CatPrint (Str, L"Scsi(%x,%x)", Scsi->Pun, Scsi->Lun);
}

VOID
DevPathToTextFibre (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  FIBRECHANNEL_DEVICE_PATH  *Fibre;

  Fibre = DevPath;
  CatPrint (Str, L"Fibre(%lx,%lx)", Fibre->WWN, Fibre->Lun);
}

VOID
DevPathToText1394 (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  F1394_DEVICE_PATH *F1394;

  F1394 = DevPath;
  CatPrint (Str, L"I1394(%lx)", F1394->Guid);
}

VOID
DevPathToTextUsb (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  USB_DEVICE_PATH *Usb;

  Usb = DevPath;
  CatPrint (Str, L"USB(%x,%x)", Usb->ParentPortNumber, Usb->InterfaceNumber);
}

VOID
DevPathToTextUsbWWID (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  USB_WWID_DEVICE_PATH  *UsbWWId;

  UsbWWId = DevPath;
  CatPrint (
    Str,
    L"UsbWwid(%x,%x,%x,\"WWID\")",
    UsbWWId->VendorId,
    UsbWWId->ProductId,
    UsbWWId->InterfaceNumber
    );
}

VOID
DevPathToTextLogicalUnit (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicalUnit;

  LogicalUnit = DevPath;
  CatPrint (Str, L"Unit(%x)", LogicalUnit->Lun);
}

VOID
DevPathToTextUsbClass (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  USB_CLASS_DEVICE_PATH *UsbClass;

  UsbClass = DevPath;

  if (AllowShortcuts == TRUE) {
    switch (UsbClass->DeviceClass) {
    case 1:
      CatPrint (
        Str,
        L"UsbAudio(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 2:
      CatPrint (
        Str,
        L"UsbCDCControl(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 3:
      CatPrint (
        Str,
        L"UsbHID(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 6:
      CatPrint (
        Str,
        L"UsbImage(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 7:
      CatPrint (
        Str,
        L"UsbPrinter(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 8:
      CatPrint (
        Str,
        L"UsbMassStorage(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 9:
      CatPrint (
        Str,
        L"UsbHub(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 10:
      CatPrint (
        Str,
        L"UsbCDCData(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 11:
      CatPrint (
        Str,
        L"UsbSmartCard(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 14:
      CatPrint (
        Str,
        L"UsbVideo(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 220:
      CatPrint (
        Str,
        L"UsbDiagnostic(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 224:
      CatPrint (
        Str,
        L"UsbWireless(%x,%x,%x,%x)",
        UsbClass->VendorId,
        UsbClass->ProductId,
        UsbClass->DeviceSubClass,
        UsbClass->DeviceProtocol
        );
      break;

    case 254:
      if (UsbClass->DeviceSubClass == 1) {
        CatPrint (
          Str,
          L"UsbDeviceFirmwareUpdate(%x,%x,%x)",
          UsbClass->VendorId,
          UsbClass->ProductId,
          UsbClass->DeviceProtocol
          );
      } else if (UsbClass->DeviceSubClass == 2) {
        CatPrint (
          Str,
          L"UsbIrdaBridge(%x,%x,%x)",
          UsbClass->VendorId,
          UsbClass->ProductId,
          UsbClass->DeviceProtocol
          );
      } else if (UsbClass->DeviceSubClass == 3) {
        CatPrint (
          Str,
          L"UsbTestAndMeasurement(%x,%x,%x)",
          UsbClass->VendorId,
          UsbClass->ProductId,
          UsbClass->DeviceProtocol
          );
      }
      break;

    default:
      break;
    }

    return ;
  }

  CatPrint (
    Str,
    L"UsbClass(%x,%x,%x,%x,%x)",
    UsbClass->VendorId,
    UsbClass->ProductId,
    UsbClass->DeviceClass,
    UsbClass->DeviceSubClass,
    UsbClass->DeviceProtocol
    );
}

VOID
DevPathToTextI2O (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  I2O_DEVICE_PATH *I2O;

  I2O = DevPath;
  CatPrint (Str, L"I2O(%x)", I2O->Tid);
}

VOID
DevPathToTextMacAddr (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  MAC_ADDR_DEVICE_PATH  *MAC;
  UINTN                 HwAddressSize;
  UINTN                 Index;

  MAC           = DevPath;

  HwAddressSize = sizeof (EFI_MAC_ADDRESS);
  if (MAC->IfType == 0x01 || MAC->IfType == 0x00) {
    HwAddressSize = 6;
  }

  CatPrint (Str, L"MAC(");

  for (Index = 0; Index < HwAddressSize; Index++) {
    CatPrint (Str, L"%02x", MAC->MacAddress.Addr[Index]);
  }

  CatPrint (Str, L",%x)", MAC->IfType);
}

VOID
DevPathToTextIPv4 (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  IPv4_DEVICE_PATH  *IP;

  IP = DevPath;
  if (DisplayOnly == TRUE) {
    CatPrint (
      Str,
      L"IPv4(%d.%d.%d.%d)",
      IP->RemoteIpAddress.Addr[0],
      IP->RemoteIpAddress.Addr[1],
      IP->RemoteIpAddress.Addr[2],
      IP->RemoteIpAddress.Addr[3]
      );
    return ;
  }

  CatPrint (
    Str,
    L"IPv4(%d.%d.%d.%d,%s,%s,%d.%d.%d.%d)",
    IP->RemoteIpAddress.Addr[0],
    IP->RemoteIpAddress.Addr[1],
    IP->RemoteIpAddress.Addr[2],
    IP->RemoteIpAddress.Addr[3],
    IP->Protocol ? L"TCP" : L"UDP",
    (IP->StaticIpAddress == TRUE) ? L"Static" : L"DHCP",
    IP->LocalIpAddress.Addr[0],
    IP->LocalIpAddress.Addr[1],
    IP->LocalIpAddress.Addr[2],
    IP->LocalIpAddress.Addr[3]
    );
}

VOID
DevPathToTextIPv6 (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  IPv6_DEVICE_PATH  *IP;

  IP = DevPath;
  if (DisplayOnly == TRUE) {
    CatPrint (
      Str,
      L"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
      IP->RemoteIpAddress.Addr[0],
      IP->RemoteIpAddress.Addr[1],
      IP->RemoteIpAddress.Addr[2],
      IP->RemoteIpAddress.Addr[3],
      IP->RemoteIpAddress.Addr[4],
      IP->RemoteIpAddress.Addr[5],
      IP->RemoteIpAddress.Addr[6],
      IP->RemoteIpAddress.Addr[7],
      IP->RemoteIpAddress.Addr[8],
      IP->RemoteIpAddress.Addr[9],
      IP->RemoteIpAddress.Addr[10],
      IP->RemoteIpAddress.Addr[11],
      IP->RemoteIpAddress.Addr[12],
      IP->RemoteIpAddress.Addr[13],
      IP->RemoteIpAddress.Addr[14],
      IP->RemoteIpAddress.Addr[15]
      );
    return ;
  }

  CatPrint (
    Str,
    L"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x,%s,%s,%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
    IP->RemoteIpAddress.Addr[0],
    IP->RemoteIpAddress.Addr[1],
    IP->RemoteIpAddress.Addr[2],
    IP->RemoteIpAddress.Addr[3],
    IP->RemoteIpAddress.Addr[4],
    IP->RemoteIpAddress.Addr[5],
    IP->RemoteIpAddress.Addr[6],
    IP->RemoteIpAddress.Addr[7],
    IP->RemoteIpAddress.Addr[8],
    IP->RemoteIpAddress.Addr[9],
    IP->RemoteIpAddress.Addr[10],
    IP->RemoteIpAddress.Addr[11],
    IP->RemoteIpAddress.Addr[12],
    IP->RemoteIpAddress.Addr[13],
    IP->RemoteIpAddress.Addr[14],
    IP->RemoteIpAddress.Addr[15],
    IP->Protocol ? L"TCP" : L"UDP",
    (IP->StaticIpAddress == TRUE) ? L"Static" : L"DHCP",
    IP->LocalIpAddress.Addr[0],
    IP->LocalIpAddress.Addr[1],
    IP->LocalIpAddress.Addr[2],
    IP->LocalIpAddress.Addr[3],
    IP->LocalIpAddress.Addr[4],
    IP->LocalIpAddress.Addr[5],
    IP->LocalIpAddress.Addr[6],
    IP->LocalIpAddress.Addr[7],
    IP->LocalIpAddress.Addr[8],
    IP->LocalIpAddress.Addr[9],
    IP->LocalIpAddress.Addr[10],
    IP->LocalIpAddress.Addr[11],
    IP->LocalIpAddress.Addr[12],
    IP->LocalIpAddress.Addr[13],
    IP->LocalIpAddress.Addr[14],
    IP->LocalIpAddress.Addr[15]
    );
}

VOID
DevPathToTextInfiniBand (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  INFINIBAND_DEVICE_PATH  *InfiniBand;

  InfiniBand = DevPath;
  CatPrint (
    Str,
    L"Infiniband(%x,%g,%lx,%lx,%lx)",
    InfiniBand->ResourceFlags,
    InfiniBand->PortGid,
    InfiniBand->ServiceId,
    InfiniBand->TargetPortId,
    InfiniBand->DeviceId
    );
}

VOID
DevPathToTextUart (
  IN OUT POOL_PRINT  *Str,
  IN VOID            *DevPath,
  IN BOOLEAN         DisplayOnly,
  IN BOOLEAN         AllowShortcuts
  )
{
  UART_DEVICE_PATH  *Uart;
  CHAR8             Parity;

  Uart = DevPath;
  switch (Uart->Parity) {
  case 0:
    Parity = 'D';
    break;

  case 1:
    Parity = 'N';
    break;

  case 2:
    Parity = 'E';
    break;

  case 3:
    Parity = 'O';
    break;

  case 4:
    Parity = 'M';
    break;

  case 5:
    Parity = 'S';
    break;

  default:

⌨️ 快捷键说明

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