RD之家欢迎你,立即注册 登录
RD之家 返回首页

yun398992067的个人空间 https://www.rdzhijia.com/?13910 [收藏] [复制] [分享] [RSS]

日志

ASL宏

已有 36 次阅读2019-8-29 11:49 |个人分类:ACPI|系统分类:BIOS

@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }@font-face { font-family: "Calibri"; }p.MsoNormal { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: Calibri; font-size: 10.5pt; }h1 { margin-top: 17pt; margin-bottom: 16.5pt; page-break-after: avoid; text-align: justify; line-height: 240%; font-family: Calibri; font-weight: bold; font-size: 7.5pt; }span.msoIns { text-decoration: underline; color: blue; }span.msoDel { text-decoration: line-through; color: red; }div.Section0 { }ACPI中的一些重要宏的说明

1、Scope (打开一个命名范围)

Scope (Location) { ObjectList }

参数:打开并将基本名称空间范围分配给对象集合。范围内定义的所有对象名都是相对于位置创建的。注意,位置不一定要低于周围的范围,可以引用名称空间中的任何位置。作用域术语本身不创建对象,而是仅在名称空间内定位对象;实际对象由其他ASL术语创建。

描述:按位置引用的对象必须已经存在于名称空间中,并且是具有与之关联的名称空间范围的下列对象类型之一:

a、预定义范围比如:\ (root), \_SB , \GPE , \_PR , \_TZ , etc.

b、DEVICEProcessorThermal ZonePower Resource

在创建辅助SSDTs时,通常需要使用Scope操作符更改名称空间位置,以便在主DSDT定义的名称空间的某些部分中创建对象。使用外部操作符声明范围位置,以便ASL编译器不会对未定义的位置发出错误。


2OperationRegion(申明一个操作区域):

OperationRegion (RegionName, RegionSpace, Offset, Length)

参数:声明一个名为RegionName的操作区域。Offset是区域开始的选定RegionSpace内的偏移量(字节为单位),长度是区域的长度(以字节为单位)

说明:一个操作区域就是一类数据类型(当读写操作对象的时候其实就是在操作一些硬件区域)。例如,定义块可以定义一个关于总线或系统I/O空间的操作区域。任何读写这个名称对象的操作其实都是在访问I/O空间。

3IO(IO资源的表示宏)

IO (Decode , AddressMin , AddressMax , AddressAlignment , RangeLength , DescriptorName)

参数:

Decode 表示10位译码(Decode10)还是16位译码(Decode16)。

AddressMin 表示IO范围最小允许的基地址的一个16位整形数。必须为AddressAlignment的偶数倍。

AddressMax 表示IO范围最允许的基地址的一个16位整形数。必须为AddressAlignment的偶数倍。

AddressAlignment 表示IO地址值的对齐规则的一个八位整形数

RangeLength 表示IO地址的范围

DescriptorName是一个可选参数,它为一个整型常量指定一个名称,该整型常量将在当前作用域中创建,该作用域包含当前资源模板缓冲区中此资源描述符的偏移量。预定义的描述符字段名可以附加到这个名称中,以便通过缓冲区字段操作符访问描述符中的各个字段。 

3、ResourceTemplate(创建一个缓存区)

ASL包括一些用于创建资源描述符的宏。ResourceTemplate宏创建一个缓冲区,其中可以列出资源描述符宏。ResourceTemplate宏自动生成一个结束描述符,并计算资源模板的校验和。ResourceTemplate宏的格式如下:

CreateWordField (SourceBuffer, ByteIndex, FieldName)
SourceBuffer — 取双字域的buff
ByteIndex — 从buff开始的位置偏移
FieldName — 取出双字域的名称

4WORDBusNumber(总线号资源描述宏)

WordBusNumber (ResourceUsage , IsMinFixed , IsMaxFixed , Decode , AddressGranularity, AddressMinimum, AddressMaximum , AddressTranslation , RangeLength , ResourceSourceIndex, ResourceSource, DescriptorName)

 参数:

ResourceUsage(ResourceConsumer)代表这个设备使用,(ResourceProducer)传递给子设备。不设置默认ResourceConsumer

IsMinFixed 指定总线号地址范围是固定的MinFixed 还是可修改的MinNoFixed  ,不指定则默认为MinNotFixed

IsMaxFixed 指定总线号地址范围是固定的MaxFixed 还是可修改的MaxNoFixed  ,不指定则默认为MaxNotFixed

Decode指定设备解码方式,PosDecodeSubDecode)解码方式对总线编号范围进行解码。如果没有指定,则假定PosDecode addressparticle计算为一个16位整数,该整数指定必须对总线号范围进行对齐的二次方边界(- 1)

AddressMinimum计算为一个16位整数,指定了最低的总线号

AddressMaximum 计算为一个16位整数,指定了最的总线号

AddressTranslation计算为一个16位整数,该整数指定要添加到辅助总线总线号的偏移量,从而生成相应的主总线总线号

RangeLength计算为16位整数,指定在总线号范围内解码的总线号的总数。AddressMaximum - AddressMinimum + 1

ResourceSourceIndex是一个可选参数,它计算为一个8位整数,指定ResourceSource指定的对象中的资源描述符。如果指定了这个参数,还必须指定ResourceSource参数。

ResourceSource是一个可选参数,它计算为一个字符串,该字符串包含一个设备的路径,该设备生成一个资源池,从这个资源池中分配I/O范围。如果指定了此参数,但没有指定ResourceSourceIndex参数,则假定为零。

DescriptorName是一个可选参数,它为一个整型常量指定一个名称,该整型常量将在当前作用域中创建,该作用域包含当前资源模板缓冲区中此资源描述符的偏移量。预定义的描述符字段名可以附加到这个名称中,以便通过缓冲区字段操作符访问描述符中的各个字段。

注:和这个宏相似的宏由:WORDIODWORDMEMORY

5External(声明一个外部对象)

External ( ObjectName, ObjectType, ReturnType, ParameterTypes )

参数:

ObjectName是一个名称字符串。

ObjectType是一个可选的ObjectTypeKeyword(例如IntObjPkgObj)。如果没有指定,则假定“UnknownObj”类型。

ReturnType是可选的。如果指定的对象类型是MethodObj,则指定方法返回的对象的类型。如果方法不返回对象,则不指定任何内容或UnknownObj。要指定单个返回类型,只需使用ObjectTypeKeyword。要指定多种可能的返回类型,请用大括号括住逗号分隔的ObjectTypeKeyword s。例如:{IntObj, BuffObj}

ParameterTypes是可选的。如果指定的ObjectTypeMethodObj,则指定方法参数的数量和类型。它是一个逗号分隔的、可变长度的列表,其中包含每个方法参数的预期对象类型或类型,用大括号括起来。对于每个参数,参数类型由ObjectTypeKeyword或用逗号分隔的包含在大括号中的ObjectTypeKeywords子列表组成。总共不能超过7个参数。外部指令通知ASL编译器该对象声明在此表的外部,因此不会为未声明的对象生成错误。ASL编译器将在名称空间中的指定位置创建外部对象(如果指定了对象的完整路径),或者将在外部术语的当前范围创建对象。对于外部控制方法,ASL编译器可以发出一个包含方法名称和所需参数数量的外部AML操作码。AML反汇编程序可以使用此信息将AML正确地反汇编为正确的ASL代码。当需要的范围和对象在主DSDT中声明时,External特别适合在辅助SSDTs中使用。

6DMADMA资源描述宏)

DMA (DmaType , IsBusMaster , DmaTransferSize , DescriptorName) {DmaChannelList} => Buffer

参数:

DmaType指定DMA循环的类型:ISA compatible (Compatibility)EISA type A (TypeA)EISA type B (TypeB)EISA type F (TypeF)。自动创建2位字段DescriptorName . _typ来引用资源描述符的这一部分,其中“0”表示兼容性,“1”表示TypeA“2”表示TypeB“3”表示TypeF

IsBusMaster指定该设备是否可以生成DMA总线主周期(bus master) (NotBusMaster)。如果没有指定任何内容,则假定是BusMaster。自动创建1位字段DescriptorName . _bm来引用资源描述符的这一部分,其中“0”不是BusMaster“1”BusMaster

DmaTransferSize指定设备能够生成的DMA周期的大小:8(Transfer8)16(Transfer16)8位和16(Transfer8_16)2比特字段

DescriptorName。自动创建_SIZ来引用资源描述符的这一部分,其中' 0 'Transfer8' 1 'Transfer8_16' 2 'Transfer16

DescriptorName是一个可选参数,它为一个整型常量指定一个名称,该整型常量将在当前作用域中创建,该作用域包含当前资源模板缓冲区中此资源描述符的偏移量。预定义的描述符字段名可以附加到这个名称中,以便通过缓冲区字段操作符访问描述符中的各个字段。

DmaChannelList是一个以逗号分隔的整数列表,范围从07,指定设备使用的DMA通道。列表中可能没有副本。

描述:

DMA宏计算为一个包含DMA资源描述符的缓冲区。

7IRQ/IRQNoFlags(中断资源描述宏)

IRQNoFlags (DescriptorName) {InterruptList} => Buffer

参数:

DescriptorName是一个可选参数,它为一个整型常量指定一个名称,该整型常量将在当前作用域中创建,该作用域包含当前资源模板缓冲区中此资源描述符的偏移量。

InterruptList是一个逗号分隔的整数列表,范围从015,至少需要一个值。IRQNoFlags宏计算到包含高有效、边缘触发的IRQ资源描述符的缓冲区的列表描述中可能没有重复。IRQ描述符的格式可以在IRQ描述符中找到(383)。宏生成描述符的双字节形式。

IRQ (EdgeLevel, ActiveLevel, Shared, DescriptorName) { InterruptList } => Buffer

参数:

EdgeLevel描述中断是边缘触发(edge)还是电平触发(level)

ActiveLevel描述中断是高有效还是低有效

Shared描述中断是否可以与其他设备共享(共享)(独占),以及它是否能够将系统从低功耗空闲状态或系统休眠状态(SharedAndWakeExclusive andwake)中唤醒。

DescriptorName是一个可选参数,它为一个整型常量指定一个名称,该整型常量将在当前作用域中创建,该作用域包含当前资源模板缓冲区中此资源描述符的偏移量。预定义的描述符字段名可以附加到这个名称中,以便通过缓冲区字段操作符访问描述符中的各个字段。

InterruptList是一个逗号分隔的整数列表,范围从015,至少需要一个值。列表中可能没有副本。

描述

IRQ宏计算为包含IRQ资源描述符的缓冲区。

8Processor(申明处理器)

Processor (ProcessorName, ProcessorID, PBlockAddress, PblockLength) { TermList }

参数:

声明一个命名处理器对象ProcessorName。处理器打开名称作用域。每个处理器都需要有一个惟一的ProcessorID值,该值与任何其他ProcessorID值都是惟一的。对于系统中的每个处理器,ACPI系统固件在\_SB范围内的任何名称空间中声明一个处理器对象。为了与实现ACPI 1.0的操作系统兼容,处理器对象也可以在\_PR范围下声明。与acpi兼容的命名空间可以在\_SB\_PR范围内定义处理器对象,但不能同时在这两个范围内定义。

PBlockAddress为处理器寄存器块提供系统I/O地址。每个处理器可以提供不同的地址。

PBlockLength是处理器寄存器块的长度,以字节为单位,为0(对于没有P_BLK)6。除了一个例外,所有处理器都必须具有相同的PBlockLength。例外情况是,当所有其他处理器的PBlockLength都为零时,引导处理器的PBlockLength可以是非零的。对于每个处理器,PBlockLength0是有效的。

TermList是一个可选列表,它可能包含任意数量的ASL对象。TermList中包含的特定于处理器的对象包括_PTC_CST_PCT_PSS_PPC_PSD_TSD_CSD_PDC_TPC_TSS_OSC。只有在在\_SB范围内声明处理器对象时,才能指定这些特定于处理器的对象。

可选处理器对象列表被编码为TermList,因此可以根据系统设置描述动态处理器对象列表,而不是描述静态处理器对象列表。


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | RD之家欢迎你,立即注册

QQ|Archiver|手机版|小黑屋|RD之家 - 研发工程师的伊甸园 ( 京ICP备18037383号 )
360导航 360安全浏览器 蚂蚁搜索 速搜全球 酷帝网站目录 搜狗导航 114啦网址导航

GMT+8, 2019-9-16 14:14

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部