AHCI ---HBA Configuration Registers---PCI Header

2.1 PCI Header

下面表格是截取自 AHCI Spec,主要是介绍 PCI header 的每个字段的具体含义,根据获取这个 header 的数据可以来解析这个 HBA 的具体的配置。不同字段的各个值的含义,可以参考AHCI spec HBA Configuration Registers 章节。本文主要是介绍几个重要的字段。

PCI Header:

额外介绍一下对于不同字段寄存器的属性设置:

  • RO---只读
  • RW---可读可写
  • RWC---可读可写,通过写入 1 可以置 0
  • RW1---可读可写,通过写入 1 来置起
  • Impl. Spec ---特定于实现——HBA可以自由选择其实现
  • HwInit---默认状态取决于设备和系统配置。
    该值在重置时初始化,可以由扩展ROM初始化,或者在集成设备的情况下,由平台BIOS初始化。

Offset 00h: ID - Identifiers

由厂商设置分配不同设备不同的设备编号;

Offset 06h: STS - Device Status

标识当前 HBA 的状态,用于检测当前 device 是否有错误产生,以及 HBA 的操作频率等信息。

Offset 09h: CC - Class Code

类型码,可以根据这个字段的值来获取 device 的具体类型,也可以看出 HBA 其实也就是个 PCI 设备。

当是一个 SATA 设备时,class code 应该是 01h,sub class 应该是 06h;

对于支持RAID的 HBA,Sub Class Code复位值应该是04h,Programming Interface复位值应该是00h。

Offset 0Fh: BIST – Built In Self Test (Optional)

这是一个可选的功能,用于指示 HBA 是否支持 BIST 的功能以及 BIST 的状态。

Offset 24h: ABAR – AHCI Base Address

用来指示 HBA 在系统内存的内存类型,以及基地址,后面会介绍的HBA memory registers 就是在这个基地址的基础上加上 offset 来获取寄存器的值的。必须为ABAR分配足够的空间,以容纳全局AHCI寄存器、每个端口特定于端口的寄存器以及任何特定于供应商的空间(如果需要)。

Offset 30h: EROM – Expansion ROM (Optional)

若是 HBA 有自己的扩展 ROM 的话,需要这个字段来获取扩展 ROM 的基地址。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值