AHCI---System Memory Structures

System Memory Structures

软件和 SATA device 的大部分交互都是通过系统内存进行的,通过系统内存可以进行 FIS 的接收和发送,同时也可以进行数据传输。在 HBA 内存里面主要进行的就是关于 HBAport 的控制和整个 HBA 设备的全局控制。

HBA 的内存结构如下图:

内存寄存器和配置寄存器是位于 HBA 设备的内部,而记录 command 位置的 list 以及记录 FIS 结构是位于系统内存。每个 HBA port 有自己对应的 Command List 以及 FISes 结构,HBA 最多可以支持 32 个 Port.对应 Port 位于 内存寄存器的位置我们也叫对应 port 的 entry.

Port Memory Usage

在每个 port 的 entry 里面包含了两个描述符,一个是指向该 port 对应的Command List,另一个是指向FISes 结构。

Received FIS Structure

FISes 结构里面包含对应 port 接受到的数据,不同作用的数据存放位置不同,具体位置分类如下图: 

主要有以下几种分类:

  • DMA FIS--DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。也就是 HOST 以DMA方式向 device 发送数据。
  • PIO FIS--主要用于通知 HBA 关于 PIO 的具体配置信息。
  • D2H FIS--Device to Host 的缩写,表示将内存数据从device拷贝回 host 上也就是 HBA,用于传送 device 的状态变化。
  • Set Device Bits FIS--Device用来改写host 的shadow register中的error或status的某些bits.
  • Unknown FIS --不知道来源的 FIS.

需要注意的是未知的FIS类型向HBA卡发送的最大值为64字节。如果一个Unknown FIS 长度大于64字节,FIS被认为是非法的,并被处理。

虽然HBA不知道 Unknow FIS的长度,但系统软件应该知道它,因此软件只处理有效的字节。当HBA期望从设备接收数据FIS时,或者当HBA根据正在使用的命令协议将数据FIS传输到设备时,HBA不需要接收未知的FIS.

Command List Structure

下面显示了命令列表结构。每个条目包含一个命令头,这是一个32字节的结构。DW 也就是双字,具体字段的信息可以参考 AHCI 的 spec 获取。

DW 0 – Description Information

PRDTL:物理区域描述符表长度(Physical Region Descriptor Table Length, PRDTL):分散/聚集描述符表在表项中的长度,称为物理区域描述符表。

Port Multiplier Port (PMP):指示在发送时构造Data fise时应使用的端口号,并根据该命令收到的所有 FIS 进行检查。当确定与直接连接的设备通信时,软件将该值设置为0。

其他对应值如下图:

DW 1 - Command Status

Physical Region Descriptor Byte Count (PRDBC):显示设备写(系统内存到设备)或读(设备到系统内存)时传输的当前字节数。

DW 2 – Command Table Base Address

Command Table Descriptor Base Address (CTBA):命令表的32位物理地址,其中包含命令FIS、ATAPI命令和PRD表。这个地址必须与128字节的缓存线对齐,由保留的06:00位表示。

DW 3 – Command Table Base Address Upper

Command Table Descriptor Base Address Upper 32-bits (CTBAU):这是命令表基的上32位。只有当HBA表明它可以通过功能寄存器中的S64A位支持64位寻址时,它才有效,否则会被忽略。

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值