Config Access Protocol là gì?

Config Access Protocol nối Setup Browser với driver để extract, route và callback dữ liệu HII.

2 phút đọc
Đọc bằng Tiếng Việt English 日本語
HII / BIOS Setup Terms cover

EFI_HII_CONFIG_ACCESS_PROTOCOL là cầu nối giữa Setup Browser và driver sở hữu cấu hình. Nếu VFR mô tả UI, VarStore mô tả dữ liệu, thì Config Access Protocol là nơi driver can thiệp vào quá trình đọc, lưu và phản ứng khi user đổi setting.

Nó thường có ba hàm chính:

Mục Giá trị Ghi chú
ExtractConfig Xuất cấu hình hiện tại ra dạng config string Browser dùng để lấy dữ liệu ban đầu.
RouteConfig Nhận config string và ghi lại vào storage Thường dẫn tới SetVariable hoặc internal state.
Callback Phản ứng khi question thay đổi Dùng cho validation, dynamic UI, reset request.

Callback khi user thay đổi setting

EFI_STATUS
EFIAPI
SetupCallback (
  IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
  IN EFI_BROWSER_ACTION                    Action,
  IN EFI_QUESTION_ID                       QuestionId,
  IN UINT8                                 Type,
  IN EFI_IFR_TYPE_VALUE                   *Value,
  OUT EFI_BROWSER_ACTION_REQUEST          *ActionRequest
  )
{
  switch (Action) {
  case EFI_BROWSER_ACTION_CHANGING:
    // Validate trước khi Browser chấp nhận giá trị.
    break;

  case EFI_BROWSER_ACTION_CHANGED:
    if (QuestionId == QUESTION_ID_NETWORK_STACK && Value->u8 == 1) {
      DEBUG ((DEBUG_INFO, "Network Stack enabled\n"));
      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_RESET;
    }
    break;
  }

  return EFI_SUCCESS;
}

Save & Exit thường đi như thế nào?

1

User đổi setting

Browser update local buffer hoặc gọi callback.

2

Callback validate

Driver có thể reject, request reset, refresh form.

3

Save & Exit

Browser route config về driver.

4

RouteConfig

Driver parse config string và ghi storage.

5

SetVariable

Nếu dùng NVRAM, variable được update.

Pitfall

Build pass nhưng callback không chạy thường do:

  • question thiếu flag/attribute cần thiết;
  • EFI_HII_CONFIG_ACCESS_PROTOCOL chưa install đúng handle;
  • FormSet không gắn với driver handle đó;
  • QuestionId trong code không khớp IFR dump;
  • callback trả status sai làm Browser bỏ qua.

Bài liên quan

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.