10 Platform Communication[譯自AHCI1.0]
10.1 Software Initialization of HBA
所有有用的工作執行之前,必須先對HBA作初始化。初始化由兩個獨立週期組成:一個韌體週期(BIOS平台)和一個系統軟體週期。HBA初始化PCI配置空間往後可以看到詳細說明。
10.1.1 Firmware Specific Initialization
10.1.2 System Software Specific Initialization
10.2 Hardware Prerequisites to Enable/Disable GHC.AE
這個原始介面支援附加到AHCI(CAP.SAM = ‘0’),軟體可能要求從一個模式切換到其他模式。由於對控制器使用OS敏感性的分類符號,在AHCI和原始模式之間的主動切換被強烈阻止。這個部分列舉硬體只有針對在AHCI模式和原始模式之間切換要求,它不了解任何軟體考慮的因素。
從原始的模式切換到AHCI模式,原始介面應當在一個空閒的狀態,以及對於任何裝置連接到控制器將沒有任何未完成的命令。此外,在矯正切換到AHCI模式之前,任何處理錯誤報告將是通過原始工作檔案狀態暫存器(i.e. ERR == ‘1’)。這可是已實現了經由一個軟體Reset。在這裡,軟體可以開始接著對AHCI控制器作初始化,其要點在10.1節。
從AHCI模式切換到原始模式,AHCI控制器必須對所有的Port引發一個空閒狀態,以及對於任何裝置連接到控制器將沒有未完成命令。所有的Port中的 PxCMD.ST清除為0,以及確保所有的Port中的 PxCMD.CR清除為0。所有的Port中的 PxCMD.FRE清除為0,以及確保所有的Port中的 PxCMD.FR清除為0。然後軟體將清除GHC.IE成0去確保在AHCI控制器中沒有任何中斷發生。在這裡,軟體會設定GHC.AE為0。命令控制權將在這裡配置給原始控制器。
10.3 Software Manipulation of Port DMA Engines
每個Port包含兩個主要DMA引擎。一個DMA引擎工作經由Command List,以及經由PxCMD.ST來控制。另一個DMA引擎是複製接收FIS到系統記憶體,以及經由PxCMD.FRE來控制。
10.3.1 Start(PxCMD.ST)
當PxCMD.ST被設為1,它被允許在Port上執行某種行動,但在軟體方面會受到限制。(參考5.3.2.3節)。
- 它不會操作PxCMD.POD對通過不友善存在偵測邏輯裝置的電源作開或關的動作(如果HBA有支援)。
- 它不會操作PxSCTL.DET去改變Phy的狀態。
- 它不會操作PxCMD.SUD去連接上裝置(如果HBA有支援)。
上述行動只有當HBA空閒時才被允許,由PxCMD.ST與PxCMD.CR兩者都表示等於0。經由HBA狀態機H:NotRunning state這是被注意的。如果當Port不是空閒時(PxCMD.ST或PxCMD.CR被設為1),軟體執行任何上述行動,將會有不確定之結果發生。
軟體將不設定PxCMD為1,直到它證明PxCMD.FR為0,以及有設定PxCMD.FRE為1。軟體不會設定PxCMD為1,直到在目前Port上的裝置起作用 (經由PxTFD.STS.BSY = 0,PxTFD.STS.DRQ = 0,還有PxSSTAS.DET = 3h作為決定)還有PxCLB/PxCLBU被程式化為有效值。
HBA進入低電源D3狀態之前,軟體將清除PxCMD.ST為0。
10.3.2 FIS Receive Enable
當PxCMD.FRE被設定為1(將引起PXCMD.FR也設為1),HBA從裝置上接收FIS,以及複製它們到系統記憶體。當PxCMD.FRE被清除為0(也將引起PXCMD.FR也清除為0),接收FIS保留於內部,還有如果HBA內部FIFO填滿了,此外在接受將會被阻塞。
軟體將允取去操作PxCMD.FR,所以它可能移動FIS的接收面積到一個新的位置。當這bit被清除為0,軟體必須首先等待PxCMD.FR為0,指示DMA引擎是在一個空閒狀態接受FIS。當PxCMD.FR和PxCMD.FRE兩者都清除為0,軟體可能會更新PxFB與PxFBU內容值。在設定PxCMD.FRE成1以前,軟體將確保PxFB與PxFBU被設定為有效值。當PxCMD.FRE被設定成1時,軟體將不寫入PxFB與PxFBU。
軟體在設定這個bit(PxCMD.FRE)為1以前,必須先設定PxCMD.ST為1。在PxCMD.ST或PxCMD.CR被設為1時,軟體不會清除這bit(PxCMD.FRE)。
在做HBA Reset之中,這bit(PxCMD.FRE)會被清除。根據HBA之D2H暫存器中的FIS將會是公認包含裝置特徵,以及這特徵區域將會被更新。
注意如果HBA停止執行歸就於發生錯誤(例如,PxIS.IFS被設定成1),FIS可能不被傳送,直到PxCMD.ST被清除成0,從錯誤中恢復。
10.4 Reset
10.4.1 Software Reset
10.4.2 Port Reset
10.4.3 HBA Reset
10.5 Interface Speed Support
10.6 Interrupts
10.6.1 Tiered Operation (Tier:階層)
AHCI定義2階層的中斷架構,
10.6.1.1 First Tier(IS Register)
第1層的識別是由GHC與IS暫存器。
在HBA中,GHC是致能中斷的欄位。這是主要中斷的致能。在沒有被設定以前,中斷不會被HBA引發。在控制器中沒有中斷,但是HBA也是會去IS暫存器設定中斷狀態值。這個bit可能被遮罩住了,不會影響任何Port的中斷狀態位元設定。這些bit被設定,不管中斷是否被致能。
10.6.1.2 Second Tier(PxIS Register)
在每個Port第2階層是識別,通過PxIS(狀態)與PxIE(中斷致能)暫存器。PxIS為每個Port中不同的中斷位元。
對於每個Port的中斷致能或除能,只要去設定PxIE。不管PxIE怎麼設定,PxIS有狀態就會去設定。
10.6.2 HBA/SW Interaction
10.6.2.1 Pin Based and Single MSI Message Based Behavior
10.6.2.2 Multiple MSI Based Messages
10.6.2.3 Multiple MSI When Fewer Messages Allocated Than Requested
10.6.2.3.1 Sharing Last Message
10.6.2.3.2 Reverting to Single MSI Mode
10.6.3 Disabling Device Interrupts(NIEN Bit in Device Control Register)
10.7 Mechanical Presence Switch Operation
10.8 Cold Presence Detect Operation
10.9 Staggered Spin-up Operation
交錯鏈結在Serial ATA II上是一個非必要的特徵:延伸至Serial ATA 1.0修訂成為1.2規格。
10.9.1 Interaction of PxSCTL.DET and PxCMD.SUD
10.9.2 Spin-Up Procedure(Informative)
在電源打開系統初始化期間支援交錯安排鏈結上,軟體需要去鏈結上附屬的周邊裝置。
10.9.3 Preparing for Low Power System State(Informative)
10.9.4 When to Enter Listen Mode(Informative)
在一個單獨的Port中,進入一個傾聽的模式:
10.10 Asynchronous Notification
10.10.1 Notifications form Devices Connected to Port Multiplier
10.10.1.1 Snotification Operation
10.11 Activity LED
10.12 BIST
10.13 Index-Data Pair
10.13.1 Rules/Restrictions
10.13.2 IDP Index Register Format
10.13.3 IDP Data Register Format
10.13.4 Access Mechanism
10.13.5 Index-Data Pair Discovery
沒有留言:
張貼留言