Class Code trong PCI là gì?

Quicknote Class Code trong PCI là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
PCI / ACPI / SMBIOS Terms cover

Nếu Vendor ID/Device ID trả lời câu hỏi “thiết bị này là của ai”, thì Class Code trả lời câu hỏi “thiết bị này làm nhiệm vụ gì”. Firmware và OS dùng Class Code để nhận ra storage controller, network controller, display controller, bridge, USB controller…

Ví dụ:

Class Code = 01 08 02

có thể được hiểu là NVMe storage controller.

Mục Giá trị Ghi chú
Base Class Loại lớn Ví dụ 0x01 = Mass Storage, 0x02 = Network.
Sub Class Loại con Ví dụ trong storage: SATA, NVMe, RAID...
Programming Interface Cách lập trình Ví dụ AHCI mode, NVMe interface, xHCI...

Vì sao Class Code quan trọng trong firmware?

Một số driver không cần biết chính xác vendor. Chúng chỉ cần biết device thuộc class nào. Ví dụ storage stack có thể tìm controller theo class để tạo Block I/O hoặc Simple File System phía trên.

01 Read

Đọc Class Code

Từ PCI config offset 0x09 - 0x0B.

02 Classify

Phân loại device

Storage, Network, Display, Bridge...

03 Bind

Driver Supported()

Driver quyết định có hỗ trợ device không.

04 Expose

Publish protocol

Ví dụ Block I/O, Simple Network, GOP...

Class Code giúp firmware chọn hướng xử lý thiết bị.

Debug diary: ID đúng nhưng driver không bind

Có trường hợp Vendor ID/Device ID đúng, nhưng driver vẫn không chạy. Một nguyên nhân là Class Code hoặc Programming Interface không đúng mode mà driver mong đợi.

Ví dụ storage controller bị cấu hình sai mode:

Expected: Class 01 / SubClass 06 / PI 01  // SATA AHCI
Actual  : Class 01 / SubClass 04 / PI 00  // RAID-like mode

Driver AHCI generic có thể không bind như bạn nghĩ.

Checklist Class Code

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.

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.