2011-05-18 180 views
3

我正在爲包含DMA控制器的powerpc SoC編寫內核模塊。我想在Linux內核中映射DMA中斷。我的DMA結構有兩個中斷:映射Linux內核中的DMA中斷

struct dma 
{ 
    u32 dma1; 
    u32 dma2; 
}*dma; 

我有內存映射內核中的DMA結構。我已經使用函數irq_of_parse_and_map()來獲得virq號到相應的中斷。

dma->dma1=irq_of_parse_and_map(ofdev->node,0); 
dma->dma2=irq_of_parse_and_map(ofdev->node,1); 

但我不能得到上述中斷的virq數字。什麼API可用於訪問VIRQ號碼?

+0

發佈代碼時,請突出顯示它並點擊'{}'按鈕 – 2011-05-18 06:54:43

+0

'arch/powerpc/include/asm/irq.h'有很多對'virq'的引用。你看過那裏嗎? – 2011-11-28 16:32:24

回答

2

基於PowerPC系統使用設備樹斑點(DTB),也稱爲設備樹源(DTS),這是代表硬件組件(處理器配置,公共汽車,外設等數據庫... )在給定的板上。 Linux內核在其啓動期間需要運行的硬件上的某些信息。根據開放固件標準,硬件信息由引導加載程序軟件(例如:u-boot)從DTB傳遞到內核。一旦內核獲得硬件信息,它就會將所有軟件設置作爲內核啓動例程的一部分。

從現在起,如果任何內核的軟件組件(例如:設備驅動程序)需要硬件的細節,應該從內核通過使用一組開放固件標準二進制接口的得到它。其中一些列在下面:

of_register_platform_driver() - Register driver for device 
of_unregister_platform_driver() - Unregister driver for device 
of_address_to_resource() - Obtain physical address of peripheral 
of_get_property()   - Find property with a given name for a given node 
of_find_node_by_phandle() - Find a node given a phandle 
irq_of_parse_and_map()  - Parse and map an interrupt into linux virq space 
of_irq_to_resourse()  - Obtain virtual IRQ of peripheral 
... 
... 

現在來到這裏提出的問題。 irq_of_parse_and_map()用於解析並映射到linux virq空間的中斷。通常這將由系統的中斷控制器設備驅動程序完成。一旦完成中斷映射,您可以通過參考of_irq_to_resource()調用獲取中斷源virq。將中斷處理程序註冊到中斷源需要執行此步驟。所以請嘗試使用of_irq_to_resource()而不是irq_of_parse_and_map()

編號:

設備樹斑點:http://www.informit.com/articles/article.aspx?p=1647051&seqNum=5

開放固件:http://www.openfirmware.org/

IRQ接口:Linux的2.6 /驅動器/的/ irq.c