Highpoint RocketRAID 3xxx/4xxx 介面卡驅動 (hptiop)

控制器暫存器對映

對於基於 RR44xx Intel IOP 的介面卡,控制器 IOP 透過 PCI BAR0 和 BAR2 訪問

BAR0 偏移

暫存器

0x11C5C

連結介面 IRQ 設定

0x11C60

連結介面 IRQ 清除

BAR2 偏移

暫存器

0x10

入站訊息暫存器 0

0x14

入站訊息暫存器 1

0x18

出站訊息暫存器 0

0x1C

出站訊息暫存器 1

0x20

入站門鈴暫存器

0x24

入站中斷狀態暫存器

0x28

入站中斷遮蔽暫存器

0x30

出站中斷狀態暫存器

0x34

出站中斷遮蔽暫存器

0x40

入站佇列埠

0x44

出站佇列埠

對於基於 Intel IOP 的介面卡,控制器 IOP 透過 PCI BAR0 訪問

BAR0 偏移

暫存器

0x10

入站訊息暫存器 0

0x14

入站訊息暫存器 1

0x18

出站訊息暫存器 0

0x1C

出站訊息暫存器 1

0x20

入站門鈴暫存器

0x24

入站中斷狀態暫存器

0x28

入站中斷遮蔽暫存器

0x30

出站中斷狀態暫存器

0x34

出站中斷遮蔽暫存器

0x40

入站佇列埠

0x44

出站佇列埠

對於基於 Marvell 非 Frey IOP 的介面卡,IOP 透過 PCI BAR0 和 BAR1 訪問

BAR0 偏移

暫存器

0x20400

入站門鈴暫存器

0x20404

入站中斷遮蔽暫存器

0x20408

出站門鈴暫存器

0x2040C

出站中斷遮蔽暫存器

BAR1 偏移

暫存器

0x0

入站佇列頭指標

0x4

入站佇列尾指標

0x8

出站佇列頭指標

0xC

出站佇列尾指標

0x10

入站訊息暫存器

0x14

出站訊息暫存器

0x40-0x1040

入站佇列

0x1040-0x2040

出站佇列

對於基於 Marvell Frey IOP 的介面卡,IOP 透過 PCI BAR0 和 BAR1 訪問

BAR0 偏移

暫存器

0x0

IOP 配置資訊。

BAR1 偏移

暫存器

0x4000

入站列表基地址低位

0x4004

入站列表基地址高位

0x4018

入站列表寫入指標

0x402C

入站列表配置和控制

0x4050

出站列表基地址低位

0x4054

出站列表基地址高位

0x4058

出站列表複製指標影子基地址低位

0x405C

出站列表複製指標影子基地址高位

0x4088

出站列表中斷原因

0x408C

出站列表中斷使能

0x1020C

PCIe Function 0 中斷使能

0x10400

PCIe Function 0 到 CPU 訊息 A

0x10420

CPU 到 PCIe Function 0 訊息 A

0x10480

CPU 到 PCIe Function 0 門鈴

0x10484

CPU 到 PCIe Function 0 門鈴使能

非 Marvell Frey 的 I/O 請求工作流

所有排隊的請求都透過入站/出站佇列埠處理。請求包可以分配在 IOP 或主機記憶體中。

要將請求傳送到控制器:

  • 透過讀取入站佇列埠獲取空閒請求包,或者在主機 DMA 一致性記憶體中分配一個空閒請求。

    從入站佇列埠返回的值是相對於 IOP BAR0 的偏移量。

    在主機記憶體中分配的請求必須在 32 位元組邊界上對齊。

  • 填充資料包。

  • 透過將資料包寫入入站佇列,將其釋出到 IOP。對於在 IOP 記憶體中分配的請求,將偏移量寫入入站佇列埠。 對於在主機記憶體中分配的請求,將 (0x80000000|(bus_addr>>5)) 寫入入站佇列埠。

  • IOP 處理請求。 請求完成後,它將被放入出站佇列。 將生成出站中斷。

    對於在 IOP 記憶體中分配的請求,請求偏移量將釋出到出站佇列。

    對於在主機記憶體中分配的請求,(0x80000000|(bus_addr>>5)) 將釋出到出站佇列。 如果在請求中設定了 IOP_REQUEST_FLAG_OUTPUT_CONTEXT 標誌,則將釋出低 32 位上下文值。

  • 主機讀取出站佇列並完成請求。

    對於在 IOP 記憶體中分配的請求,主機驅動程式透過將其寫入出站佇列來釋放該請求。

非佇列請求(重置/重新整理等)可以透過入站訊息暫存器 0 傳送。 具有相同值的出站訊息表示入站訊息已完成。

Marvell Frey 的 I/O 請求工作流

所有排隊的請求都透過入站/出站列表處理。

要將請求傳送到控制器:

  • 在主機 DMA 一致性記憶體中分配一個空閒請求。

    在主機記憶體中分配的請求必須在 32 位元組邊界上對齊。

  • 使用請求的索引填充請求中的標誌。

    使用請求的物理地址和大小填充一個空閒的入站列表單元。

    使用上一個單元的索引設定入站列表寫入指標,如果索引達到支援的請求計數,則四捨五入為 0。

  • 將入站列表寫入指標釋出到 IOP。

  • IOP 處理該請求。 請求完成後,帶有 or-ed IOPMU_QUEUE_MASK_HOST_BITS 的請求標誌將被放入一個空閒的出站列表單元中,並且出站列表單元的索引將被放入複製指標影子暫存器中。 將生成出站中斷。

  • 主機讀取出站列表複製指標影子暫存器,並與先前儲存的讀取指標 N 進行比較。如果它們不同,則主機將讀取第 (N+1) 個出站列表單元。

    主機從第 (N+1) 個出站列表單元獲取請求的索引並完成請求。

非佇列請求(重置通訊/重置/重新整理等)可以透過 PCIe Function 0 到 CPU 訊息 A 暫存器傳送。 具有相同值的 CPU 到 PCIe Function 0 訊息暫存器表示訊息已完成。

使用者級介面

該驅動程式公開以下 sysfs 屬性

名稱

R/W

描述

driver-version

R

驅動程式版本字串

firmware-version

R

韌體版本字串


版權所有 © 2006-2012 HighPoint Technologies, Inc. 保留所有權利。

此檔案分發目的是希望它有用,但沒有任何保證; 甚至沒有對適銷性或特定用途適用性的暗示保證。 有關更多詳細資訊,請參見 GNU 通用公共許可證。

linux@highpoint-tech.com

http://www.highpoint-tech.com