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.
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.
Người dùng đổi question
Ví dụ đổi `Boot Timeout` từ 3 sang 5.
Update local value
Browser cập nhật giá trị tạm theo VarStore mapping.
Driver được gọi nếu cần
Callback có thể validate, reject, refresh form, hoặc request reset.
User chọn Save & Exit
Browser tạo config request/string.
RouteConfig
Driver nhận dữ liệu mới và quyết định ghi vào storage.
SetVariable
UEFI variable được update nếu setting lưu persistent.
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.
HII Architecture Overview
Knowledge map tổng quan về HII, VFR, IFR, VarStore, callback và flow lưu BIOS Setup.
HII VFR Element Cheat Sheet
Bảng tổng hợp các element VFR như checkbox, oneof, numeric, string, date, time và ordered list.
VFR là gì?
VFR là source mô tả form, question, condition và VarStore trước khi compile thành IFR.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.