EFI_UNSUPPORTED là gì?

Quicknote EFI_UNSUPPORTED là gì?

2 phút đọc
Đọc bằng Tiếng Việt English 日本語
Debug / Shell / Driver Terms cover

EFI_UNSUPPORTED báo rằng operation, controller, device hoặc mode hiện tại không được hỗ trợ. Trong UEFI Driver Model, đây thường là status rất bình thường trong Supported().

Điểm cần nhớ: EFI_UNSUPPORTED không nhất thiết là lỗi xấu. Nó có thể chỉ nói rằng “driver này không dành cho controller này”.

Ví dụ trong Driver Binding

EFI_STATUS
EFIAPI
MyDriverBindingSupported (
  IN EFI_DRIVER_BINDING_PROTOCOL *This,
  IN EFI_HANDLE                  ControllerHandle,
  IN EFI_DEVICE_PATH_PROTOCOL    *RemainingDevicePath OPTIONAL
  )
{
  Status = gBS->OpenProtocol (
                  ControllerHandle,
                  &gEfiPciIoProtocolGuid,
                  (VOID **)&PciIo,
                  This->DriverBindingHandle,
                  ControllerHandle,
                  EFI_OPEN_PROTOCOL_BY_DRIVER
                  );
  if (EFI_ERROR (Status)) {
    return EFI_UNSUPPORTED;
  }

  // Check VendorId / DeviceId here
  return EFI_SUCCESS;
}

Nếu controller không phải thiết bị mà driver hỗ trợ, return EFI_UNSUPPORTED là đúng.

Mục Giá trị Ghi chú
Supported() Bình thường Driver không match controller.
Protocol method Feature chưa hỗ trợ Ví dụ mode hoặc command không có trên device.
Platform policy Không bật feature Feature bị tắt bởi PCD/setup option.
Wrong phase Gọi sai thời điểm Một số service không tồn tại ở phase hiện tại.

Debug Diary: driver không attach vào controller

Nếu thấy rất nhiều log EFI_UNSUPPORTED trong quá trình enumerate driver, đừng hoảng. Dispatcher đang hỏi nhiều driver xem ai support controller đó. Chỉ đáng nghi khi driver bạn kỳ vọng support cũng trả EFI_UNSUPPORTED.

Khi đó hãy log thêm:

ControllerHandle
VendorId / DeviceId
ClassCode
RemainingDevicePath
Supported() return status

Checklist khi gặp EFI_UNSUPPORTED

Firmware Engineer Notes

Đừng biến mọi EFI_UNSUPPORTED thành DEBUG_ERROR. Trong path enumerate driver, nó có thể làm log cực nhiễu. Hãy log ở DEBUG_INFO hoặc chỉ log khi controller gần match nhưng bị loại bởi một điều kiện cụ thể.

Bài liên quan

Nguồn tham khảo public

Thấy nội dung này hữu ích?

Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.