PCIe Enumeration trong UEFI là gì?
Quicknote giải thích PCIe enumeration ở mức firmware.
PCIe enumeration trong firmware là quá trình scan bus, đọc config space, cấp resource và tạo handle/protocol để driver khác bind. Nhưng với OS, câu chuyện chưa kết thúc ở đó: ACPI cũng phải mô tả root bridge resource, ECAM base và interrupt routing đủ đúng.
PCI Bus Driver scan
Đọc Vendor ID, Class Code, BAR.
Allocate BAR/window
Cấp MMIO/I/O, bus number, bridge window.
Install PCI I/O
Tạo handle cho UEFI driver.
Expose root bridge
MCFG/_CRS/MADT mô tả cho OS.
Re-enumerate/control
OS driver đọc PCI config và quản lý device.
ACPI liên quan PCIe ở đâu?
| Mục | Giá trị | Ghi chú |
|---|---|---|
| MCFG | PCIe ECAM base | OS dùng để access extended config space. |
| `_CRS` của PCI root | Bus/MMIO/I/O aperture | Nếu thiếu window, OS cấp resource sai. |
| MADT/IRQ routing | Interrupt controller mapping | Quan trọng với MSI/INTx routing. |
| DSDT/SSDT device | Hotplug/power/wake | Root port hoặc device đặc biệt có ACPI method. |
Debug diary: firmware thấy, OS không thấy
UEFI Shell: pci command thấy device
Linux/Windows: device không hoạt động
Lúc này hãy so sánh PCI enumeration trong firmware với ACPI root bridge resource mà OS nhận được. Nếu _CRS thiếu MMIO above 4G hoặc MCFG sai base, OS có thể không access đúng config/resource.
PCIe + ACPI checklist
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.
USB Initialization trong DXE là gì?
Quicknote giải thích USB initialization trong DXE.
Start() trong UEFI Driver Model là gì?
Start() là nơi driver bind vào controller: open BY_DRIVER, install protocol, tạo child handle nếu là bus driver. Hiểu cleanup fail path và anti-pattern làm handle database bẩn.
Stop() trong UEFI Driver Model là gì?
Stop() là cleanup đối xứng của Start(). Hiểu CloseProtocol, uninstall protocol, NumberOfChildren, destroy child handle và anti-pattern làm DisconnectController fail.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.