我是一名硬件开发人员,正在为嵌入式系统创建一个ahci接口。我想知道prd dma数据在哪里创建并分配给prd。由于sata使用dwords,我假设数据将以4字节的倍数对齐。我对Linux没有太多的经验,所以如果有人能给我指出正确的方向,我会很感激的。
谢谢

最佳答案

ahci控制器充当系统内存和sata设备之间的数据移动引擎。以读操作为例,大致顺序如下:
软件在内存中“构建”命令(命令头、命令表和相应的prd)
软件通过配置端口寄存器pxci(和pxsact,如果ncq)发出此命令
AHCI控制器获取并处理此命令(包括数据传输…)
调用软件中断服务以处理命令完成
软件读取prds以获取设备内容
prd条目由软件(驱动程序)创建/分配,可以通过命令表定位/检索,即硬件可以定位命令表,然后检索所有prd条目。此外,ahci规范还定义了prd地址和字节数,以便字对齐(最小值)

10-01 09:00