RapidIO 子系統 mport 字元裝置驅動程式 (rio_mport_cdev.c)

1. 概述

該裝置驅動程式是 RapidIO.org 軟體任務組 (STG) 內德州儀器、Freescale、Prodrive Technologies、諾基亞網路、BAE 和 IDT 之間合作的成果。 還收到了來自 RapidIO.org 其他成員的額外意見。 目標是建立一個字元模式驅動程式介面,將 RapidIO 裝置的功能直接暴露給應用程式,以便眾多且多樣的 RapidIO 實現可以互操作。

此驅動程式 (MPORT_CDEV) 提供對使用者空間應用程式的基本 RapidIO 子系統操作的訪問。 大多數 RapidIO 操作都透過 ‘ioctl’ 系統呼叫支援。

載入後,此裝置驅動程式會在 /dev 目錄中為每個註冊的 RapidIO mport 裝置建立名為 rio_mportX 的檔案系統節點。 節點名稱中的 ‘X’ 與分配給每個本地 mport 裝置的唯一埠 ID 匹配。

使用可用的 ioctl 命令集,使用者空間應用程式可以執行以下 RapidIO 匯流排和子系統操作

  • 從 mport 裝置的配置暫存器讀取和寫入(RIO_MPORT_MAINT_READ_LOCAL/RIO_MPORT_MAINT_WRITE_LOCAL)

  • 從遠端 RapidIO 裝置的配置暫存器讀取和寫入。 此操作在 RIO 規範中定義為 RapidIO 維護讀取/寫入。(RIO_MPORT_MAINT_READ_REMOTE/RIO_MPORT_MAINT_WRITE_REMOTE)

  • 設定 mport 裝置的 RapidIO 目標 ID (RIO_MPORT_MAINT_HDID_SET)

  • 設定 mport 裝置的 RapidIO 元件標籤 (RIO_MPORT_MAINT_COMPTAG_SET)

  • 查詢 mport 裝置的邏輯索引 (RIO_MPORT_MAINT_PORT_IDX_GET)

  • 查詢 mport 裝置的功能和 RapidIO 鏈路配置 (RIO_MPORT_GET_PROPERTIES)

  • 啟用/停用向用戶空間應用程式報告 RapidIO 門鈴事件 (RIO_ENABLE_DOORBELL_RANGE/RIO_DISABLE_DOORBELL_RANGE)

  • 啟用/停用向用戶空間應用程式報告 RIO 埠寫入事件 (RIO_ENABLE_PORTWRITE_RANGE/RIO_DISABLE_PORTWRITE_RANGE)

  • 查詢/控制透過此驅動程式報告的事件型別:門鈴、埠寫入或兩者 (RIO_SET_EVENT_MASK/RIO_GET_EVENT_MASK)

  • 為特定大小、RapidIO 目標 ID、跳數和請求型別配置/對映 mport 的出站請求視窗 (RIO_MAP_OUTBOUND/RIO_UNMAP_OUTBOUND)

  • 為特定大小、RapidIO 基址和本地記憶體基址配置/對映 mport 的入站請求視窗 (RIO_MAP_INBOUND/RIO_UNMAP_INBOUND)

  • 為與遠端 RapidIO 裝置進行 DMA 資料傳輸分配/釋放連續的 DMA 連貫記憶體緩衝區 (RIO_ALLOC_DMA/RIO_FREE_DMA)

  • 啟動與遠端 RapidIO 裝置的 DMA 資料傳輸 (RIO_TRANSFER)。 支援阻塞、非同步和釋出(也稱為“fire-and-forget”)資料傳輸模式。

  • 檢查/等待非同步 DMA 資料傳輸完成 (RIO_WAIT_FOR_ASYNC)

  • 管理 RapidIO 子系統支援的裝置物件 (RIO_DEV_ADD/RIO_DEV_DEL)。 這允許將各種 RapidIO 結構列舉演算法實現為使用者空間應用程式,同時使用核心 RapidIO 子系統提供的剩餘功能。

2. 硬體相容性

此裝置驅動程式使用核心 RapidIO 子系統定義的標準介面,因此它可以與 RapidIO 子系統註冊的任何 mport 裝置驅動程式一起使用,但受可用 mport 實現的限制。

目前最常見的限制是特定 mport 裝置的 RapidIO 特定 DMA 引擎框架的可用性。 使用者在計劃使用此驅動程式時應驗證其平臺的可用功能

  • IDT Tsi721 PCIe-to-RapidIO 橋接裝置及其 mport 裝置驅動程式與此驅動程式完全相容。

  • Freescale SoC ‘fsl_rio’ mport 驅動程式沒有 RapidIO 特定 DMA 引擎支援的實現,因此 mport_cdev 驅動程式的 DMA 資料傳輸不可用。

3. 模組引數

  • ‘dma_timeout’
    • DMA 傳輸完成超時(以毫秒為單位,預設值為 3000)。 此引數為 SYNC 模式 DMA 傳輸請求和 RIO_WAIT_FOR_ASYNC ioctl 請求設定最大完成等待時間。

  • ‘dbg_level’
    • 此引數允許控制此裝置驅動程式生成的除錯資訊的數量。 此引數由對應於特定功能塊的一組位掩碼形成。 有關掩碼定義,請參見 ‘drivers/rapidio/devices/rio_mport_cdev.c’ 此引數可以動態更改。 使用 CONFIG_RAPIDIO_DEBUG=y 啟用頂層除錯輸出。

4. 已知問題

無。

5. 使用者空間應用程式和 API

可從 RapidIO.org 獲得使用此裝置驅動程式的 API 庫和應用程式。

6. TODO 列表

  • 新增對傳送/接收“原始”RapidIO 訊息傳遞資料包的支援。

  • 在 RapidIO 特定的 DMA 不可用時,新增記憶體對映的 DMA 資料傳輸作為選項。