RapidIO 子系統指南¶
- 作者:
Matt Porter
簡介¶
RapidIO 是一種高速交換結構互連,其特性面向嵌入式市場。 RapidIO 提供對基於交換結構網路的記憶體對映 I/O 和基於訊息的事務的支援。 RapidIO 具有標準化的發現機制,與 PCI 匯流排標準非常相似,可以簡單地檢測網路中的裝置。
本文件為希望在新架構上支援 RapidIO、編寫新驅動程式或瞭解子系統內部結構的開發人員提供。
已知 Bug 和限制¶
Bug¶
無。 ;)
限制¶
不支援對 RapidIO 記憶體區域的訪問/管理
不支援多主機列舉
RapidIO 驅動介面¶
驅動程式提供了一組呼叫,以便與子系統互動,以收集裝置資訊、請求/對映記憶體區域資源以及管理郵箱/門鈴。
函式¶
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u32 * data指向要讀取的資料的指標
描述
從本地裝置的配置空間內指定的偏移量讀取 32 位資料。
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u32 data要寫入的資料
描述
將 32 位資料寫入到本地裝置的配置空間內指定的偏移量。
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u16 * data指向要讀取的資料的指標
描述
從本地裝置的配置空間內指定的偏移量讀取 16 位資料。
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u16 data要寫入的資料
描述
將 16 位資料寫入到本地裝置的配置空間內指定的偏移量。
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u8 * data指向要讀取的資料的指標
描述
從本地裝置的配置空間內指定的偏移量讀取 8 位資料。
引數
struct rio_mport *port主埠
u32 offset到本地配置空間的偏移量
u8 data要寫入的資料
描述
將 8 位資料寫入到本地裝置的配置空間內指定的偏移量。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u32 * data指向要讀取的資料的指標
描述
從 RIO 裝置的配置空間內指定的偏移量讀取 32 位資料。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u32 data要寫入的資料
描述
將 32 位資料寫入到 RIO 裝置的配置空間內指定的偏移量。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u16 * data指向要讀取的資料的指標
描述
從 RIO 裝置的配置空間內指定的偏移量讀取 16 位資料。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u16 data要寫入的資料
描述
將 16 位資料寫入到 RIO 裝置的配置空間內指定的偏移量。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u8 * data指向要讀取的資料的指標
描述
從 RIO 裝置的配置空間內指定的偏移量讀取 8 位資料。
引數
struct rio_dev *rdevRIO 裝置
u32 offset到裝置配置空間的偏移量
u8 data要寫入的資料
描述
將 8 位資料寫入到 RIO 裝置的配置空間內指定的偏移量。
引數
struct rio_dev *rdevRIO 裝置
u16 data門鈴訊息資料
描述
向 RIO 裝置傳送門鈴訊息。門鈴訊息具有由 data 引數提供的 16 位資訊欄位。
-
void rio_init_mbox_res(struct resource *res, int start, int end)¶
初始化 RIO 郵箱資源
引數
struct resource *res資源結構
int start郵箱範圍的開始
int end郵箱範圍的結束
描述
此函式用於初始化資源欄位以用作郵箱資源。它使用 start 和 end 引數初始化一系列郵箱。
-
void rio_init_dbell_res(struct resource *res, u16 start, u16 end)¶
初始化 RIO 門鈴資源
引數
struct resource *res資源結構
u16 start門鈴範圍的開始
u16 end門鈴範圍的結束
描述
此函式用於初始化資源欄位以用作門鈴資源。它使用 start 和 end 引數初始化一系列門鈴訊息。
-
RIO_DEVICE¶
RIO_DEVICE (dev, ven)
用於描述特定 RIO 裝置的宏
引數
dev16 位 RIO 裝置 ID
ven16 位 RIO 供應商 ID
描述
此宏用於建立與特定裝置匹配的 struct rio_device_id。元件供應商和元件裝置欄位將設定為 RIO_ANY_ID。
-
int rio_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox, void *buffer, size_t len)¶
將 RIO 訊息新增到出站郵箱佇列
引數
struct rio_mport *mport包含出站佇列的 RIO 主埠
struct rio_dev *rdev要將訊息傳送到的 RIO 裝置
int mbox出站郵箱佇列
void *buffer指向訊息緩衝區的指標
size_t len訊息緩衝區的長度
描述
將 RIO 訊息緩衝區新增到出站郵箱佇列以進行傳輸。成功時返回 0。
引數
struct rio_mport *mport包含入站郵箱的主埠
int mbox入站郵箱號碼
void *buffer指向訊息緩衝區的指標
描述
將緩衝區新增到入站郵箱佇列以進行接收。成功時返回 0。
引數
struct rio_mport *mport包含入站郵箱的主埠
int mbox入站郵箱號碼
描述
從入站郵箱佇列獲取 RIO 訊息。成功時返回 0。
引數
struct rio_dev *rdevRIO 裝置
描述
獲取唯一的 RIO 裝置識別符號。返回裝置識別符號字串。
引數
struct rio_dev *rdevRIO 裝置
描述
獲取 RIO 驅動程式特定資料。返回指向驅動程式特定資料的指標。
引數
struct rio_dev *rdevRIO 裝置
void *data指向驅動程式特定資料的指標
描述
設定 RIO 驅動程式特定資料。裝置結構的驅動程式資料指標設定為 data 引數。
引數
struct rio_dev *rdev正在被引用的 RIO 裝置
描述
對裝置的每個即時引用都應該被引用計數。
RIO 裝置的驅動程式通常應在其 probe() 方法中記錄此類引用(當它們繫結到裝置時),並在其 disconnect() 方法中透過呼叫 rio_dev_put() 來釋放它們。
引數
struct rio_dev *rdev正在斷開連線的 RIO 裝置
描述
當裝置的使用者使用完裝置後,必須呼叫此函式。當裝置的最後一個使用者呼叫此函式時,裝置的記憶體將被釋放。
-
int rio_register_driver(struct rio_driver *rdrv)¶
註冊新的 RIO 驅動程式
引數
struct rio_driver *rdrv要註冊的 RIO 驅動程式結構
將
struct rio_driver新增到已註冊驅動程式列表中。錯誤時返回負值,否則返回 0。如果未發生錯誤,即使在註冊期間沒有宣告任何裝置,驅動程式仍保持註冊狀態。
-
void rio_unregister_driver(struct rio_driver *rdrv)¶
登出 RIO 驅動程式
引數
struct rio_driver *rdrv要登出的 RIO 驅動程式結構
從已註冊的 RIO 驅動程式列表中刪除
struct rio_driver,使其有機會透過為它負責的每個裝置呼叫其 remove() 函式來進行清理,並將這些裝置標記為無驅動程式。
引數
struct rio_mport *port從中獲取 deviceid 的 RIO 主埠
描述
從實現主埠的本地裝置讀取基本/擴充套件裝置 ID。返回 8/16 位裝置 ID。
-
int rio_query_mport(struct rio_mport *port, struct rio_mport_attr *mport_attr)¶
查詢 mport 裝置屬性
引數
struct rio_mport *port要查詢的 mport 裝置
struct rio_mport_attr *mport_attrmport 屬性資料結構
描述
透過指向屬性資料結構的指標返回指定 mport 的屬性。
引數
struct rio_mport *mport與 RIO 網路關聯的主埠
描述
分配 RIO 網路結構,初始化每個網路的列表頭,並將關聯的主埠新增到關聯的主埠的網路列表。成功時返回 RIO 網路指標,失敗時返回 NULL。
引數
struct rio_mport *portRIO 主埠
u16 did要寫入的裝置 ID 值
描述
從裝置寫入基本/擴充套件裝置 ID。
引數
struct rio_dev *rdevRIO 裝置
描述
將 RIO 裝置新增到全域性裝置列表,並將 RIO 裝置新增到 RIO 裝置列表。為 RIO 裝置建立通用 sysfs 節點。
-
int rio_request_inb_mbox(struct rio_mport *mport, void *dev_id, int mbox, int entries, void (*minb)(struct rio_mport *mport, void *dev_id, int mbox, int slot))¶
請求入站郵箱服務
引數
struct rio_mport *mport從中分配郵箱資源的 RIO 主埠
void *dev_id裝置特定的指標,用於傳遞事件
int mbox要宣告的郵箱號碼
int entries入站郵箱佇列中的條目數
void (*minb) (struct rio_mport * mport, void *dev_id, int mbox, int slot)收到入站訊息時要執行的回撥
描述
請求入站郵箱資源的所有權,並將回撥函式繫結到該資源。成功時返回 0。
引數
struct rio_mport *mport從中釋放郵箱資源的 RIO 主埠
int mbox要釋放的郵箱號碼
描述
釋放入站郵箱資源的所有權。如果請求已得到滿足,則返回 0。
-
int rio_request_outb_mbox(struct rio_mport *mport, void *dev_id, int mbox, int entries, void (*moutb)(struct rio_mport *mport, void *dev_id, int mbox, int slot))¶
請求出站郵箱服務
引數
struct rio_mport *mport從中分配郵箱資源的 RIO 主埠
void *dev_id裝置特定的指標,用於傳遞事件
int mbox要宣告的郵箱號碼
int entries出站郵箱佇列中的條目數
void (*moutb) (struct rio_mport * mport, void *dev_id, int mbox, int slot)傳送出站訊息時要執行的回撥
描述
請求出站郵箱資源的所有權,並將回撥函式繫結到該資源。成功時返回 0。
引數
struct rio_mport *mport從中釋放郵箱資源的 RIO 主埠
int mbox要釋放的郵箱號碼
描述
釋放入站郵箱資源的所有權。如果請求已得到滿足,則返回 0。
-
int rio_request_inb_dbell(struct rio_mport *mport, void *dev_id, u16 start, u16 end, void (*dinb)(struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info))¶
請求入站門鈴訊息服務
引數
struct rio_mport *mport從中分配門鈴資源的 RIO 主埠
void *dev_id裝置特定的指標,用於傳遞事件
u16 start門鈴資訊範圍起點
u16 end門鈴資訊範圍終點
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst, u16 info)接收到門鈴時執行的回撥函式
描述
請求入站門鈴資源的所有權,並將回撥函式繫結到該資源。如果請求已滿足,則返回 0。
引數
struct rio_mport *mport從中釋放門鈴資源的 RIO 主埠
u16 start門鈴資訊範圍起點
u16 end門鈴資訊範圍終點
描述
釋放入站門鈴資源的所有權,並從門鈴事件列表中刪除回撥。如果請求已滿足,則返回 0。
引數
struct rio_dev *rdev從中分配門鈴資源的 RIO 裝置
u16 start門鈴訊息範圍起始值
u16 end門鈴訊息範圍結束值
描述
請求門鈴訊息範圍的所有權。如果請求已滿足,則返回資源;否則,返回 NULL。
引數
struct rio_dev *rdev從中釋放門鈴資源的 RIO 裝置
struct resource *res要釋放的門鈴資源
描述
釋放門鈴訊息範圍的所有權。如果請求已滿足,則返回 0。
-
int rio_add_mport_pw_handler(struct rio_mport *mport, void *context, int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step))¶
將埠寫入訊息處理程式新增到 mport 特定 pw 處理程式的列表中
引數
struct rio_mport *mport繫結 portwrite 回撥的 RIO 主埠
void *context要在事件中傳遞的處理程式特定上下文
int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step)接收到 portwrite 時執行的回撥函式
描述
如果請求已滿足,則返回 0。
-
int rio_del_mport_pw_handler(struct rio_mport *mport, void *context, int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step))¶
從 mport 特定 pw 處理程式的列表中刪除埠寫入訊息處理程式
引數
struct rio_mport *mport繫結 portwrite 回撥的 RIO 主埠
void *context要傳遞到事件的已註冊處理程式特定上下文
int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step)已註冊回撥函式
描述
如果請求已滿足,則返回 0。
-
int rio_request_inb_pwrite(struct rio_dev *rdev, int (*pwcback)(struct rio_dev *rdev, union rio_pw_msg *msg, int step))¶
請求特定 RapidIO 裝置的入站埠寫入訊息服務
引數
struct rio_dev *rdev要向其註冊入站埠寫入回撥例程的 RIO 裝置
int (*pwcback)(struct rio_dev *rdev, union rio_pw_msg *msg, int step)接收到埠寫入時執行的回撥例程
描述
將埠寫入回撥函式繫結到 RapidIO 裝置。如果請求已滿足,則返回 0。
引數
struct rio_dev *rdev已註冊入站埠寫入回撥的 RIO 裝置
描述
從 rio_dev 結構中刪除回撥。如果請求已滿足,則返回 0。
引數
struct rio_mport *mport與埠寫入處理關聯的主埠
int enable1=啟用,0=停用
-
int rio_map_inb_region(struct rio_mport *mport, dma_addr_t local, u64 rbase, u32 size, u32 rflags)¶
對映入站記憶體區域。
引數
struct rio_mport *mport主埠。
dma_addr_t local要對映的記憶體區域的物理地址
u64 rbase分配給此視窗的 RIO 基地址
u32 size記憶體區域的大小
u32 rflags對映標誌。
返回
0 -- 成功。
描述
此函式將建立從 RIO 空間到本地記憶體的對映。
引數
struct rio_mport *mport主埠
dma_addr_t lstart要取消對映的記憶體區域的物理地址
-
int rio_map_outb_region(struct rio_mport *mport, u16 destid, u64 rbase, u32 size, u32 rflags, dma_addr_t *local)¶
映射出站記憶體區域。
引數
struct rio_mport *mport主埠。
u16 destid視窗指向的目標 ID
u64 rbase視窗轉換到的 RIO 基地址
u32 size記憶體區域的大小
u32 rflags對映標誌。
dma_addr_t *local對映的記憶體區域的物理地址
返回
0 -- 成功。
描述
此函式將建立從 RIO 空間到本地記憶體的對映。
引數
struct rio_mport *mport主埠
u16 destid對映指向的目標 ID
u64 rstart視窗轉換到的 RIO 基地址
-
u32 rio_mport_get_physefb(struct rio_mport *port, int local, u16 destid, u8 hopcount, u32 *rmap)¶
輔助函式,返回物理層擴充套件特性塊的暫存器偏移量。
引數
struct rio_mport *port發出事務的主埠
int local指示本地主埠或遠端裝置訪問
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
u32 *rmap用於儲存暫存器對映型別資訊的指標位置
引數
u32 comp_tag要匹配的 RIO 元件標記
struct rio_dev *from搜尋中找到的先前的 RIO 裝置,對於新搜尋,為
NULL
描述
迭代已知的 RIO 裝置列表。如果找到具有匹配 comp_tag 的 RIO 裝置,則返回指向其裝置結構的指標。否則,返回 NULL。透過將 NULL 傳遞給 from 引數來啟動新搜尋。否則,如果 from 不為 NULL,則從全域性列表中的下一個裝置繼續搜尋。
-
int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock)¶
為交換機埠設定/清除 LOCKOUT 位 (RIO EM 1.3)。
引數
struct rio_dev *rdev指向 RIO 裝置控制結構的指標
u32 pnum要設定 LOCKOUT 位的交換機埠號
int lock操作:設定 (=1) 或清除 (=0)
-
int rio_enable_rx_tx_port(struct rio_mport *port, int local, u16 destid, u8 hopcount, u8 port_num)¶
啟用給定埠的輸入接收器和輸出傳送器
引數
struct rio_mport *port與 RIO 網路關聯的主埠
int locallocal=1 選擇本地埠,否則訪問的是遠端裝置
u16 destid要檢查主機位的裝置的目標 ID
u8 hopcount到達目標的跳數
u8 port_num要在遠端裝置上啟用的埠(交換機上的埠號)
描述
從通用控制命令和狀態暫存器 (EXT_PTR+0x3C) 返回 0 或 1
引數
struct rio_mport *mport用於傳送事務的主埠
u16 destid網路中的裝置目標 ID
u8 hopcount進入網路的跳數
引數
struct rio_mport *mport與埠寫入關聯的 mport 裝置
union rio_pw_msg *pw_msg指向入站埠寫入訊息的指標
描述
處理入站埠寫入訊息。 如果請求已滿足,則返回 0。
-
u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid, u8 hopcount, u32 from)¶
獲取指向下一個擴充套件功能塊的指標
引數
struct rio_mport *port發出事務的主埠
int local指示本地主埠或遠端裝置訪問
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
u32 from當前擴充套件功能塊頭的偏移量(如果為 0,則從 ExtFeaturePtr 開始)
-
u32 rio_mport_get_feature(struct rio_mport *port, int local, u16 destid, u8 hopcount, int ftr)¶
查詢裝置的擴充套件功能
引數
struct rio_mport * port發出事務的主埠
int local指示本地主埠或遠端裝置訪問
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
int ftr擴充套件功能程式碼
描述
判斷裝置是否支援給定的 RapidIO 功能。 返回請求的擴充套件功能塊在裝置的 RIO 配置空間中的偏移量,或者如果裝置不支援該功能,則返回 0。
引數
struct rio_mport *port用於傳送事務的主埠
u16 destid裝置/交換機的目標 ID
u8 hopcount到達交換機的跳數
int wait_ms最大等待時間,單位為毫秒(0 = 無超時)
描述
嘗試獲取指定主機裝置的鎖。 如果裝置鎖已獲取,則返回 0,如果超時到期,則返回 EINVAL。
引數
struct rio_mport *port用於傳送事務的主埠
u16 destid裝置/交換機的目標 ID
u8 hopcount到達交換機的跳數
描述
如果裝置鎖已釋放,則返回 0;如果失敗,則返回 EINVAL。
-
int rio_route_add_entry(struct rio_dev *rdev, u16 table, u16 route_destid, u8 route_port, int lock)¶
向交換機路由表中新增路由條目
引數
struct rio_dev *rdevRIO 裝置
u16 table路由表 ID
u16 route_destid要路由的目標 ID
u8 route_port要路由的埠號
int lock在交換機裝置標誌上應用硬體鎖(1=鎖定,0=未鎖定)
描述
如果可用,則呼叫特定於交換機的 add_entry() 方法,以將路由條目新增到交換機路由表中。 否則,使用 RapidIO 規範定義的標準 RT 更新方法。 如果交換機具有每個埠的路由表,則可以使用 table 引數選擇特定的路由表,或者可以透過在 table 中傳遞 RIO_GLOBAL_TABLE 來使用標準(或全域性)表。
成功時返回 0,失敗時返回 -EINVAL。
-
int rio_route_get_entry(struct rio_dev *rdev, u16 table, u16 route_destid, u8 *route_port, int lock)¶
從交換機路由表中讀取條目
引數
struct rio_dev *rdevRIO 裝置
u16 table路由表 ID
u16 route_destid要路由的目標 ID
u8 *route_port指向要讀取的埠號的指標
int lock在交換機裝置標誌上應用硬體鎖(1=鎖定,0=未鎖定)
描述
如果可用,則呼叫特定於交換機的 get_entry() 方法,以從交換機路由表中獲取路由條目。 否則,使用 RapidIO 規範定義的標準 RT 讀取方法。 如果交換機具有每個埠的路由表,則可以使用 table 引數選擇特定的路由表,或者可以透過在 table 中傳遞 RIO_GLOBAL_TABLE 來使用標準(或全域性)表。
成功時返回 0,失敗時返回 -EINVAL。
引數
struct rio_dev *rdevRIO 裝置
u16 table路由表 ID
int lock在交換機裝置標誌上應用硬體鎖(1=鎖定,0=未鎖定)
描述
如果可用,則呼叫特定於交換機的 clr_table() 方法來清除交換機路由表。 否則,使用 RapidIO 規範定義的標準 RT 寫入方法。 如果交換機具有每個埠的路由表,則可以使用 table 引數選擇特定的路由表,或者可以透過在 table 中傳遞 RIO_GLOBAL_TABLE 來使用標準(或全域性)表。
成功時返回 0,失敗時返回 -EINVAL。
-
struct dma_chan *rio_request_mport_dma(struct rio_mport *mport)¶
請求與指定的本地 RapidIO mport 裝置關聯的、支援 RapidIO 的 DMA 通道。
引數
struct rio_mport *mport用於執行 DMA 資料傳輸的 RIO mport
描述
返回指向已分配 DMA 通道的指標,如果失敗,則返回 NULL。
-
void rio_release_dma(struct dma_chan *dchan)¶
釋放指定的 DMA 通道
引數
struct dma_chan *dchan要釋放的 DMA 通道
-
struct dma_async_tx_descriptor *rio_dma_prep_xfer(struct dma_chan *dchan, u16 destid, struct rio_dma_data *data, enum dma_transfer_direction direction, unsigned long flags)¶
用於 DMAENGINE 定義的 device_prep_slave_sg 回撥的 RapidIO 特定包裝器。
引數
struct dma_chan *dchan要配置的 DMA 通道
u16 destid目標 RapidIO 裝置目標 ID
struct rio_dma_data *dataRIO 特定資料描述符
enum dma_transfer_direction directionDMA 資料傳輸方向(TO 或 FROM 裝置)
unsigned long flagsdmaengine 定義的標誌
描述
初始化支援 RapidIO 的 DMA 通道,用於指定的資料傳輸。 使用 DMA 通道私有擴充套件來傳遞與遠端目標 RIO 裝置相關的資訊。
返回
- 如果成功,則返回指向 DMA 事務描述符的指標,
如果失敗,則返回錯誤值指標或 NULL。
引數
int mport_id要為其設定結構掃描例程的 mport 裝置 ID (RIO_MPORT_ANY = 為所有可用的 mport 設定)
struct rio_scan *scan_ops列舉/發現操作結構
描述
使用 RapidIO 子系統註冊列舉/發現操作,並將其附加到指定的 mport 裝置(如果指定了 RIO_MPORT_ANY,則附加到所有可用的 mport)。
如果 mport 已經附加了一個列舉器,則返回錯誤。 對於 RIO_MPORT_ANY,跳過具有有效掃描例程的 mport(無錯誤)。
內部¶
本章包含 RapidIO 子系統的自動生成的文件。
結構體¶
-
struct rio_switch¶
RIO 交換機資訊
定義:
struct rio_switch {
struct list_head node;
u8 *route_table;
u32 port_ok;
struct rio_switch_ops *ops;
spinlock_t lock;
struct rio_dev *nextdev[];
};
成員
node全域性交換機列表中的節點
route_table交換機路由表的副本
port_ok每個埠的狀態(每個埠一位) - OK=1 或 UNINIT=0
ops指向交換機特定操作的指標
lock用於序列化操作更新的鎖
nextdev指向下一個附加裝置的每個埠指標的陣列
-
struct rio_switch_ops¶
每個交換機的操作
定義:
struct rio_switch_ops {
struct module *owner;
int (*add_entry) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 route_port);
int (*get_entry) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 *route_port);
int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table);
int (*set_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, u8 sw_domain);
int (*get_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, u8 *sw_domain);
int (*em_init) (struct rio_dev *dev);
int (*em_handle) (struct rio_dev *dev, u8 swport);
};
成員
owner此結構的模組所有者
add_entry用於交換機特定路由新增函式的回撥
get_entry用於交換機特定路由獲取函式的回撥
clr_table用於交換機特定清除路由表函式的回撥
set_domain用於交換機特定域設定函式的回撥
get_domain用於交換機特定域獲取函式的回撥
em_init用於交換機特定錯誤管理初始化函式的回撥
em_handle用於交換機特定錯誤管理處理程式函式的回撥
描述
定義初始化/控制特定 RIO 交換機裝置所需的操作。
-
struct rio_dev¶
RIO 裝置資訊
定義:
struct rio_dev {
struct list_head global_list;
struct list_head net_list;
struct rio_net *net;
bool do_enum;
u16 did;
u16 vid;
u32 device_rev;
u16 asm_did;
u16 asm_vid;
u16 asm_rev;
u16 efptr;
u32 pef;
u32 swpinfo;
u32 src_ops;
u32 dst_ops;
u32 comp_tag;
u32 phys_efptr;
u32 phys_rmap;
u32 em_efptr;
u64 dma_mask;
struct rio_driver *driver;
struct device dev;
struct resource riores[RIO_MAX_DEV_RESOURCES];
int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step);
u16 destid;
u8 hopcount;
struct rio_dev *prev;
atomic_t state;
struct rio_switch rswitch[];
};
成員
global_list所有 RIO 裝置列表中的節點
net_list網路中 RIO 裝置列表中的節點
net此裝置所屬的網路
do_enum列舉標誌
did裝置 ID
vid供應商 ID
device_rev裝置修訂版
asm_did程式集裝置 ID
asm_vid程式集供應商 ID
asm_rev程式集修訂版
efptr擴充套件功能指標
pef處理元件功能
swpinfo交換機埠資訊
src_ops源操作功能
dst_ops目標操作功能
comp_tagRIO 元件標記
phys_efptrRIO 裝置擴充套件功能指標
phys_rmapLP-Serial 暫存器對映型別(1 或 2)
em_efptrRIO 錯誤管理功能指標
dma_mask此裝置實現的 RIO 地址的位掩碼
driver宣告此裝置的驅動程式
dev裝置模型裝置
rioresRIO 資源,此裝置擁有
pwcback此裝置的埠寫入回撥函式
destid網路目標 ID(或交換機的關聯 destid)
hopcount到此裝置的跳數
prev連線到當前 RIO 裝置的上一個 RIO 裝置
state裝置狀態
rswitchstruct rio_switch(如果對該裝置有效)
-
struct rio_msg¶
RIO 訊息事件
定義:
struct rio_msg {
struct resource *res;
void (*mcback) (struct rio_mport * mport, void *dev_id, int mbox, int slot);
};
成員
res郵箱資源
mcback訊息事件回撥
-
struct rio_dbell¶
RIO 門鈴事件
定義:
struct rio_dbell {
struct list_head node;
struct resource *res;
void (*dinb) (struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info);
void *dev_id;
};
成員
node門鈴事件列表中的節點
res門鈴資源
dinb門鈴事件回撥
dev_id裝置特定的指標,用於傳遞事件
-
struct rio_mport¶
RIO 主埠資訊
定義:
struct rio_mport {
struct list_head dbells;
struct list_head pwrites;
struct list_head node;
struct list_head nnode;
struct rio_net *net;
struct mutex lock;
struct resource iores;
struct resource riores[RIO_MAX_MPORT_RESOURCES];
struct rio_msg inb_msg[RIO_MAX_MBOX];
struct rio_msg outb_msg[RIO_MAX_MBOX];
int host_deviceid;
struct rio_ops *ops;
unsigned char id;
unsigned char index;
unsigned int sys_size;
u32 phys_efptr;
u32 phys_rmap;
unsigned char name[RIO_MAX_MPORT_NAME];
struct device dev;
void *priv;
#ifdef CONFIG_RAPIDIO_DMA_ENGINE;
struct dma_device dma;
#endif;
struct rio_scan *nscan;
atomic_t state;
unsigned int pwe_refcnt;
};
成員
dbells門鈴事件列表
pwrites埠寫入事件列表
node全域性主埠列表中的節點
nnode網路主埠列表中的節點
net此 mport 連線到的 RIO 網路
lock用於同步列表操作的鎖
iores此主埠介面擁有的 I/O 記憶體資源
riores此主埠介面擁有的 RIO 資源
inb_msgRIO 入站訊息事件描述符
outb_msgRIO 出站訊息事件描述符
host_deviceid與此主埠關聯的主機裝置 ID
ops配置空間功能
id埠 ID,在所有埠中都是唯一的
index埠索引,在相同型別的所有埠介面中都是唯一的
sys_sizeRapidIO 通用傳輸系統大小
phys_efptrRIO 埠擴充套件功能指標
phys_rmapLP-Serial EFB 暫存器對映型別(1 或 2)。
name埠名稱字串
dev與 mport 關聯的裝置結構
priv主埠私有資料
dma與 mport 關聯的 DMA 裝置
nscanRapidIO 網路列舉/發現操作
statemport 裝置狀態
pwe_refcnt埠寫入使能引用計數器,用於跟蹤使能/停用請求
-
struct rio_net¶
RIO 網路資訊
定義:
struct rio_net {
struct list_head node;
struct list_head devices;
struct list_head switches;
struct list_head mports;
struct rio_mport *hport;
unsigned char id;
struct device dev;
void *enum_data;
void (*release)(struct rio_net *net);
};
成員
nodeRIO 網路全域性列表中的節點
devices此網路中的裝置列表
switches此網路中的交換機列表
mports訪問此網路的主埠列表
hport用於訪問此網路的預設埠
idRIO 網路 ID
dev裝置物件
enum_data特定於網路列舉器的私有資料
release列舉器特定的釋放回調
-
struct rio_mport_attr¶
RIO mport 裝置屬性
定義:
struct rio_mport_attr {
int flags;
int link_speed;
int link_width;
int dma_max_sge;
int dma_max_size;
int dma_align;
};
成員
flagsmport 裝置能力標誌
link_speedSRIO 連結速度值(由 RapidIO 規範定義)
link_widthSRIO 連結寬度值(由 RapidIO 規範定義)
dma_max_sgeDMA 通道可以處理的 SG 列表條目的數量
dma_max_size單個 DMA 傳輸(SG 條目)中的最大位元組數
dma_alignDMA 操作的對齊偏移量(與其他 DMA 操作一樣)
-
struct rio_ops¶
底層 RIO 配置空間操作
定義:
struct rio_ops {
int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len, u32 *data);
int (*lcwrite) (struct rio_mport *mport, int index, u32 offset, int len, u32 data);
int (*cread) (struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 *data);
int (*cwrite) (struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 data);
int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
int (*pwenable) (struct rio_mport *mport, int enable);
int (*open_outb_mbox)(struct rio_mport *mport, void *dev_id, int mbox, int entries);
void (*close_outb_mbox)(struct rio_mport *mport, int mbox);
int (*open_inb_mbox)(struct rio_mport *mport, void *dev_id, int mbox, int entries);
void (*close_inb_mbox)(struct rio_mport *mport, int mbox);
int (*add_outb_message)(struct rio_mport *mport, struct rio_dev *rdev, int mbox, void *buffer, size_t len);
int (*add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
void *(*get_inb_message)(struct rio_mport *mport, int mbox);
int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart, u64 rstart, u64 size, u32 flags);
void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart);
int (*query_mport)(struct rio_mport *mport, struct rio_mport_attr *attr);
int (*map_outb)(struct rio_mport *mport, u16 destid, u64 rstart, u32 size, u32 flags, dma_addr_t *laddr);
void (*unmap_outb)(struct rio_mport *mport, u16 destid, u64 rstart);
};
成員
lcread執行配置空間的本地(主埠)讀取的回撥。
lcwrite執行配置空間的本地(主埠)寫入的回撥。
cread執行配置空間的網路讀取的回撥。
cwrite執行配置空間的網路寫入的回撥。
dsend傳送門鈴訊息的回撥。
pwenable啟用/停用埠寫入訊息處理的回撥。
open_outb_mbox初始化出站郵箱的回撥。
close_outb_mbox關閉出站郵箱的回撥。
open_inb_mbox初始化入站郵箱的回撥。
close_inb_mbox關閉入站郵箱的回撥。
add_outb_message將訊息新增到出站郵箱佇列的回撥。
add_inb_buffer將緩衝區新增到入站郵箱佇列的回撥。
get_inb_message從入站郵箱佇列獲取訊息的回撥。
map_inb將 RapidIO 地址區域對映到本地記憶體空間的回撥。
unmap_inb取消對映使用 map_inb() 對映的 RapidIO 地址區域的回撥。
query_mport查詢 mport 裝置屬性的回撥。
map_outb將出站地址區域對映到本地記憶體空間的回撥。
unmap_outb取消映射出站 RapidIO 地址區域的回撥。
-
struct rio_driver¶
RIO 驅動程式資訊
定義:
struct rio_driver {
struct list_head node;
char *name;
const struct rio_device_id *id_table;
int (*probe) (struct rio_dev * dev, const struct rio_device_id * id);
void (*remove) (struct rio_dev * dev);
void (*shutdown)(struct rio_dev *dev);
int (*suspend) (struct rio_dev * dev, u32 state);
int (*resume) (struct rio_dev * dev);
int (*enable_wake) (struct rio_dev * dev, u32 state, int enable);
struct device_driver driver;
};
成員
node驅動程式列表中的節點
nameRIO 驅動程式名稱
id_table要與此驅動程式關聯的 RIO 裝置 ID
probeRIO 裝置已插入
removeRIO 裝置已移除
shutdown關閉通知回撥
suspendRIO 裝置已掛起
resumeRIO 裝置已喚醒
enable_wakeRIO 裝置啟用喚醒事件
driverLDM 驅動程式結構
描述
提供有關 RIO 裝置驅動程式的資訊,用於插入/移除和電源管理。
-
struct rio_scan¶
RIO 列舉和發現操作
定義:
struct rio_scan {
struct module *owner;
int (*enumerate)(struct rio_mport *mport, u32 flags);
int (*discover)(struct rio_mport *mport, u32 flags);
};
成員
owner此結構的模組所有者
enumerate執行 RapidIO 結構列舉的回撥。
discover執行 RapidIO 結構發現的回撥。
-
struct rio_scan_node¶
列表節點,用於向 RapidIO 核心註冊 RapidIO 列舉和發現方法。
定義:
struct rio_scan_node {
int mport_id;
struct list_head node;
struct rio_scan *ops;
};
成員
mport_id此列舉器服務的 mport(網路)的 ID
node註冊列舉器的全域性列表中的節點
opsRIO 列舉和發現操作
列舉和發現¶
引數
struct rio_net *netRIO 網路
描述
返回指定 RIO 網路的下一個可用裝置目標 ID。 將分配的 ID 標記為正在使用。 如果沒有可用的新 destID,則返回 RIO_INVALID_DESTID。
引數
struct rio_net *netRIO 網路
u16 destid要保留的 destID
描述
嘗試保留指定的 destID。 如果成功,則返回 0。
引數
struct rio_net *netRIO 網路
u16 destid要釋放的 destID
描述
使指定的 destID 可供使用。
引數
struct rio_net *netRIO 網路
引數
struct rio_net *netRIO 網路
u16 from搜尋將從其繼續的目標 ID
引數
struct rio_mport *portRIO 主埠
u16 destid裝置的目標 ID
u8 hopcount到裝置的跳數
描述
從裝置讀取基本/擴充套件裝置 ID。 返回 8/16 位裝置 ID。
引數
struct rio_mport *portRIO 主埠
u16 destid裝置的目標 ID
u8 hopcount到裝置的跳數
u16 did要寫入的裝置 ID 值
描述
從裝置寫入基本/擴充套件裝置 ID。
引數
struct rio_net *net要在其上執行的 RIO 網路
描述
使用列舉完成標誌標記每個裝置上的元件標記 CSR。 完成後,它將釋放每個裝置上的主機鎖。 成功時返回 0,失敗時返回 -EINVAL。
引數
struct rio_mport *port發出事務的主埠
描述
使用主機裝置 ID 值設定本地主機主埠鎖和目標 ID 暫存器。 主機裝置 ID 值由平臺提供。 成功時返回 0,失敗時返回 -1。
引數
struct rio_mport *port發出事務的主埠
int src_opsRIO 裝置源操作
int dst_opsRIO 裝置目標操作
描述
檢查提供的 src_ops 和 dst_ops 是否具有必要的事務能力,這些能力指示裝置是否將實現目標 ID 暫存器。 如果為真,則返回 1,如果為假,則返回 0。
引數
struct device *dev與 RIO 裝置結構關聯的 LDM 裝置
描述
獲取與 RIO 裝置結構關聯的 RIO 裝置結構。 RIO 裝置結構將被釋放。
引數
struct rio_dev *rdevRIO 裝置
描述
獲取 RIO 裝置處理元素功能暫存器的內容並測試交換機功能。 如果裝置是交換機,則返回 1,如果不是交換機,則返回 0。 RIO 裝置結構將被釋放。
-
struct rio_dev *rio_setup_device(struct rio_net *net, struct rio_mport *port, u16 destid, u8 hopcount, int do_enum)¶
分配並設定 RIO 裝置
引數
struct rio_net *netRIO 網路
struct rio_mport *port用於傳送事務的主埠
u16 destid當前目標 ID
u8 hopcount當前跳數
int do_enum列舉/發現模式標誌
描述
分配 RIO 裝置並根據配置空間內容配置欄位。 如果裝置具有目標 ID 暫存器,則在列舉模式下分配目標 ID,或在發現模式下從配置空間讀取目標 ID。 如果裝置具有交換機功能,則會分配交換機並進行適當配置。 成功時返回指向 RIO 裝置的指標,失敗時返回 NULL。
引數
struct rio_dev *rdevRapidIO裝置物件
int sp交換埠號
描述
讀取特定交換埠的埠錯誤狀態CSR,以確定該埠是否具有活動連結。 如果埠處於活動狀態,則返回 RIO_PORT_N_ERR_STS_PORT_OK,如果埠處於非活動狀態,則返回 0。
引數
struct rio_mport *port用於傳送事務的主埠
u8 hopcount到裝置的跳數
描述
用於列舉期間讀取RIO裝置上的主機裝置ID鎖定CSR。 返回鎖定暫存器的值。
-
int rio_enum_peer(struct rio_net *net, struct rio_mport *port, u8 hopcount, struct rio_dev *prev, int prev_port)¶
透過主埠遞迴列舉RIO網路
引數
struct rio_net *net正在列舉的RIO網路
struct rio_mport *port用於傳送事務的主埠
u8 hopcount進入網路的跳數
struct rio_dev *prev連線到列舉物件的先前RIO裝置
int prev_port先前RIO裝置上的埠
描述
遞迴列舉RIO網路。 事務透過傳入的 **port** 中的主埠傳送。
引數
struct rio_mport *port用於傳送事務的主埠
描述
測試PGCCSR發現位是否為非零值(列舉完成標誌)。 如果列舉完成,則返回 1,如果列舉未完成,則返回 0。
-
int rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, u8 hopcount, struct rio_dev *prev, int prev_port)¶
透過主埠遞迴發現RIO網路
引數
struct rio_net *net正在發現的RIO網路
struct rio_mport *port用於傳送事務的主埠
u16 destid網路中的當前目標ID
u8 hopcount進入網路的跳數
struct rio_dev *prev先前的rio_dev
int prev_port先前的埠號
描述
遞迴發現RIO網路。 事務透過傳入的 **port** 中的主埠傳送。
引數
struct rio_mport *port要測試的主埠
描述
讀取主埠的埠錯誤狀態CSR,以確定該埠是否具有活動連結。 如果主埠處於活動狀態,則返回 RIO_PORT_N_ERR_STS_PORT_OK,如果主埠處於非活動狀態,則返回 0。
引數
struct rio_net *net要執行更新的RIO網路
描述
對於每個列舉的裝置,請確保系統中的每個交換機都具有正確的路由條目。 為在第一次列舉過程中交換機未知裝置新增路由。
引數
struct rio_dev *rdevRIO 裝置
描述
對於每個列舉的交換機,呼叫裝置特定的錯誤管理初始化例程(如果由交換機驅動程式提供)。
引數
struct rio_mport *mport用於傳送事務的主埠
u32 flags列舉控制標誌
描述
啟動列舉過程。 如果有人已經枚舉了我們的主埠裝置,則放棄。 如果沒有且我們有一個活動的連結,則啟動遞迴對等列舉。 如果列舉成功,則返回 0,如果列舉失敗,則返回 -EBUSY。
引數
struct rio_net *net要在其上執行路由表掃描的RIO網路
描述
對於每個交換機裝置,透過從交換機複製現有路由條目來生成路由表。
引數
struct rio_mport *mport用於傳送事務的主埠
u32 flags發現控制標誌
描述
啟動發現過程。 如果我們有一個活動的連結,則等待列舉完成的訊號(如果允許等待)。 當列舉完成發出訊號時,啟動遞迴對等發現。 如果發現成功,則返回 0,如果失敗,則返回 -EBUSY。
-
int rio_basic_attach(void)¶
引數
void無引數
描述
當此列舉/發現方法作為模組載入時,此函式會為所有可用的RapidIO mport設備註冊其特定的列舉和發現例程。“scan”命令列引數控制模組自動啟動RapidIO列舉/發現的能力。
成功返回0,如果無法註冊則返回-EIO。
此列舉/發現方法無法解除安裝,因此不提供匹配的cleanup_module例程。
驅動程式功能¶
-
int rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res, void (*dinb)(struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info))¶
繫結入站門鈴回撥
引數
struct rio_mport *mport要繫結門鈴回撥的RIO主埠
void *dev_id裝置特定的指標,用於傳遞事件
struct resource *res門鈴訊息資源
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst, u16 info)接收到門鈴時執行的回撥函式
描述
將門鈴資源/回撥對新增到埠的門鈴事件列表中。 如果請求已滿足,則返回0。
引數
struct rio_dev *rdevRIO裝置未能響應
struct rio_dev **nrdev到rdev的路由上的最後一個活動裝置
int *npnum到rdev的路由上nrdev的埠號
描述
遵循到指定RIO裝置的路由,以確定路由上最後一個可用裝置(以及相應的RIO埠)。
引數
struct rio_dev *rdev指向 RIO 裝置控制結構的指標
-
int rio_get_input_status(struct rio_dev *rdev, int pnum, u32 *lnkresp)¶
傳送連結請求/輸入狀態控制符號,並返回連結響應(如果請求)。
引數
struct rio_dev *rdevRIO devive發出輸入狀態命令
int pnum裝置埠號以發出命令
u32 *lnkresp來自連結夥伴的響應
引數
struct rio_dev *rdev指向 RIO 裝置控制結構的指標
u32 pnum要清除錯誤的交換機埠號
u32 err_status埠錯誤狀態(如果0從裝置讀取暫存器)
描述
TODO:當前,此例程與為idt_gen3 RapidIO交換機裝置指定的恢復過程不相容。 必須對其進行審查以實現與所有可用裝置相容的通用恢復過程。 IDT gen3交換機驅動程式現在實現HW特定的錯誤處理程式,該處理程式向埠發出軟埠重置以重置ERR_STOP位和ackID。
-
int rio_std_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 route_port)¶
使用RIO規範修訂版1.3中定義的標準暫存器新增交換機路由表條目
引數
struct rio_mport *mport發出事務的主埠
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
u16 table路由表ID(全域性或埠特定)
u16 route_destidRT中的destID條目
u8 route_port指定destID的目標埠
-
int rio_std_route_get_entry(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 *route_port)¶
讀取與使用RIO規範修訂版1.3中定義的標準暫存器指定的destID關聯的交換機路由表條目(埠號)
引數
struct rio_mport *mport發出事務的主埠
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
u16 table路由表ID(全域性或埠特定)
u16 route_destidRT中的destID條目
u8 *route_port指定destID的返回目標埠
-
int rio_std_route_clr_table(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table)¶
使用 RIO 規範 rev.1.3 中定義的標準暫存器清除交換機路由表。
引數
struct rio_mport *mport發出事務的主埠
u16 destid裝置的目標 ID
u8 hopcount到裝置的中轉站數
u16 table路由表ID(全域性或埠特定)
-
int rio_mport_scan(int mport_id)¶
在指定的 mport 上執行列舉/發現
引數
int mport_idmport 裝置的編號 (ID)
-
RIO_LOP_READ¶
RIO_LOP_READ (size, type, len)
生成 rio_local_read_config_* 函式
引數
大小配置空間讀取的大小(8、16、32 位)
型別value 引數的 C 型別
長度配置空間讀取的長度(1、2、4 位元組)
描述
生成用於訪問本地裝置上配置空間暫存器的 rio_local_read_config_* 函式。
-
RIO_LOP_WRITE¶
RIO_LOP_WRITE (size, type, len)
生成 rio_local_write_config_* 函式
引數
大小配置空間寫入的大小(8、16、32 位)
型別value 引數的 C 型別
長度配置空間寫入的長度(1、2、4 位元組)
描述
生成用於訪問本地裝置上配置空間暫存器的 rio_local_write_config_* 函式。
-
RIO_OP_READ¶
RIO_OP_READ (size, type, len)
生成 rio_mport_read_config_* 函式
引數
大小配置空間讀取的大小(8、16、32 位)
型別value 引數的 C 型別
長度配置空間讀取的長度(1、2、4 位元組)
描述
生成用於訪問本地裝置上配置空間暫存器的 rio_mport_read_config_* 函式。
-
RIO_OP_WRITE¶
RIO_OP_WRITE (size, type, len)
生成 rio_mport_write_config_* 函式
引數
大小配置空間寫入的大小(8、16、32 位)
型別value 引數的 C 型別
長度配置空間寫入的長度(1、2、4 位元組)
描述
生成用於訪問本地裝置上配置空間暫存器的 rio_mport_write_config_* 函式。
裝置模型支援¶
-
const struct rio_device_id *rio_match_device(const struct rio_device_id *id, const struct rio_dev *rdev)¶
判斷 RIO 裝置是否具有匹配的 RIO 裝置 ID 結構體
引數
const struct rio_device_id *id要匹配的 RIO 裝置 ID 結構體
const struct rio_dev *rdev要匹配的 RIO 裝置結構體
從驅動程式探測和匯流排匹配中使用,以檢查 RIO 裝置是否匹配 RIO 驅動程式提供的裝置 ID 結構體。如果存在匹配項,則返回匹配的
struct rio_device_id,如果沒有匹配項,則返回NULL。
引數
struct device *dev要匹配的 RIO 裝置結構體
描述
當 drv 宣告 rio_dev 時,返回 0 並設定 rio_dev->driver,否則返回錯誤
引數
struct device *dev要匹配的 RIO 裝置結構體
描述
從系統中移除 RIO 裝置。如果它有關聯的驅動程式,則執行驅動程式的 remove() 方法。然後更新引用計數。
-
int rio_match_bus(struct device *dev, const struct device_driver *drv)¶
判斷 RIO 裝置結構體是否具有匹配的 RIO 驅動程式裝置 ID 結構體
引數
struct device *dev要匹配的標準裝置結構體
const struct device_driver *drv包含要匹配的 ID 的標準驅動程式結構體
由驅動程式使用,以檢查系統中存在的 RIO 裝置是否在其支援的裝置列表中。如果存在匹配的
struct rio_device_id,則返回 1,如果沒有匹配項,則返回 0。
-
int rio_bus_init(void)¶
向裝置模型註冊 RapidIO 匯流排
引數
void無引數
描述
向 Linux 裝置模型註冊 RIO mport 裝置類和 RIO 匯流排型別。
PPC32 支援¶
-
int fsl_local_config_read(struct rio_mport *mport, int index, u32 offset, int len, u32 *data)¶
生成 MPC85xx 本地配置空間讀取
引數
struct rio_mport *mportRapidIO 主埠資訊
int indexRapdiIO 介面的 ID
u32 offset配置空間的偏移量
int len維護事務的長度(以位元組為單位)
u32 *data要讀取到的值
描述
生成 MPC85xx 本地配置空間讀取。成功時返回 0,失敗時返回 -EINVAL。
-
int fsl_local_config_write(struct rio_mport *mport, int index, u32 offset, int len, u32 data)¶
生成 MPC85xx 本地配置空間寫入
引數
struct rio_mport *mportRapidIO 主埠資訊
int indexRapdiIO 介面的 ID
u32 offset配置空間的偏移量
int len維護事務的長度(以位元組為單位)
u32 data要寫入的值
描述
生成 MPC85xx 本地配置空間寫入。成功時返回 0,失敗時返回 -EINVAL。
-
int fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 *val)¶
生成 MPC85xx 讀取維護事務
引數
struct rio_mport *mportRapidIO 主埠資訊
int indexRapdiIO 介面的 ID
u16 destid事務的目標 ID
u8 hopcount到目標裝置的跳數
u32 offset配置空間的偏移量
int len維護事務的長度(以位元組為單位)
u32 *val要讀取到的位置
描述
生成 MPC85xx 讀取維護事務。成功時返回 0,失敗時返回 -EINVAL。
-
int fsl_rio_config_write(struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 val)¶
生成 MPC85xx 寫入維護事務
引數
struct rio_mport *mportRapidIO 主埠資訊
int indexRapdiIO 介面的 ID
u16 destid事務的目標 ID
u8 hopcount到目標裝置的跳數
u32 offset配置空間的偏移量
int len維護事務的長度(以位元組為單位)
u32 val要寫入的值
描述
生成 MPC85xx 寫入維護事務。成功時返回 0,失敗時返回 -EINVAL。
-
int fsl_rio_setup(struct platform_device *dev)¶
設定 Freescale PowerPC RapidIO 介面
引數
struct platform_device *devplatform_device 指標
描述
初始化 MPC85xx RapidIO 硬體介面,使用系統特定的資訊配置主埠,並將主埠註冊到 RapidIO 子系統。
鳴謝¶
以下人員直接或間接地為 RapidIO 子系統做出了貢獻
Matt Portermporter@kernel.crashing.org
Randy Vinsonrvinson@mvista.com
Dan Malekdan@embeddedalley.com
以下人員為本文件做出了貢獻
Matt Portermporter@kernel.crashing.org