Linux AHCI PRD分配

时间:2014-03-06 09:31:32

标签: linux linux-kernel linux-device-driver embedded-linux sata

我是一名为嵌入式系统创建AHCI接口的硬件开发人员。我想知道PRD DMA数据的创建位置和分配给PRD的位置。由于SATA使用DWORDS,我假设数据将与4个字节的倍数对齐。我没有太多的Linux经验,如果有人能指出我正确的方向,我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

ahci控制器充当系统内存和SATA设备之间的数据移动引擎。以读操作为例,粗略的顺序如下:

  • 软件“内置”命令在内存中(命令头,命令表和相应的PRD)
  • 软件通过配置端口寄存器PxCI(以及PxSACT,如果NCQ)
  • 发出此命令
  • AHCI控制器获取并处理此命令(包括数据传输......)
  • 调用软件中断服务以处理命令完成
  • 软件读取PRD以获取设备内容

PRD条目由软件(驱动程序)创建/分配,可以通过命令表定位/检索,也就是说,硬件可以找到命令表,然后检索所有PRD条目。此外,ahci规范定义PRD地址和字节计数为WORD对齐(最小)