原創 Linux PCI驅動框架分析(三)

2022-03-17 18:03:11 字數 1653 閱讀 6975

說明:kernel版本:4.14

arm64處理器

使用工具:source insight 3.5, visio

先回顧一下pcie的架構圖:

那麼問題來了,platform_device是在什麼時候建立的呢?那就不得不提到device tree裝置樹了。

我們看看pcie host的裝置樹內容:

pcie: pcie@fd0e0000 ;

};

關鍵字段描述如下:

看一下nwl_pcie_probe函式:

針對兩種處理方式,nwl pcie驅動中,實現了兩個irq_chip,也就是兩種方式的中斷控制器:

再來看一下nwl_pcie_enable_msi函式:

所以,稍微彙總一下,作為兩種不同的中斷處理方式,套路都是一樣的,都是建立irq_chip中斷控制器,為該中斷控制器新增irq_domain,具體裝置的中斷響應流程如下:

裝置連線在pci匯流排上,觸發中斷時,通過pcie控制器充當的中斷控制器路由到上一級控制器,最終路由到cpu;

cpu在處理pcie控制器的中斷時,呼叫它的中斷處理函式,也就是上文中提到過的nwl_pcie_leg_handlernwl_pcie_msi_handler_high,和nwl_pcie_leg_handler_low

在級聯的中斷處理函式中,呼叫chained_irq_enter進入中斷級聯處理;

呼叫generic_handle_irq觸發具體的pcie裝置的中斷處理函式執行;

呼叫chained_irq_exit退出中斷級聯的處理;

下篇開始,繼續回歸到虛擬化,期待一下吧。

documentation/devicetree/bindings/pci/xlinx-nwl-pcie.txt

原創 Linux PCI驅動框架分析(二)

說明 kernel版本 4.14 arm64處理器 使用工具 source insight 3.5,visio 話不多說,直接開始。來一張更詳細的結構體組織圖 linux pci驅動框架,基於linux裝置驅動模型,因此有必要先簡要介紹一下,實際上linux裝置驅動模型也是乙個大的topic,先挖個...

Linux pci驅動原始碼

include include include include include include include include include include include include include ifdef linux26 include endif include plx.h defi...

Thinkphp 框架擴充套件之驅動擴充套件例項分析

每個類庫都可以設計自己的驅動,因此3.2版本的驅動目錄沒有獨立出來,而是放到各個類庫的命名空間下面,例如 think log類的驅動放到 think log driver 命名空間下面,think db類的驅動放到了 think db driver 命名空間下面。當然,這只是建議的位置,你完全可以根...