5.2.26. 安全设备 (SDEV) ACPI 表
安全设备 (SDEV) 表是系统已知的安全设备的列表。该表适用于安全OS分区和非安全OS分区共存的系统。安全设备是受安全OS保护的设备,防止来自非安全OS的访问。
该表提供了有关哪些设备应受安全OS保护的提示。该表的执行由安全OS及其之前的任何预引导环境提供。该表本身不提供任何安全保证。系统制造商有责任确保操作系统配置为启用使用SDEV表的安全功能。
系统中的每个设备都有三个选项:
设备列在SDEV中。 “允许切换……”标志很明确。这提示设备应始终受到安全OS的保护。例如,安全OS可能要求用于用户身份验证的设备必须受到保护,以防止恶意软件的篡改。
设备列在SDEV中。 “允许切换...”标志已设置。这暗示设备最初应由安全OS保护,但由安全OS自行决定是否允许在请求时将设备移交给非安全OS。任何期望设备在安全模式下运行的OS组件在切换完成后将无法正常工作。例如,设备可用于多种目的,包括用户身份验证。如果安全OS确定驱动设备所需的组件丢失,它可能会将设备的控制权释放给非安全OS。在这种情况下,设备无法进行安全认证,但其他操作可以正常进行。
设备未在SDEV 中列出。例如,现状是没有提供任何提示。任何期望设备处于安全模式的OS组件将无法正常工作。
OS供应商提供有关SDEV表中可以列出哪些设备的指南。换句话说,哪些设备与安全OS兼容,以及哪些设备应设置“允许切换”标志。
请参阅下表了解SDEVACPI定义。
| 表 5.118 SDEV ACPI 表 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| - 签名 | 4 | 0 | “SDEV”。表签名 |
| - 长度 | 4 | 4 | 整个表的长度(以字节为单位)。 |
| - 修订 | 1 | 8 | 1 |
| - 校验和 | 1 | 9 | 整个表的总和必须为零。 |
| - OEM ID | 6 | 10 | 10 OEM ID |
| - OEM 表 ID | 8 | 16 | 16对于SDEV表,表ID是制造商型号ID。 |
| - OEM 修订 | 4 | 24 | OEM 所提供OEM 表ID 的修订版SDEV 表。 |
| - 创建者ID | 4 | 28 | 28创建该表的实用程序的供应商ID。 |
| - 创建者修订 | 4 | 32 | 32创建表的实用程序的修订。 |
| 安全设备结构[] | — | 36 | 36包含一个或多个安全设备结构的结构列表,如下一节中定义。 |
5.2.26.1. 安全设备结构
| 表 5.119 安全设备结构 值 | 描述 |
|---|---|
| 0 | 基于ACPI_NAMESPACE_DEVICE的安全设备。 |
| 1 | 基于 PCIe 端点设备的安全设备。 |
| 所有其他值 | 保留以供将来使用。为了向前兼容,软件通过跳过长度字段指示的适当字节数来跳过它不理解的结构。所有新设备结构必须分别包含类型、标志和长度字段作为前 3 个字段。 |
5.2.26.1.1. 基于ACPI_NAMESPACE_DEVICE的安全设备结构
| 表 5.120 ACPI_NAMESPACE_DEVICE 基于安全设备结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0x00:ACPI集成设备 |
| 旗帜 | 1 | 1 | 位 0:允许切换到非安全OS。所有其他位均保留且必须为零。位 1:存在安全访问组件。所有其他位均保留且必须为零。 |
| 长度 | 2 | 2 | 该条目的长度(以字节为单位)。 |
| 设备标识符偏移 | 2 | 4 | 在安全ACPI设备结构中,以空结尾的ASCII字符串的偏移量,该字符串包含对此设备的ACPI命名空间对象的完全限定引用。 (例如,\\_SB.I2C0 表示南桥嵌入式 I2C 设备的 ACPI 对象名称;数据字段中省略引号)。有关ACPI名称空间对象的完全限定引用,请参阅ACPI规范。 |
| 设备标识符长度 | 2 | 6 | 设备标识符字符串的长度(以字节为单位),包括终止字节。 |
| 供应商特定数据偏移 | 2 | 8 | 在安全ACPI设备结构中,供应商提供的设备特定数据的偏移量。 |
| 供应商特定数据长度 | 2 | 10 | 10供应商提供的设备特定的数据长度。 |
| 安全访问组件偏移 | 2 | 12 | 12在基于ACPI_NAMESPACE_DEVICE的安全设备结构中,在安全OS中执行设备所需的安全访问组件列表的偏移量。仅当“安全访问组件存在”位被设置时才存在。 |
| 安全访问组件长度 | 2 | 14 | 14安全访问组件数据列表的长度。仅当“安全访问组件存在”位被设置时才存在。 |
| 表 5.121 安全访问组件类型 值 | 描述 | ||
| --- | --- | ||
| 0 | 基于识别的安全访问组件。安全设备至少需要一个。当存在多个标识组件时,优先级由列表顺序确定。见表 5.122 | ||
| 1 | 基于内存的安全访问组件。见表5.123 | ||
| 所有其他值 | 保留以供将来使用。为了向前兼容,软件通过跳过长度字段指示的适当字节数来跳过它不理解的结构。所有新设备结构必须分别包含类型、标志和长度字段作为前 3 个字段。 | ||
| 表 5.122 基于身份的安全访问组件 字段 | 字节长度 | 字节偏移 | 描述 |
| --- | --- | --- | --- |
| 类型 | 1 | 0 | 0x00:标识组件。见表5.121 |
| 旗帜 | 1 | 1 | 保留以供将来使用。 |
| 长度 | 2 | 2 | 该条目的长度(以字节为单位)。 |
| 硬件标识符偏移 | 2 | 4 | 标识组件结构中包含硬件标识符的空终止ASCII字符串的偏移量。硬件标识符是PNP或ACPIID。有效的 PNP ID 格式必须为“AAA####”,其中 A 是大写字母,# 是十六进制数字。有效的 ACPI ID 格式必须为“NNNN####”,其中 N 是大写字母或数字。硬件标识符是必填字段。 |
| 硬件标识符长度 | 2 | 6 | 硬件标识符的长度(以字节为单位),包括终止字节。 |
子系统标识符偏移| 2 | 8 | 在标识组件结构中,包含子系统标识符的空终止ASCII字符串的偏移量。子系统标识符是PNP或ACPIID。硬件标识符是PNP或ACPIID。有效的 PNP ID 格式必须为“AAA####”,其中 A 是大写字母,# 是十六进制数字。有效的 ACPI ID 格式必须为“NNNN####”,其中 N 是大写字母或数字。子系统标识符是可选的。如果子系统标识符不存在。该值应为 0。 子系统标识符长度 | 2 | 10 | 10子系统标识符的长度(以字节为单位),包括终止字节。 硬件修订| 2 | 12 | 12硬件修订。 存在硬件修订| 1 | 14 | 14如果为 0,则忽略硬件修订版。 存在类别代码 | 1 | 15 | 15如果为 0,则忽略PCI兼容类代码。 PCI-兼容基类| 1 | 16 | 16 PCI兼容基类代码。 PCI-兼容子类| 1 | 17 | 17 PCI-兼容子类代码。 PCI-兼容编程接口| 1 | 18 | 18 PCI兼容编程接口代码。
| 表 5.123 基于内存的安全访问组件 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0x01:内存组件。 |
| 旗帜 | 1 | 1 | 保留以供将来使用。 |
| 长度 | 2 | 2 | 该条目的长度(以字节为单位)。 |
| 保留 | 4 | 4 | 填充。 |
| 内存地址基址 | 8 | 8 | 内存组件的起始地址。 |
| 内存长度 | 8 | 16 | 16内存组件的长度(以字节为单位)。 |
5.2.26.1.2. 基于 PCIe 端点设备的设备结构
| 表 5.124 基于 PCIe 端点设备的设备结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0x01:PCIe 端点设备。 |
| 旗帜 | 1 | 1 | 位 0:允许切换到非安全OS。所有其他位均保留且必须为零。 |
| 长度 | 2 | 2 | 该条目的长度(以字节为单位)。 |
| PCI 段号 | 2 | 4 | PCI 设备的段号。 |
| 起始巴士号码 | 2 | 6 | 该字段描述安全设备所在的总线号(由PCI主桥生成的第一个PCI总线的总线号)。 |
| PCI 路径偏移 | 2 | 8 | 指向安全PCI设备结构数据区域中PCI路径条目偏移量的指针。 PCI路径描述了从主机桥到设备的分层路径。例如,N 深层次结构中的设备由 N 个{PCI 设备编号,PCI 功能编号}对标识,其中 N 是正整数。偶数编号的偏移量包含设备编号,奇数编号的偏移量包含功能编号。第一个 {Device, Function} 对驻留在由“Start Bus Number”字段标识的总线上。每个后续对都驻留在前一对所标识的设备总线后面的总线上。目标设备的身份(总线、设备和功能)是通过递归地遍历这 N 个{设备,功能}对来获得的。 |
| PCI 路径长度 | 2 | 10 | 10 PCI路径条目的长度。 |
| 供应商特定数据偏移 | 2 | 12 | 12特定于设备的数据的偏移量。 |
| 供应商特定数据长度 | 2 | 14 | 14特定于设备的数据长度。 |
示例
下表是为 PCIe 设备(总线 1、开发 2、功能 1)实现基于 PCIe 端点设备的设备结构的示例,该设备是 PCIe 根端口(总线 0、开发 18、功能 0)的子端口。
| 表 5.125 基于 PCIe 端点设备的设备结构示例 字段 | 字节长度 | 字节偏移 | 价值 |
|---|---|---|---|
| 类型 | 1 | 0 | 0x01:PCIe 端点设备。 |
| 旗帜 | 1 | 1 | 0x01 |
| 长度 | 2 | 2 | 0x18 |
| PCI 段号 | 2 | 4 | 0x0 |
| 起始巴士号码 | 2 | 6 | 0x0 |
| PCI 路径偏移 | 2 | 8 | 0x10(16DEC) |
| PCI 路径长度 | 2 | 10 | 10 0x4 |
| 供应商特定数据偏移 | 2 | 12 | 12 0x14(20DEC) |
| 供应商特定数据长度 | 2 | 14 | 14 0x4 |
| PCI 路径 | |||
| PCI 设备 | 1 | 16 | 16 0x12(18DEC) |
| PCI 功能 | 1 | 17 | 17 0x0 |
| PCI 设备 | 1 | 18 | 18 0x2 |
| PCI 功能 | 1 | 19 | 19 0x1 |
| 供应商特定数据 | 4 | 20 | 0x死牛肉 |