串行端口控制台重定向表 (SPCR)

本文档定义串行端口控制台重定向表的内容。 此表用于指示串行端口或非旧 UART 接口是否可用于 Microsoft® Windows® Emergency Management Services (EMS) 。

该表提供有关串行端口或非旧 UART 接口的配置和使用的信息。 在 BIOS 或系统固件使用串行端口进行控制台输入/输出的系统上,此表应用于传达有关设置的信息,以确保固件控制台输出和 Windows EMS 输出之间无缝转换。

此表必须与其他 ACPI 表一起位于系统内存中,并且必须在 ACPI RSDT 表中引用它。

专利通知:Microsoft 根据两个选项为本规范的实现提供某些专利权:

  1. Microsoft 的社区承诺,可从 https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx获取;或
  2. Open Web Foundation 最终规范协议版本 1.0 (“OWF 1.0”) 自 2012 年 10 月 1 日起,可在 Open Web Foundation 网站上获取。
字段 字节长度 字节偏移量 描述
标头
签名 4 0 “SPCR”。 串行端口控制台重定向表的签名。
长度 4 4 整个串行端口控制台重定向表(包括 NamespaceString)的长度(以字节为单位)。
修订 1 8 当前表修订版为 4。
校验和 1 9 整个表格的总和必须为零。
OEM ID 6 10 原始设备制造商 (OEM) ID。
OEM 表格 ID 8 16 对于串行端口控制台重定向表,表 ID 是制造商型号 ID。
OEM 修订 4 24 提供的 OEM 表 ID 的串行端口控制台重定向表的 OEM 修订版。
创建者 ID 4 28 创建该表的实用工具的供应商 ID。
创建者修订 4 32 创建该表的实用工具的修订。
接口类型 1 36 指示寄存器接口的类型:
对于修订版 1:
  • 0 = 完整 16550 接口
  • 1 = 完整的 16450 接口 (还必须接受写入 16550 FCR 寄存器)
  • 2-255 = 保留
对于修订版 2 或更高版本:
请参阅 DBG2 规范表 3 中的串行端口子类型。
预留 3 37 必须为 0。
基址 12 40 使用 ACPI 通用地址结构描述的串行端口寄存器集的基址;如果禁用控制台重定向,则为 0。

注意:
COM1 (0x3F8) 为:
  • 整数形式:0x 01 08 00 00 0000000000000003F8
  • 在内存中查看:0x01080000F803000000000000
COM2 (0x2F8) 为:
  • 整数形式:0x 01 08 00 00 00000000000000002F8
  • 在内存中查看:0x01080000F802000000000000
中断类型 1 52 UART 使用的中断类型 () :
  • Bit[0]:PC-AT 兼容双 8259 IRQ 中断
  • Bit[1]:I/O APIC 中断 (全局系统中断)
  • Bit[2]:I/O SAPIC 中断 (全局系统中断)
  • Bit[3]:ARMH GIC 中断 (全局系统中断)
  • Bit[4]:RISC-V PLIC/APLIC 中断 (全局系统中断)
  • Bit[5:7]:保留 (必须设置为 0)
其中
  • 0 = 不支持
  • 1 = 支持
如果描述的接口仅支持轮询操作,请将此字段设置为零。
同时具有双 8259 和 I/O APIC 或 I/O SAPIC 的平台必须设置 IRQ 位 (Bit[0]) 和相应的全局系统中断位 (例如,支持 8259 和 SAPIC 的系统将为 5) 。
IRQ 1 53 UART 使用的 PC-AT 兼容 IRQ:
  • 2-7、9-12、14-15 分别 = 有效的 IRQ
  • 0-1、8、13、16-255 = 保留
仅当设置了“中断类型”字段的 Bit[0] 时有效。
全局系统中断 4 54 UART 使用的全局系统中断 (GSIV) 。
如果“中断类型”字段的 Bit[1:7] 为 0,则无效。
如果“中断类型”字段的第 3 位 (ARMH GIC) 则使用 Arm GIC 中断控制器。 Arm GIC SGI 和 PPI 中断不能用于 UART,因此禁止将此字段设置为 {0, ..., 31} 或 {1056, ..., 1119} 中的任何值。
配置的波特率 1 58 BIOS 用于重定向的波特率:
  • 0 = 按原样,操作系统依赖于串行端口的当前配置,直到初始化功能完整的驱动程序。
  • 3 = 9600
  • 4 = 19200
  • 6 = 57600
  • 7 = 115200
  • 1-2、5、8-255 = 保留
Parity 1 59
  • 0 = 无奇偶校验
  • 1-255 = 保留
停止位 1 60
  • 1 = 1 个停止位
  • 0,2-255 = 保留
流控制 1 61
  • Bit[0]:传输所需的 DCD
  • Bit[1]:RTS/CTS 硬件流控制
  • Bit[2]:XON/XOFF 软件控制
  • Bit[3:7]:保留,必须为 0
终端类型 1 62 BIOS 用于控制台重定向的终端协议:
  • 0 = VT100
  • 1 = 扩展 VT100 (VT100+)
  • 2 = VT-UTF8
  • 3 = ANSI
  • 4-255 = 保留
语言 1 63 BIOS 重定向的语言。 必须为 0。
PCI 设备 ID 2 64 指定 PCI 设备的设备 ID,其中包含要用作无外设端口的 UART。
如果不是 PCI 设备,则必须0xFFFF。
PCI 供应商 ID 2 66 指定 PCI 设备的供应商 ID,该设备包含要用作无外设端口的 UART。
如果不是 PCI 设备,则必须0xFFFF。
PCI 总线编号 1 68 PCI 总线编号(如果表描述 PCI 设备)。
如果不是 PCI 设备,则必须0x00。
PCI 设备编号 1 69 PCI 设备编号(如果表描述 PCI 设备)。
如果不是 PCI 设备,则必须0x00。
PCI 函数编号 1 70 PCI 函数编号(如果表描述 PCI 设备)。
如果不是 PCI 设备,则必须0x00。
PCI 标志 4 71 PCI 兼容性标志位掩码。 默认情况下应为零。
  • Bit[0]:操作系统不应禁止对此设备进行 PNP 设备枚举或禁用电源管理。 如果不是 PCI 设备,则必须为 0。
  • 位[1-31]:保留,必须为 0。
PCI 细分市场 1 75 PCI 段编号。

对于 PCI 总线少于 255 个的系统,此数字必须为 0。

UART 时钟频率 4 76 对于修订版 2 或更低版本:
  • 必须为 0。
对于修订版 3 或更高版本:
  • 零,表示 UART 时钟频率不确定。
  • 一个非零值,指示 UART 时钟频率(以 Hz 为单位)。
精确波特率 4 80 包含一个特定的非零波特率,该速率替代配置的波特率字段的值。 如果此字段为零或不存在,则使用配置的波特率。 参阅下面的说明。
NamespaceStringLength 2 84 NamespaceString 的长度(以字节为单位),包括 NUL 字符。
NamespaceStringOffset 2 86 从此结构的开头到字段 NamespaceString[] 的偏移量(以字节为单位)。 此值必须有效,因为此字符串必须存在。
NamespaceString[] NamespaceStringLength NamespaceStringOffset 以 NUL 结尾的 ASCII 字符串,用于唯一标识此设备。 此字符串包含对对象的完全限定引用,该对象表示 ACPI 命名空间中的此设备。 如果命名空间设备不存在,NamespaceString[] 只能包含单个“.” (ASCII 句点) 字符。

有关波特率字段的说明

自创建 SPCR 表以来,“配置的波特率”字段一直作为单字节字段存在,并受到操作系统的广泛支持。 但是,由于它是一个枚举,因此它精确描述非传统波特率(如高速 UART 使用的波特率)的能力受到限制。 因此,添加了“精确波特率”字段,使固件能够向支持操作系统提供描述特定波特率 ((例如 15000000) )的 DWORD 值。 当“精确波特率”字段包含非零值时,“配置的波特率”字段应为零。

修订历史

Date 审阅 说明
2/15/00 .10 创建
3/1/00 .50 “SPCR”。 添加的签名数据
3/20/00 .55 已修改的数据,包括端口和 irq
3/22/00 .56 阐明了端口标识 添加了禁用重定向的功能。 添加了指向泛型寄存器地址结构的指针
3/23/00 .56a 格式设置、免责声明、复制编辑
4/24/00 .6 发布在 WinHEC 的 Web 上
4/24/00 .6 公开审查草案已发布
5/25/00 .61 更正BASE_ADDRESS说明
5/25/00 .61 公开审查草案已发布
5/31/00 .7 更正BASE_ADDRESS说明示例。 添加了 16540 接口。
5/31/00 .71 将 GRAS 上的信息从备注更改为“*”
5/31/00 .71 公开审查草案已发布
6/1/00 .72 将 GRAS COM 端口示例更改为 little-endian。 向行尾添加了文本
7/12/00 .75 修复了 IRQ 说明。 修复了各种格式问题,添加了 PCI 总线信息。
7/26/00 .76 更新为 PCI 字段名称“设备编号”。 更改了简介语言,以包含非旧 UART。
8/10/00 .77 更改了中断信息,添加了 APIC 和 SAPIC,添加了流控制
9/22/00 .78 添加了 PCI 段
10/25/00 .80 修复了 PCI 标志部分。 添加了终端类型,添加了 16450 FCR 信息
10/1/01 .95 删除了语言代码
1/11/02 1.00 将更新的许可规范添加到 1.00
3/12/14 1.01 在 Microsoft 社区承诺下发布
6/2/14 1.02 已将表修订版更改为 2,并添加了对 DBG2 规范中定义的其他接口类型的支持。
8/10/15 1.03 更新了专利声明。
7/23/2018 1.04
2020/6/5 1.05 已编辑格式
9/1/2020 1.06 编辑了格式并更新了 DBG2 规范的链接
2021/2/17 1.07 修复了“停止位”字段中的错误说明。 撤消意外删除流控制字段。 已编辑格式。
10/7/2021 1.08 已将表修订版更改为 3,并为 UART 时钟频率创建了字段。 已编辑格式。
4/10/2023 1.09 已将表修订版更改为 4。 向“中断类型”字段添加了 RISC-V 和轮询支持。 添加了新字段:精确波特率、NamespaceStringLength、NamespaceStringOffset 和 NamespaceString[]。
5/1/2023 1.10 阐明了“全局系统中断”和“UART 时钟频率”字段中的措辞。