Aros/開發者/文件/HIDD/PCI
我們處理 PCI 的官方 API 是透過一組 HIDD 類。Prometheus.library 只是這些 HIDD 之上的一個包裝器。prometheus.library 不是一個更高級別的 API,它只提供 PCI 類可以提供的子集。PCI 類唯一缺少的是 AddIntServer() 和 RemIntServer() 方法。
您可以向 PCI 子系統詢問可用裝置,然後對每個裝置使用 PCIDevice 物件的方法。PCIDevice 物件本身可能在內部繫結到系統中任何當前活動的 PCIDriver。是的,系統中可以同時使用多個 PCIDriver。
因此它對於外部程式碼來說是一個不透明的驅動程式元件。
另一方面,PCI HIDD 只有一個對外部程式碼有用的方法:EnumDevices。它按用途劃分。程式碼應該使用 PCIDevice 物件。
向 PCI 子系統詢問可用裝置,然後對每個裝置使用 PCIDevice 物件的方法。PCIDevice 物件本身可能在內部繫結到系統中任何當前活動的 PCIDriver。是的,系統中可以同時使用多個 PCIDriver。
記憶體相關的操作是否必須透過 PCIDriver 物件完成,例如 AllocPCIMem 方法?將這些方法新增到 PCIDevice 類中沒有問題。由於 PCIDevice 物件確切地知道哪個驅動程式處理它,因此它可以輕鬆地將方法委託給相應的驅動程式。
閱讀 Aros-Exec 執行緒。
對我來說,prometheus.library 對於 PCI HIDD 的意義就像 (cyber)graphics.library 對於圖形 HIDD 的意義一樣。例如,據我所知,我們不鼓勵應用程式直接呼叫圖形 HIDD。
或
PCI.hidd 代表一個子系統,就像 graphics.library 代表一個系統一樣。graphics.hidd 是 graphics.library 子系統中的一個驅動程式元件,就像 PCI-DRIVER.hidd 是 PCI.hidd 中的一個驅動程式元件一樣。但是,在訪問 PCI 子系統時必須使用 PCI-DRIVER HIDD,因此它對於外部程式碼來說不是一個不透明的驅動程式元件。另一方面,PCI HIDD 只有一個對外部程式碼有用的方法:EnumDevices。因此,在您的比較中沒有看到真正的對稱性。
在 AROS 的 PCI 子系統之前,研究過其他解決方案,但沒有一個令人滿意。特別是 openpci 使用複製貼上的 linux 標頭檔案。更不用說,在那些日子裡,openpci 幾乎沒有被使用。
- AmigaOS 3.x 使用 prometheus、openpci 等
- Amithlon 使用不同的庫來訪問 pci 裝置,與 openpci 非常相似,但仍然不同
- MorphOS 使用 pcix.library 併為其提供 openpci 包裝器
- AmigaOS 4.x 使用擴充套件庫的 PCI 介面
- AROS 使用基於 oop 的 PCI 類
與列表中的其他平臺相比,AROS 不是唯一一個“不同”於其他平臺的平臺。實際上,*沒有*真正適用於所有 Amiga 平臺的用於訪問 PCI 裝置的跨平臺解決方案。許多 AmigaOS 驅動程式使用 prometheus,其中很少一部分使用 openpci。OS4 元件使用 expansion.library 的 PCI 介面,MOS 驅動程式使用 pcix.library(其中一些不是由 MOS 團隊提供的驅動程式可能會使用 openpci)。