ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

《UEFI内核导读》之ACPI编程入门 第4章:方法(Method)

2021-11-18 23:01:09  阅读:374  来源: 互联网

标签:ArgX 调用 对象 XYZ ACPI 参数 UEFI Method


固件C字营·版权所有

敬请关注微信公众号:“固件C字营”

===================================================================== 


第4章:方法(Method)

       Control Method是ACPI/ASL预定义的一种对象类型(ObjectType)为8的对象。它可以调用或者被其他的Method调用,在调用过程中可以被阻塞但不能被抢占,当一个Method被阻塞时OSPM可以转而执行其他的Method。以下称之为“方法“或“Method”。

  • 输入参数:

       Method支持输入最多7个输入参数(Arg0- Arg6)或无输入参数,ArgX分三种类型。其中控制方法类(control method)和表达式(ASL expression)类的ArgX在Method对其使用完后,自动对其进行删除操作。三种ArgX类型分别为:

  1. 命名的对象(named object):把不同类型的对象当做参数传递给Method
  2. 控制方法(control method):执行ArgX绑定的方法,把返回值当参数传入到调用Method
  3. 表达式(ASL expression):先计算表达式,再把结果传入Method。

  • 输入参数传递

       Method调用时参数采用常量引用的方式传递(call-by-reference-constant),意味着在调用过程中不会复制参数,而是直接引用参数,且参数不能被修改,这样既减少了在OS启动过程中对内存的频繁访问,也可以防止对对象的意外修改。在Method内部修改ArgX不会修改到调用前的原对象。

       如果使用RefOf算子来引用对象,并通过ArgX传递到Method内部,这个时候对引用对象到修改就会覆盖原始对象,也就达到了对原始数据进行修改目的。

       当Buffer对象(ObjectType=3)或Package对象(ObjectType=4)被当做ArgX传递到Method,使用间接的Index或Field去访问Buffer或Package内部成员时会覆盖其内部数据。

  • 局部变量。

        Method支持最多8个局部变量对象(Local0-Local7),其初始值为NULL。可以使用预定义的Name ( ObjectName, Object )方法来在全局ACPI名字空间(Global ACPI namespace)创建名为ObjectName的新对象。下例创建了3个对象,其作用域分别是:

\\XYZ.BAR:静态对象,该对象所在地ASL被OSPM加载之后就一直存在

\\XYZ.FOO.BAR:动态对象,第#7行Name (BAR, 7)执行完之后才被创建

\\XYZ.FOOB:动态对象,第#9行Name (XYZ.FOOB,3)执行完后被创建,method退出后就被毁。

  • 用途

        Method可以访问系统中的各种资源或操作空间(Operation Region),也可以进行数学运算及其他运算,进而完成特定的任务。操作空间包括:内存、IO、PCI配置空间、EC、SMBUS、CMOS、PCIBar,IPMI、GPIO、SerialBus、PCC、OEM自定义空间。数学运算包括:四则运算(加减乘除)、逻辑运算(逻辑与或非)、位运算(移位、位与或非)等

 

固件C字营·版权所有

敬请关注微信公众号:“固件C字营”

 

标签:ArgX,调用,对象,XYZ,ACPI,参数,UEFI,Method
来源: https://blog.csdn.net/CStyle_0x007/article/details/121412056

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有