首页
学习
活动
专区
圈层
工具
发布

AHCI规范
EN

Stack Overflow用户
提问于 2014-03-05 21:21:00
回答 1查看 383关注 0票数 2

我有一个关于AHCI规范的问题:

当传输是直接存储器存取写入或读取时,端口中是否使用变量pDmaXferCnt

规范中的描述似乎表明它不是,但使用的是PRD。但是,HBA如何知道要向SATA设备发送或从SATA设备接收多少数据?此信息将在H2D FIS的扇区计数中可用,但除非我忽略了它,否则似乎没有一个变量寄存器来保存此值。DX:transmit状态似乎也表明pDmaXferCnt将有一个设置值,但我看不出它将在何处设置用于DMA读/写操作。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-10-15 00:47:08

规范中:“实现说明: HBA状态变量用于描述所需的外部可见行为。实现不需要具有与这些变量直接对应的内部状态值。”-意思是您(可能)在外部寄存器中找不到pDmaXferCnt。

不过,还有另一种方法可以跟踪计数。

在AHCI规范的HBA内存空间使用部分下,有命令列表(命令标头列表)和命令表(由命令标头指向,每个命令表都是要发送的命令)的数据结构。HBA可以访问这两个数据库。

在DW0的命令报头中是PRDTL -这是在传输中使用多少PRD的计数。

现在,在命令报头所指向的实际命令表中,包含实际的PRD,在每个PRD中是它们自己的DBC或数据字节计数(在DBA中指定的位置DMA的数据量)。因此,如果你把PRD的*那里有自己的DBC加起来,你就会得到要传输的数据量。

另外,在命令头DW1中是PRDBC,它是传输的字节数,因此您可以在命令后进行检查。

HBA -主机总线适配器

PRDTL -物理区域描述符表长度

PRD -物理区域描述符(跟踪物理内存中的位置和要传输的字节数)

DBC -数据字节计数(在PRD内)

DBA -数据基地址(PRD内的物理地址)

PRDBC -物理区域描述符字节数

DMA -直接存储器访问

更多阅读:http://www.intel.com/content/www/us/en/io/serial-ata/serial-ata-ahci-spec-rev1-3-1.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22198991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档