HII Save, Callback và Reset Flow

Giải thích cách Setup Browser gọi callback, route config, lưu NVRAM và áp dụng sau reset.

3 phút đọc
HII / BIOS Setup Terms cover

Một trong những câu hỏi quan trọng nhất khi debug BIOS Setup là: dữ liệu đi đâu sau khi người dùng đổi setting?

Câu trả lời không phải lúc nào cũng là “ghi NVRAM ngay”. Nhiều Browser giữ dữ liệu trong browser storage, gọi callback để validate/refresh, rồi chỉ route config khi user Save & Exit.

Change

Người dùng đổi question

Ví dụ đổi `Boot Timeout` từ 3 sang 5.

Browser

Update local value

Browser cập nhật giá trị tạm theo VarStore mapping.

Callback

Driver được gọi nếu cần

Callback có thể validate, reject, refresh form, hoặc request reset.

Save

User chọn Save & Exit

Browser tạo config request/string.

Route

RouteConfig

Driver nhận dữ liệu mới và quyết định ghi vào storage.

NVRAM

SetVariable

UEFI variable được update nếu setting lưu persistent.

Reset

Apply policy

Boot sau PEI/DXE/BDS đọc setting mới.

Code skeleton RouteConfig

EFI_STATUS
EFIAPI
RouteConfig (
  IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
  IN CONST EFI_STRING                      Configuration,
  OUT EFI_STRING                          *Progress
  )
{
  SETUP_DATA Setup;
  EFI_STATUS Status;

  // 1. Parse Configuration vào buffer Setup.
  // 2. Validate field quan trọng.
  // 3. Ghi persistent storage.
  Status = gRT->SetVariable (
                  L"Setup",
                  &gSetupVariableGuid,
                  EFI_VARIABLE_NON_VOLATILE |
                  EFI_VARIABLE_BOOTSERVICE_ACCESS |
                  EFI_VARIABLE_RUNTIME_ACCESS,
                  sizeof (SETUP_DATA),
                  &Setup
                  );

  return Status;
}

Khi nhấn Reset thì dữ liệu được apply thế nào?

Reset không tự làm option có hiệu lực. Reset chỉ tạo cơ hội để phase boot sau đọc lại policy từ NVRAM hoặc storage đã lưu.

Save & Exit

SetVariable("Setup") thành công

Reset

PEI/DXE/BDS đọc Setup variable

Policy mới được apply

Nếu SetVariable() fail nhưng UI vẫn request reset, boot sau vẫn dùng giá trị cũ.

Debug Diary

Case: user đổi SATA Mode, Browser báo cần reset, nhưng sau reboot controller vẫn ở mode cũ.

Điều tra theo thứ tự:

SATA Mode không apply sau reset

Firmware Engineer Notes

Callback không nên thay thế hoàn toàn storage flow. Callback thích hợp cho validate, dynamic UI, warning, request reset. Còn dữ liệu persistent vẫn cần một đường lưu rõ ràng: RouteConfig() hoặc logic tương đương dẫn tới variable/storage.

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.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

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

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