staticvoidocteon_irq_ciu_enable(struct irq_data *data){intcpu = next_cpu_for_irq(data);intcoreid = octeon_coreid_for_cpu(cpu);unsignedlong*pen;unsignedlongflags;unionocteon_ciu_chip_data cd; cd.p =irq_data_get_irq_chip_data(data);if(cd.s.line ==0) { raw_spin_lock_irqsave(&oc...
staticvoidshutdown_ilc_irq(unsignedintirq){structilc*ilc=get_irq_chip_data(irq);structilc_irq*ilc_irq;unsignedintpriority;unsignedlongflags;intinput = irq - ilc->first_irq; DPRINTK("%s: irq %d\n", __func__, irq); WARN_ON(!ilc_is_used(&ilc->irqs[input]));if((input <0) || (...
machine driver的初始化过程会包括中断系统的初始化,在machine driver的中断初始化函数中,会调用本文定义的这些接口对各个IRQ number对应的中断描述符进行irq chip、触发类型的设定。 Notes:根据中断号,irq_to_desc返回irq_desc;根据irq_desc,irq_desc_get_chip返回irq_chip,irq_desc_get_irq_data返回irq_data。 ir...
void *host_data; /* Optional data */ struct device_node *of_node; ---该interrupt domain对应的interrupt controller的device node struct irq_domain_chip_generic *gc; ---generic irq chip的概念,本文暂不描述 /* reverse map data. The linear map gets appended to the irq_domain */ irq_hw_num...
[ 0.002937] ===__irq_domain_add domain ffff8020c0032100 name irqchip@(___ptrval___) === irq-gic-v3-its-pci-msi 具体创建过程: 第一个:boot核init_IRQ 函数最终调用到irq_gic_v3.c中 host_data: 是struct gic_chip_data gic_data irq_domain_ops:gic_irq_domain_ops 参考:irq_gic_v3....
(3)设定该IRQ number对应的中断描述符的 irq chip data 这些设定不适合由具体的硬件驱动来设定,因此在Interrupt controller,也就是irq domain的callback函数中设定。 2、irq domain 在内核中,irq domain的概念由struct irq_domain表示: struct irq_domain { ...
126/**127 * struct irq_data - per irq and irq chip data passed down to chip functions128 ...
u32 irqstat, irqnr;structgic_chip_data*gic=&gic_data[0];void__iomem *cpu_base = gic_data_cpu_base(gic); ...do{ irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK); irqnr = irqstat & GICC_IAR_INT_ID_MASK;if(unlikely(irqnr >=1020))break; ...
分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2.cpu发生中断, 3.强制跳到异常向量入口执行(0x18中断地址处) 3.1使用stmdb将寄存器值保存在栈顶(保护现场)
struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); #描述符为null,则直接退出. if (!desc) return; #中断描述符如果没有对应的chip,则打印error 信息,并退出 if (WARN(!desc->irq_data.chip, KERN_ERR "enable_irq before setup/request_irq: irq %u\n",...