函数逻辑报告 |
Source Code:kernel\irq\manage.c |
Create Date:2022-07-27 11:09:52 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:注册中断
函数原型:static int __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
unsigned int | irq | |
struct irq_desc * | desc | >request_mutex Provides serialization against a concurrent free_irq() |
struct irqaction * | new |
1276 | thread_mask等于0 |
1277 | shared等于0 |
1284 | 如果非判断模块是否处于活动状态则返回:负ENODEV |
1293 | 如果非中断动作标志按位与IRQF_TRIGGER_MASK的值则中断动作标志或等于irqd_get_trigger_type( & irq_data) |
1301 | 如果nested则 |
1312 | 否则 |
1326 | ret等于setup_irq_thread(new, irq, false) |
1329 | 如果secondary则 |
1330 | ret等于setup_irq_thread(secondary, irq, true) |
1331 | 如果ret则转到:out_thread |
1345 | 如果芯片专用标志按位与IRQCHIP_ONESHOT_SAFE则中断动作标志与等于IRQF_ONESHOT的反 |
1355 | mutex_lock( & request_mutex) |
1362 | 总线上锁 |
1365 | 如果非中断服务例程链表则 |
1367 | 如果ret则 |
1370 | 转到:out_bus_unlock |
1380 | raw_spin_lock_irqsave( & 自旋锁, flags) |
1383 | 如果old则 |
1398 | 转到:out_unlock |
1405 | 如果irqd_trigger_type_was_set( & irq_data)则 |
1406 | oldtype等于irqd_get_trigger_type( & irq_data) |
1407 | 否则 |
1408 | oldtype等于中断动作标志按位与IRQF_TRIGGER_MASK |
1412 | 如果非中断动作标志按位与中断动作标志按位与These flags used only by the kernel as part of the* irq handling routines的值或oldtype不等于中断动作标志按位与IRQF_TRIGGER_MASK的值或中断动作标志按位异或中断动作标志的值按位与IRQF_ONESHOT则转到:mismatch |
1418 | 如果中断动作标志按位与IRQF_PERCPU的值不等于中断动作标志按位与IRQF_PERCPU的值则转到:mismatch |
1423 | 循环 |
1433 | shared等于1 |
1441 | 如果中断动作标志按位与IRQF_ONESHOT则 |
1472 | 否则如果中断处理函数恒等于线程中断的默认主中断处理程序且非芯片专用标志按位与IRQCHIP_ONESHOT_SAFE的值则 |
1492 | 转到:out_unlock |
1495 | 如果非shared则 |
1496 | init_waitqueue_head( & 等待所有线程完成) |
1499 | 如果中断动作标志按位与IRQF_TRIGGER_MASK则 |
1503 | 如果ret则转到:out_unlock |
1519 | 如果ret则转到:out_unlock |
1523 | istate与等于IRQS_AUTODETECT按位或IRQS_SPURIOUS_DISABLED按位或IRQS_ONESHOT按位或IRQS_WAITING的值的反 |
1524 | 清除中断标志 |
1526 | 如果中断动作标志按位与IRQF_PERCPU则 |
1531 | 如果中断动作标志按位与IRQF_ONESHOT则istate或等于IRQS_ONESHOT |
1535 | 如果中断动作标志按位与IRQF_NOBALANCING则 |
1536 | 中断设置为非负载均衡 |
1537 | 设置中断标志 |
1540 | 如果中断能够被设置则 |
1541 | 启动中断处理 |
1542 | 否则 |
1554 | 否则如果中断动作标志按位与IRQF_TRIGGER_MASK则 |
1555 | nmsk等于中断动作标志按位与IRQF_TRIGGER_MASK |
1556 | omsk等于irqd_get_trigger_type( & irq_data) |
1566 | 安装实例 |
1569 | 发生的中断次数等于0 |
1570 | 无法处理中断次数等于0 |
1576 | 如果shared且istate按位与IRQS_SPURIOUS_DISABLED则 |
1577 | istate与等于IRQS_SPURIOUS_DISABLED的反 |
1578 | 嵌套深度为1时使能中断 |
1581 | raw_spin_unlock_irqrestore( & 自旋锁, flags) |
1582 | 慢总线解锁 |
1596 | 在系统文件中注册中断进程 |
1597 | 入口埠 = NULL |
1598 | 在系统文件中注册新建中断进程 |
1599 | 返回:0 |
1601 | mismatch : |
1602 | 如果非中断动作标志按位与IRQF_PROBE_SHARED的值则 |
1611 | out_unlock : |
1612 | raw_spin_unlock_irqrestore( & 自旋锁, flags) |
1614 | 如果非中断服务例程链表则irq_release_resources(>request_mutex Provides serialization against a concurrent free_irq()) |
1616 | out_bus_unlock : |
1617 | 慢总线解锁 |
1620 | out_thread : |
1621 | 如果中断线程则 |
1635 | out_mput : |
1636 | module_put(owner) |
1637 | 返回:ret |
名称 | 描述 |
---|---|
setup_irq | 注册中断 |
request_threaded_irq | 注册中断线程 |
request_nmi | quest_nmi - allocate an interrupt line for NMI delivery*@irq: Interrupt line to allocate*@handler: Function to be called when the IRQ occurs |
setup_percpu_irq | setup_percpu_irq - setup a per-cpu interrupt*@irq: Interrupt line to setup*@act: irqaction for the interrupt* Used to statically setup per-cpu interrupts in the early boot process. |
__request_percpu_irq | __request_percpu_irq - allocate a percpu interrupt line*@irq: Interrupt line to allocate*@handler: Function to be called when the IRQ occurs |
request_percpu_nmi | quest_percpu_nmi - allocate a percpu interrupt line for NMI delivery*@irq: Interrupt line to allocate*@handler: Function to be called when the IRQ occurs |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |