PCI I/O Protocol là gì?
Quicknote PCI I/O Protocol là gì?
EFI_PCI_IO_PROTOCOL là interface UEFI giúp DXE driver access PCI device mà không phải tự đọc/ghi config/MMIO theo cách platform-specific. Khi PCI Bus Driver tạo child handle cho một endpoint, nó thường install PCI I/O Protocol lên handle đó.
Nói ngắn gọn: đây là “tay cầm” mà driver dùng để nói chuyện với thiết bị PCI.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| Pci.Read/Write | Access PCI config space | Đọc Vendor ID, BAR, Command Register... |
| Mem.Read/Write | Access MMIO BAR | Đọc/ghi register qua BAR. |
| Io.Read/Write | Access I/O space | Legacy I/O BAR. |
| Map/Unmap | DMA mapping | Dùng khi device DMA vào memory. |
| GetBarAttributes | Đọc attribute BAR | Biết BAR type/range/resource. |
Ví dụ code đọc config space
EFI_PCI_IO_PROTOCOL *PciIo;
PCI_TYPE00 Pci;
Status = PciIo->Pci.Read (
PciIo,
EfiPciIoWidthUint32,
0,
sizeof (Pci) / sizeof (UINT32),
&Pci
);
DEBUG ((DEBUG_INFO, "VID=%04x DID=%04x\n", Pci.Hdr.VendorId, Pci.Hdr.DeviceId));
Ví dụ access MMIO BAR
UINT32 Value;
Status = PciIo->Mem.Read (
PciIo,
EfiPciIoWidthUint32,
0, // BAR index
0x10, // register offset
1,
&Value
);
Debug diary: LocateProtocol không thấy PCI I/O
Nếu driver gọi OpenProtocol() hoặc HandleProtocol() với gEfiPciIoProtocolGuid mà fail, có thể device chưa được PCI Bus Driver enumerate hoặc driver của bạn đang bind sai handle.
Checklist PCI I/O Protocol
Bài liên quan
- PCI Architecture Overview
- PCI Configuration Space là gì?
- BDF trong PCIe là gì?
- BAR trong PCIe là gì?
- PCI Resource Allocation là gì?
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.