AHCI ---HBA Memory Registers

HBA Memory Registers

内存寄存器位于不可缓存的内存区域,切每次访问不能超过 64bit。寄存器分为两类:一是 Global Register,二是 Port Register。前者用于控制整个 HBA 的功能支持信息,后者是对于 HBA 的 port 的状态与功能信息。

Generic Host Control

用于控制 HBA 对于软件功能支持、中断、通信机制、HBA 重启、队列控制、 AHCI 版本号、以及其他扩展功能等。具体的寄存器的值的含义需要查看对应的章节。

Port Registers (one set per port)

HBA 最重要的寄存器部分,直接控制 Port 与 ATA device 的交互。基地址是PCI Header 中的 AHCI base address。每个 Port 的长度是固定的 80 h.

Port 0 开始于100h, port 1 开始于 180h, port 2 开始于 200h, port 3开始于280h, etc. Offset 计算公式如下:

Port offset = 100h + (PI Asserted Bit Position * 80h)

Offset 00h: PxCLB – Port x Command List Base Address

保存 Command List的32位基本物理地址。在获取要执行的命令时需要获取这个基地址。该地址范围所指向的结构长度为1k字节。这个地址必须是1k字节对齐,由位09:00表示为只读。

若是支持 64 位地址的 Command LIst,则需要和Offset 04h: PxCLBU(Port x Command List Base Address Upper 32-bits)一同使用获取 Command.

Offset 08h: PxFB – Port x FIS Base Address

用于获取需要传输的 FIS 数据块的物理地址,这个地址是位于系统内存中的。若是支持 64 位地址 FIS,则与Offset 0Ch: PxFBU (Port x FIS Base Address Upper 32-bits)一起使用。

Offset 28h: PxSSTS – Port x Serial ATA Status (SCR0: SStatus)

这个32位寄存器传递 Port 和 ATA 设备 的当前状态。通过读取这个寄存器,可以获取当前 Port 连接到的设备的具体状态,是否连接建立,以及接口速度等等。 HBA持续异步更新它。当HBA发送一个COMRESET到设备时,这个寄存器被更新为它的重置值。

Offset 2Ch: PxSCTL – Port x Serial ATA Control (SCR2: SControl)

32位读写寄存器,软件通过它控制SATA功能。对该寄存器的写入将导致host adapter或接口采取操作。从寄存器中读取返回最后写入的值。

Offset 30h: PxSERR – Port x Serial ATA Error (SCR1: SError)

这个寄存器包含诊断错误信息,供诊断软件用于验证正确操作或隔离故障模式。

Offset 40h: PxFBS: Port x FIS-based Switching Control

主要用于控制Port Multiplier 的交换状态,以及获取状态信息。

  • 46
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值