typedef struct board_info { void __iomem*io_addr;/* Register I/O base address */ void __iomem*io_data;/* Data I/O address */ u16 irq;/* IRQ */ u16tx_pkt_cnt;u16queue_pkt_len;u16queue_start_addr;u16queue_ip_summed;u16dbug_cnt;u8io_mode;/* 0:word, 2:byte */...
总体来说,devicetree与structdevice的关系应该还是在其生成platformdevice的时候,一直传递的structdevice *parent参数。下面先把其源码中传递过程描述如下(仍以At91rm9200为例):1,DT_MACHINE_START(at91sam_dt,"Atmel AT91SAM (Device Tree)")/*Maintainer: Atmel */ .timer =&at91sam926x_time...
WARN_ON(of_irq_to_resource_table(np,res, num_irq) != num_irq); } dev->dev.of_node= of_node_get(np); #ifdefined(CONFIG_MICROBLAZE) dev->dev.dma_mask= &dev->archdata.dma_mask; #endif dev->dev.parent= parent; if(bus_id) dev_set_name(&dev->dev,"%s", bus_id); else of...
struct.getName() = "irq_desc" or struct.getName() = "key" or struct.getName() = "key_entry" or struct.getName() = "klist_node" or struct.getName() = "kobject" or struct.getName() = "lg4ff_wheel_ident_info" or struct.getName() = "list_head" or struct.getName() = "...
spin_unlock_irq(&rq->lock); prev = current; if (unlikely(reacquire_kernel_lock(prev)<0)) gotoneed_resched_nonpreemptible; preempt_enable_no_resched(); if(unlikely(test_thread_flag(TIF_NEED_RESCHED))) gotoneed_resched; } 1. 2.
如果有注册,那么接着会执行platform_driver 里probe函数.在这里显然是s3c2410sdi_probe函数 在probe函数里,用的最多和刚才platform_device有关的语句是platform_get_resource,这条语句用于获取 platform_device里的resource资料.例如映射的IO地址,中断等.剩下等得就是ioremap,和 request_irq等的事情了...
//.3 =1, INT_IRQ设置为GPIO输出功能时输出,为高 =0,为低 //.2 =1, IO_VAL设置为GPIO输出功能时输出,为高 =0,为低 //.1 功耗设置方式选择 =1, 寄存器设置 =0,P15外接电阻选择 //.0 =0,使能ADC1用作VCO频率微调 =1,禁止 //--- // 0x04: 供电方式控制,默认 0x20 -- LP强制拉低,进入...
struct uart_port { spinlock_t lock; /* port lock */ unsigned long iobase; /* in/out[bwl] */ unsigned char __iomem *membase; /* read/write[bwl] */ unsigned int irq; /* irq number */ unsigned long irqflags; /* irq flags */ unsigned int uartclk; /* base uart clock */ unsi...
softirq_vec[] 数组,类比硬件中断描述符表 irq_desc[] ,通过软中断号可以找到对应的 handler 进行处理,比如图中的 tasklet_action 就是一个实际的 handler 函数; 软中断可以在不同的CPU上并行运行,在同一个CPU上只能串行执行; 每个CPU维护 irq_cpustat_t 状态结构,当某个软中断需要进行处理时,会将该结构体...
当该tasklet被调度以后,给定的函数func会被执行,它的参数由data给出 这两个宏之间的区别在于引用计数器的初始值设置不同。前面一个宏把创建的tasklet的引用计数器设置为0,该tasklet处于激活状态。另一 个把引用计数器设置为1,所以该tasklet处于禁止状态