19.6.103. PinFunction(引脚功能描述符宏)
语法 :
Macro:
PinFunction (Shared/Exclusive, PinPullConfiguration, FunctionNumber, ResourceSource,
ResourceSourceIndex, ResourceUsage, DescriptorName, VendorData) {Pin List}
参数
Shared 是一个可选参数,可以是 Shared、Exclusive 之一。如果未指定,则假定为 Exclusive。位字段名称 _SHR 会自动创建以引用资源描述符的这一部分。
PinPullConfiguration 可以是 PullDefault、PullUp、PullDown、PullNone 之一,或者是范围 128-255 内的供应商提供值。
FunctionNumber 是一个特定于提供者的整数,用于指示所描述的是哪一种功能。
ResourceSource 是一个字符串,用于唯一标识此描述符所引用的 GPIO 控制器。ResourceSource 可以是完全限定名、相对名称,或者使用命名空间搜索规则的名称段。
ResourceSourceIndex 是一个可选参数,在本修订版中假定为 0。
ResourceUsage 是一个可选参数,在本修订版中假定为 ResourceConsumer。
DescriptorName 是一个可选参数,用于指定一个整数常量的名称,该常量将在当前作用域中创建,并包含此资源描述符在当前资源模板缓冲区中的偏移量。可以将预定义的描述符字段名称附加到该名称后,以便通过 Buffer Field 运算符访问描述符中的各个字段。
VendorData 是一个可选参数,用于指定一个 RawDataBuffer,其中包含由 OS 驱动程序解码的供应商定义字节数据。位字段名称 _VEN 会自动创建以引用资源描述符的这一部分。
PinList 是 ResourceSource 上由此描述符描述的非空引脚编号(从零开始)列表。位字段名称 _PIN 会自动创建以引用资源描述符的这一部分。
说明
PinFunction 宏求值为一个缓冲区,其中包含一个引脚功能资源描述符,如本节所述。此宏设计用于 ResourceTemplate(资源到缓冲区转换宏)内部。
注:PinFunction 宏允许以最大灵活性单独定义每个引脚的所需功能。固件编写者有责任考虑任何平台级限制,在这些限制下,引脚功能必须以更粗粒度应用。因此,如果平台设计要求一组引脚的功能必须作为一组进行配置,则固件编写者必须通过在相应的 PinFunction 描述中指定所有相关引脚都包含在单个 PinFunction 中来确保这一点。在多引脚场景中,OSPM 必须以“全有或全无”的方式遵守所有指定引脚的 PinFunction 要求。
注:Pin Function 描述符适用于需要非 GPIO 功能的场景。对于基于 GPIO 的功能,固件应始终指定适当的 GpioIo 或 GpioInt 描述符。
示例 :
//
// Description: GPIO
//
Device (GPI0)
{
Name (_HID, "PNPFFFE")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4FE00000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x54}
})
Return(RBUF)
}
//
// Description: I2C controller 1
//
Device (I2C1)
{
Name (_HID, "PNPFFFF")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4F800000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x55}
PinFunction(Exclusive, PullUp, 0x5, "\\_SB.GPI0", 0, ResourceConsumer,) {2, 3}
})
Return(RBUF)
}
}
//
// Description: I2C controller 2
//
Device (I2C2)
{
Name (_HID, "PNPFFFF")
Name (_UID, 0x1)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4F900000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x56}
PinFunction(Exclusive, PullUp, 0x0, 0x4, "\\_SB.GPI0", 0, ResourceConsumer, ) {2, 3}
})
Return(RBUF)
}
}
//
// Description: Physical display panel
//
Device (DISP)
{
Name (_HID, "PNPFFFD")
Name (_UID, 0x0)
Method (_STA)
{
Return(0xf)
}
Method (_CRS, 0x0, NotSerialized)
{
Name (RBUF, ResourceTemplate()
{
Memory32Fixed(ReadWrite, 0x4F900000, 0x20)
Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) {0x57}
GpioIo(Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPI0",) {2, 3}
})
Return(RBUF)
}
}