PCI I/O Protocol là gì?

Quicknote PCI I/O Protocol là gì?

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

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

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.