首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux中PowerPC的中断原理分析(3)

Linux中PowerPC的中断原理分析(3)

主要成员:
handler—该指针所指向的函数就是在中断服务程序,当中断发生时内核便会调用这个指针指向的函数。
flags:该标志位可以是0,也可以是:SA_INTERRUPT(表示此中断处理程序是一个快速中断处理程序,在2.6中默认情况下没有这个标志)SA_SAMPLE_RANDOM(表示这个中断对内核池有贡献,我理解为就是在中断时产生一些随机数,这些随机数被用来作为加密密匙,因为中断是随机发生的,如果某种中断是有频率的被产生,那么它就不要设置此标志位,还有就是那种设备容易被攻击也不应该设置此标志位)SA_SHIRQ(此标志位表示允许多个中断服务程序共享一个中断号,如不设则一个程序对应一个中断线)。
mask:在x86上不会用到。
name:产生中断的硬件的名字.
dev_id:该标志位主要在共享中断号时使用,即你设置flags=SA_SHIRQ时,有多个中断服务程序共享一个中断号时,内核就需要知道在用完中断程序后该删除那个中断服务程序。不共享时此成员为null。
next:如果flags=SA_SHIRQ,那么这就是指向对列中下一个struct irqaction结构体的指针,否则为空。
irq:不用说这就是中断号了。
3 结构体:struct hw_interrupt_type(include/linux/irq.h)
  • struct irq_chip {  

  • const
    char  *name;  
  •     unsigned int    (*startup)(unsigned int irq);  

  • void        (*shutdown)(unsigned int irq);  

  • void        (*enable)(unsigned int irq);  

  • void        (*disable)(unsigned int irq);  


  • void        (*ack)(unsigned int irq);  

  • void        (*mask)(unsigned int irq);  

  • void        (*mask_ack)(unsigned int irq);  

  • void        (*unmask)(unsigned int irq);  

  • void        (*eoi)(unsigned int irq);  


  • void        (*end)(unsigned int irq);  

  • int     (*set_affinity)(unsigned int irq,  

  • const
    struct cpumask *dest);  

  • int     (*retrigger)(unsigned int irq);  

  • int     (*set_type)(unsigned int irq, unsigned int flow_type);  

  • int     (*set_wake)(unsigned int irq, unsigned int on);  


  • void        (*bus_lock)(unsigned int irq);  

  • void        (*bus_sync_unlock)(unsigned int irq);  


  • /* Currently used only by UML, might disappear one day.*/

  • #ifdef CONFIG_IRQ_RELEASE_METHOD

  • void        (*release)(unsigned int irq, void *dev_id);  

  • #endif

  • /*
  •      * For compatibility, ->typename is copied into ->name.
  •      * Will disappear.
  •      */

  • const
    char  *typename;  
  • };  
它是用来描述中断控制器的,也就是一个抽象的中断控制器,其成员是一系列指向函数的指针。
继承事业,薪火相传
返回列表