19.6.110. QWordMemory(QWord Memory 资源描述符宏)
语法 :
QWordMemory (ResourceUsage, Decode, IsMinFixed, IsMaxFixed, Cacheable, ReadAndWrite, AddressGranularity, AddressMinimum,
AddressMaximum, AddressTranslation, RangeLength, ResourceSourceIndex, ResourceSource, DescriptorName, MemoryRangeType, TranslationType)
参数
ResourceUsage 指定该 Memory 范围是由此设备消耗(ResourceConsumer)还是传递给子设备(ResourceProducer)。如果未指定,则假定为 ResourceConsumer。
Decode 指定设备是否使用正向(PosDecode)或减法(SubDecode)译码来译码该 Memory 范围。如果未指定,则假定为 PosDecode。会自动创建 1 位字段 DescriptorName._DEC 以引用资源描述符的这一部分,其中“1”表示 SubDecode,“0”表示 PosDecode。
IsMinFixed 指定此内存范围的最小地址是否固定(最小值固定)或可更改(最小值不固定)。如果未指定任何内容,则假定为 最小值不固定。会自动创建 1 位字段 DescriptorName._MIF 来引用资源描述符的这一部分,其中“1”表示 最小值固定,“0”表示 最小值不固定。
IsMaxFixed 指定此内存范围的最大地址是否固定(最大值固定)或可更改(最大值不固定)。如果未指定任何内容,则假定为 最大值不固定。会自动创建 1 位字段 DescriptorName._MAF 来引用资源描述符的这一部分,其中“1”表示 最大值固定,“0”表示 最大值不固定。
Cacheable 指定该内存区域是否可缓存(可缓存)、可缓存且支持写合并(写合并)、可缓存且可预取(可预取)或不可缓存(不可缓存)。如果未指定任何内容,则假定为 不可缓存。会自动创建 2 位字段 DescriptorName._MEM 来引用资源描述符的这一部分,其中“1”表示 可缓存,“2”表示 写合并,“3”表示 可预取,“0”表示 不可缓存。
ReadAndWrite 指定该内存区域是只读(只读)还是可读/写(可读写)。如果未指定任何内容,则假定为 可读写。会自动创建 1 位字段 DescriptorName._RW 来引用资源描述符的这一部分,其中“1”表示 可读写,“0”表示 只读。
AddressGranularity 求值为一个 64 位整数,用于指定该内存范围必须对齐到 2 的幂边界(减 1)。会自动创建 64 位字段 DescriptorName._GRA 来引用资源描述符的这一部分。
AddressMinimum 求值为一个 64 位整数,用于指定该内存范围可能的最低基地址。在 AddressGranularity 中对应位为“1”的所有位上,该值必须为“0”。对于执行地址转换的桥设备,这是次总线上的地址。会自动创建 64 位字段 DescriptorName._MIN 来引用资源描述符的这一部分。
AddressMaximum 求值为一个 64 位整数,用于指定该内存范围可能的最高基地址。在 AddressGranularity 中对应位为“1”的所有位上,该值必须为“0”。对于执行地址转换的桥设备,这是次总线上的地址。会自动创建 64 位字段 DescriptorName._MAX 来引用资源描述符的这一部分。
AddressTranslation 求值为一个 64 位整数,用于指定要加到次总线 I/O 地址上的偏移量,从而得到对应的主总线 I/O 地址。对于所有非桥设备,或者不执行转换的桥,该值必须为“0”。会自动创建 64 位字段 DescriptorName._TRA 来引用资源描述符的这一部分。
RangeLength 求值为一个 64 位整数,用于指定该内存范围中已译码的总字节数。会自动创建 64 位字段 DescriptorName._LEN 来引用资源描述符的这一部分。
ResourceSourceIndex 是一个可选参数,求值为一个 8 位整数,用于指定 ResourceSource 所指定对象中的资源描述符。如果指定了该参数,则也必须指定 ResourceSource 参数。
ResourceSource 是一个可选参数,求值为一个字符串,其中包含产生资源池的设备路径,该内存范围即从该资源池中分配。如果指定了该参数但未指定 ResourceSourceIndex 参数,则假定其值为零。
DescriptorName 是一个可选参数,用于指定一个整数常量的名称,该常量将在当前作用域中创建,并包含此资源描述符在当前资源模板缓冲区中的偏移量。可将预定义的描述符字段名附加到该名称后,以通过 Buffer Field 运算符访问描述符中的各个字段。
MemoryRangeType 是一个可选参数,用于指定内存用途。该内存可标记为普通内存(AddressRangeMemory)、用作 ACPI NVS 空间(AddressRangeNVS)、用作 ACPI 可回收空间(AddressRangeACPI)或系统保留(AddressRangeReserved)。如果未指定任何内容,则假定为 AddressRangeMemory。会自动创建 2 位字段 DescriptorName._MTP 以引用资源描述符的这一部分,其中“0”表示 AddressRangeMemory,“1”表示 AddressRangeReserved,“2”表示 AddressRangeACPI,“3”表示 AddressRangeNVS。
TranslationType 是一个可选参数,用于指定总线次级侧的资源类型是与主侧不同(类型转换)还是相同(类型静态)。如果指定 类型转换,则总线主侧为 I/O。如果指定 类型静态,则总线主侧为 Memory。如果未指定任何内容,则假定为 类型静态。会自动创建 1 位字段 DescriptorName._TTP 来引用资源描述符的这一部分,其中“1”表示 类型转换,“0”表示 类型静态。更多信息请参见 _TTP。
说明
QWordMemory 宏求值为一个缓冲区,其中包含一个 64 位内存资源描述符,用于描述一段内存地址范围。64 位内存资源描述符的格式见表 6.45。该宏设计用于 ResourceTemplate(资源到缓冲区转换宏)内部。