2011-05-18 147 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