bloggerads

2016年5月19日 星期四

AHCI: Index-Data Pair (IDP)

寫AHCI "Legacy" Option Rom的時候,為了要Access MMIO (AHCI Base Address) 得從 real mode 切換到Protect Mode 。但是AHCI其實有定義一種叫做Index Data Pair的機制,透過Access IO來替代MMIO。這種方法就可以在純real mode (<1MB) 底下寫AHCI Driver了

AHCI Spec第2.4章,定義了一個SATA Capability(0x12), 有這個Capability就是代表此AHCI有support Index Data Pair


這個Cap的結構如下




在SATACAP+4h 這個Register說明他是用哪個BAR(BAR0, BAR1,...)提供IO base address, 然後IO offset是多少。

所以 IDP Index port實際上就是 [BARx]+Offset
那 IDP Data port 實際上就是 [BARx]+Offset +4

作法就是用IO in/out指令先把要read的MMIO offset填到 [BARx]+Offset, 再去[BARx]+Offset +4讀出,或把要寫的資料寫到Data port然後再去Index port指定MMIO offset

沒有留言:

張貼留言