HBA Memory Registers[譯自AHCI 1.0]
PCI Configuration Space[對於軟體開發者,黃色部分比較重要]
PCI Configuration Space[對於軟體開發者,黃色部分比較重要]
Start (hex) | End (hex) | Symbol | Name |
00 | 03 | ID | Identifiers |
04 | 05 | CMD | Command Register |
06 | 07 | STS | Device Status |
08 | 08 | RID | Revision ID |
09 | 0B | CC | Class Codes |
0C | 0C | CLS | Cache Line Size |
0D | 0D | MLT | Master Latency Timer |
0E | 0E | HTYPE | Header Type |
0F | 0F | BIST | Built In Self Test (Optional) |
10 | 23 | BARS | Other Base Address Registres (Optional) |
24 | 27 | ABAR | AHCI Base Address |
2C | 2F | SS | Subsystem Identifiers |
30 | 33 | EROM | Expansion ROM Base Address (Optional) |
34 | 34 | CAP | Capabilities Pointer |
3C | 3D | INTR | Interrupt Information |
3E | 3E | MGNT | Min Grant (Optional) |
3F | 3F | MLAT | Max Latency (Optional) |
Start | End | Description |
00h | 23h | Generic Host Control |
24h | 9Fh | Reserved |
A0h | FFh | Vendor Specific registers |
100h | 17Fh | Port 0 port control registers |
180h | 1FFh | Port 1 port control registers |
200h | FFFh | (Port 2 – Port 29 port control registers) |
1000h | 107Fh | Port 30 port control registers |
1080h | 10FFh | Port 31 port control registers |
3.1 Generic Host Control
接下來是HBA欄位中暫存器的應用。
Start | End | Symbol | Description |
00h | 03h | CAP | Host Capabilities |
04h | 07h | GHC | Global Host Control |
08h | 0Bh | IS | Interrupt Status |
0Ch | 0Fh | PI | Ports Implemented |
10h | 13h | VS | Version |
14h | 17h | CCC_CTL | Command Completion Coalescing Control |
18h | 1Bh | CCC_PORTS | Command Completion Coalsecing Ports |
1Ch | 1Fh | EM_LOC | Enclosure Management Location |
20h | 23h | EM_CTL | Enclosure Management Control |
3.1.1 Offset 00h: CAP – HBA Capabilities
HBA對裝置軟體的暫存器基本功能指示。
Bit | Type | Reset | Description |
31 | RO | Impl. Spec | Supports 64-bit Addressing(S64A): |
30 | RO | Impl. Spec | Supports Native Command Queuing (SNCQ): |
29 | RO | Impl. Spec | Supports SNotification Register (SSNTF): |
28 | RO | HwInit | Supports Mechanical Presence Switch(SMPS): 當設定為’1’時,在HBA它的Port支援機器存在切換,供使用在熱插拔的操作。當清除為0,不支援此函式。這值被載入經由OS初使化以前的BIOS。 |
27 | RO | HwInit | Supports Staggered Spin-up (SSS): 當設定為’1’時,在HBA它的Port支援交錯安排連結上,供使用在平衡動力尖峰。當清除為0,不支援此函式。這值被載入經由OS初使化以前的BIOS。 |
26 | RO | Impl. Spec | Supports Aggressive Link Power Management (SALP): 當設定為’1’時,當沒有命令被處理,HBA會支援自動引發連接需求變成局部(Partial)或睡眠(Slumber)狀態。當清除為’0’,當這個功能不被支援時,軟體將PxCMD.ALPE和PxCMD.ASP位元看成保留。參考8.3.1.3章節。 |
25 | RO | Impl. Spec | Supports Activity LED (SAL): |
24 | RO | Impl. Spec | Supports Command List Override (SCLO): |
23:20 | RO | Impl. Spec | Interface Speed Support (ISS): |
19 | RO | 0 | Supports Non-Zero DMA Offsets (SNZO): |
18 | RO | Impl. Spec | Supports AHCI mode only(SAM): |
17 | RO | Impl. Spec | Supports Port Multiplier (SPM): 指示是否HBA可支援Port Multiplier。當被設定時,支援Port Multiplier用基本命令切換。當清除為’0’時,Port Multiplier不被支援,以及Port Multiplier可能不附屬於HBA。 |
16 | RO | 0 | FIS-based Switching Supported (FBSS): |
15 | RO | Impl. Spec | PIO Multiple DRQ Block (PMD): |
14 | RO | Impl. Spec | Slumber State Capable (SSC):指示是否 HBA有支援轉換成睡眠(Slumber)狀態。當清除為0,軟體不允許HBA去啟動轉換成睡眠(Slumber)狀態經由有效率的連接電源管理,也不允許PxCMD.ICC區域去啟動轉換成睡眠(Slumber)狀態在每個Port,還有PxSCTL.IPM區域在每個Port必須程式不允許裝置啟動睡眠(Slumber)需求。當設定為’1’,將能夠支援HBA與裝置啟動睡眠(Slumber)。 |
13 | RO | Impl. Spec | Partial State Capable (PSC): 指示是否 HBA有支援轉換成局部(Partial)狀態。當清除為0,軟體不允許HBA去啟動轉換成局部(Partial)狀態經由有效率的連接電源管理,也不允許PxCMD.ICC區域去啟動轉換成睡眠(Slumber)狀態在每個Port,還有PxSCTL.IPM區域在每個Port必須程式不允許裝置啟動局部(Partial)需求。當設定為’1’,將能夠支援HBA與裝置啟動局部(Partial)。 |
12:08 | RO | Impl. Spec | Number of Command Slots (NCS): |
07 | RO | Impl. Spec | Command Completion Coalescing Supported (CCCS): 當設定為’1’,指示HBA支援Command Completion Coalescing相同的定義在11節。當Command Completion Coalescing被支援,HBA會執行CCC_CTL與CCC_PORTS總體HBA暫存器。當清除為’0’, 指示HBA不支援Command Completion Coalescing和CCC_CTL與CCC_PORTS總體HBA暫存器不被執行。 |
06 | RO | Impl. Spec | Enclosure Management Supported (EMS): |
05 | RO | Impl. Spec | Supports External SATA (SXS): |
04:00 | RO | Impl. Spec | Number of Ports(NP): |
Offset 04h: GHC – Global HBA Control
Bit | Type | Reset | Description |
31 | RW/RO | Impl. Spec | AHCI Enable (AE): |
30:03 | RO | 0 | Reserved |
02 | RO | 0 | MSI Revert to Single Message (MRSM): |
01 | RW | 0 | Interrupt Enable (IE): |
00 | RW1 | 0 | HBA Reset (HR): 0 = 不影響 1 = Controller和全部的Port重新Reset。 |
Offset 08h – Interrupt Status Register
這暫存器指示這些屬於Port內部控制器擁有中斷的判定與服務需求。
Bit | Type | Reset | Description |
31:0 | RWC | 0 | Interrupt Pending Status (IPS): 如果設定,指示符合Port有中斷的判定。在中斷之後,軟體會使用這資訊去決定哪些Port的服務需求。 IPS[x] bit只被定義對於Port是執行狀態,或是對於命令完成組合中斷定義在CCC_CTL.INT。所有其他bit被保留。 |
Offset 0Ch: PI – Ports Implemented
Bit | Type | Reset | Description |
31:0 | RO | HwInit | Port Implemented (PI): |
3.1.5 Offset 10h: VS – AHCI Version
HBA履行支援,這暫存器指示主要的和次要的AHCI說明的版本。上層2 bytes表示主要版本編號,下層2 bytes表示次要版本編號。例如:3.12將表示如00030102h。三種有效的說明版本:0.95, 1.0, 1.1。
3.1.5.1 VS Value for 0.95 Compliant HBAs
Bit | Type | Reset | Description |
31:16 | RO | 0000h | Major Version Number (MJR): 指示主要版本是”0” |
15:00 | RO | 0905h | Minor Version Number (MNR): 指示次要版本是“95” |
3.1.5.2 VS Value for 1.0 Compliant HBAs
Bit | Type | Reset | Description |
31:16 | RO | 0001h | Major Version Number (MJR): 指示主要版本是”1” |
15:00 | RO | 0000h | Minor Version Number (MNR): 指示次要版本是“00” |
3.1.5.3 VS Value for 1.1 Compliant HBAs
Bit | Type | Reset | Description |
31:16 | RO | 0001h | Major Version Number (MJR): 指示主要版本是”1” |
15:00 | RO | 0100h | Minor Version Number (MNR): 指示次要版本是“10” |
3.1.6 Offset 14h: CCC_CTL – Command Completion Coalescing Control
Command Completion Coalescing控制暫存器是使用對HBA欄位設定配置Command Completion Coalescing特徵。
執行注意:HBA狀態變數(範例包含hCccComplete和hCccTimer)是使用來描述要求表面上可看見的行為。執行不是需要對內部狀態值而是直接相對應到這變數。
Bit | Type | Reset | Description |
31:16 | RW | 1 | Timeout Value(TV): Timeout數值是詳細指示在1 millisecond間格。這計數器的準確性將是中心的5%。hCccTimer是載入這Timeout數值。在選擇的Port當Command是未完成hCccTimer是只會被減少。相同的定義在11.2節。當hCccTimer減少成0,這HBA將CCC中斷用信號發出。在每個CCC中斷言明,hCcccTimer被Reset會變成Timeout的數值。0的Timeout數值將被保留。 |
15:8 | RW | 1 | Command Completions(CC): 命令完成指示之數量以至於必須去產生CCC Interrupt。hCccComplete為HBA上的一個Interrupt command completion counter。每一段時間中在這些Port只要有命令完成時hCccComplete都會有遞增。當hCccComplete等於command completions value時,CCC interrupt的信號會發出。每個CCC interrupt都會將Interrupt command completion counter重置成0。當命令完成指示之數量等於0時將Disable CCC interrupt,i.e.這個例子中,CCC interrupt只會發生於Timer。 |
7:3 | RO | Impl Spec | Interrupt(INT): 詳細指明中斷的使用經由CCC特徵。在對應到Ports Implemented(PI) register的bit存在設定成0時,這個中斷可能標記成未使用。此方式在控制器上CCC interrupt對應到未執行的Port interrupt。當Interrupt發生時,這IS.IPS[INT] bit將還是被設定為1。MSI這領域也詳細指明Interrupt vector的使用。 |
2:1 | RO | 0h | Reserved |
0 | RW | 0h | Enable(EN): 當清除為’0’, Command Completion Coalescing特徵被除能與沒有CCC中斷會產生。當設定為’1’, Command Completion Coalescing特徵被致能與CCC中斷會發生基於Timeout或命令結束情況。當EN被清除成’0’,軟體將只能改變TV和CC區域內容。這bit從’0’變為’1’則進入傳送狀態,任何對於TV和CC區域數值的更新將會見效。 |
3.1.7 Offset 18h: CCC_PORTS – Command Completion Coalescing Ports
這Command Completion Coalescing的Port暫存器是使用去詳細指示Port,當CCC_CTL.EN = ‘1’時,是接合CCC特徵相同的Port。
Bit | Type | Reset | Description |
31:0 | RW | 0 | Ports (PRT): 這暫存器的位元是有意義。每個bit都相對於一個各別的Port,在bit 0相對於Port 0。如果bit是設成’1’,相當於Port是Command Completion Coalescing特徵部份。如果bit是設成’0’,相當於Port不是Command Completion Coalescing特徵部份。在暫存器Bits設定成1,相對應於Port Implemented register(0x0C) bits也必須設定為1。內部一個計時器增加(1 millisecond)時,這個區域將更新數值後得到結果。 |
沒有留言:
張貼留言