内核ACPI函数API之acpi_reboot
acpi_reboot 这个函数用于写pci/io/memory的相关寄存器让其重启其源码分析如下:void acpi_reboot(void)
{struct acpi_generic_address *rr;struct pci_bus *bus0;u8 reset_value;unsigned int devfn;if (acpi_disabled)return;#得到reboot寄存器的地址rr = &acpi_gbl_FADT.reset_register;/* ACPI reset register was only introduced with v2 of the FADT */if (acpi_gbl_FADT.header.revision < 2)return;/* Is the reset register supported? The spec says we should be* checking the bit width and bit offset, but Windows ignores* these fields */if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER))return;#要reboot寄存器的值reset_value = acpi_gbl_FADT.reset_value;/* The reset register can only exist in I/O, Memory or PCI config space* on a device on bus 0. */#根据space_id 判断要reboot是pcie 还是 io/memoryswitch (rr->space_id) {case ACPI_ADR_SPACE_PCI_CONFIG:/* The reset register can only live on bus 0. */#看起来reboot的寄存器只能在bus 0bus0 = pci_find_bus(0, 0);if (!bus0)return;/* Form PCI device/function pair. */devfn = PCI_DEVFN((rr->address >> 32) & 0xffff,(rr->address >> 16) & 0xffff);printk(KERN_DEBUG "Resetting with ACPI PCI RESET_REG.");/* Write the value that resets us. */#写配置空间寄存器来rebootpci_bus_write_config_byte(bus0, devfn,(rr->address & 0xffff), reset_value);break;#如果是io/memory的话,需要调用acpi_reset这个函数来进行.case ACPI_ADR_SPACE_SYSTEM_MEMORY:case ACPI_ADR_SPACE_SYSTEM_IO:printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.\n");acpi_reset();break;}
}
内核ACPI函数API之acpi_reboot相关推荐
- 内核ACPI函数API之acpi_get_devices
acpi_get_devices(const char *HID, acpi_walk_callback user_function, void *context, void **return_val ...
- 内核ACPI函数API之acpi_bind_one和acpi_unbind_one
int acpi_bind_one(struct device *dev, struct acpi_device *acpi_dev)用于将一个acpi_dev和dev在sys中建立symlink,主 ...
- 内核ACPI函数API之acpi_scan_add_handler
int acpi_scan_add_handler(struct acpi_scan_handler *handler)用于将一个acpi handler添加到acpi_scan_handlers_l ...
- tensorflow函数API总结
tensorflow函数API总结: 首推官网查询 tf.keras.Input:创建输入层 别名: tf.keras.Input tf.keras.layers.Input tf.keras.Inp ...
- HTML5 Audio标签方法和函数API介绍
问说网 > 文章教程 > 网页制作 > HTML5 Audio标签方法和函数API介绍 Audio APIHTML5HTML5 Audio预加载 HTML5 Audio标签方法和函 ...
- php内核函数手册,深入理解PHP内核(五)函数的内部结构,深入理解内部结构
深入理解PHP内核(五)函数的内部结构,深入理解内部结构 php的函数包括用户定义的函数.内部函数(print_r count...).匿名函数.变量函数($func = 'print_r'; $fu ...
- 【小白学习keras教程】八、Sequential Model和模型函数API两种模型建立方法
@Author:Runsen 文章目录 Load dataset Sequential Model API 方法1 方法2 模型函数API 单输入输出 合并图层 1.连接 2. add, subtra ...
- decode函数_「实践」云函数 + API,你也可以做个天气信息系统
为什么要把云函数 SCF 与 API 网关进行结合?本文告诉你答案! 通常,我们用云函数 SCF 写一个函数应用,这个应用可能多种多样.例如之前介绍过的 OJ 系统判题功能,通过 NLP 实现文本摘要 ...
- [tensorflow]tensorflow 2.1 函数API(The Functional API)
目录 1.函数API介绍 2.创建模型 3.训练和评估模型 4.保存模型 5.模型的嵌套 1.函数API介绍 Keras的函数API是一种创建模型的方法,该模型比tf.keras.Sequential ...
最新文章
- 胆固醇竟是新冠最隐蔽同伙!协助病毒入侵细胞,普林斯顿、哈佛医学院首次观察到全过程...
- LNK1181 无法打开输入文件“myelin64_1.lib“
- windows phone 快捷键
- mysql的limit优化_mysql数据库limit优化例子(百万级数据)
- 手把手教你部署VSAN见证虚拟设备 (Cormac)
- oracle那些基本知识
- 提升有监督学习效果的实战解析
- 2台电脑一根网线传文件_黑龙江工程专用网线报价,黑电源线配件厂家
- 请教各位前辈一个问题。
- android 对象传输及parcel机制
- jupyter notebook使用基础及其快捷键,包括对文档操作、cell操作、快捷键、markdown
- 文本密度 php,基于最大文本密度的网页正文抽取方法
- Oracle实现网吧计费系统,毕业设计(论文)-网吧计费管理系统设计.doc
- Technorati 100个最受关注的博客的CMS分布
- 系统地学习打字(个人见解)
- GC调优基础知识之工具篇--jdk为我们提供的命令行命令 jps,jstat,jmap,jinfo,jstat,jstack,jhat 等
- optionally enclosed by
- 人迹罕至的android要完全退出程序的一种方法
- Cesium自定义几何体
- 操作系统课程,绕了很多弯路,转身回归本质