INF LogConfig 指令
LogConfig 指令引用了一个或多个 INF 编写器定义的部分,其中部分都指定了硬件资源的逻辑配置,即设备可以使用的中断请求线、内存范围、I/O 端口和 DMA 通道。 每个 log-config-section 都指定了设备可使用的另一组总线相关硬件资源。
[DDInstall] |
[DDInstall.LogConfigOverride]
LogConfig=log-config-section[,log-config-section]...
非 PnP 设备的 INF 文件会使用此指令来创建基本配置。
PnP 设备的 INF 文件只会使用此指令来创建替代配置。
LogConfig 指令引用的每个命名部分的形式如下:
[log-config-section]
ConfigPriority=priority-value[,config-type]
[DMAConfig=[DMAattrs:]DMANum[,DMANum]...]
[IOConfig=io-range[,io-range]...]
[MemConfig=mem-range[,mem-range]...]
[IRQConfig=[IRQattrs:]IRQNum[,IRQNum]...]
[PcCardConfig=ConfigIndex[:[MemoryCardBase1][:MemoryCardBase2]][(attrs)]]
[MfCardConfig=ConfigRegBase:ConfigOptions[:IoResourceIndex][(attrs)]...]
...
条目
ConfigPriority=priority-value
指定此逻辑配置的优先级值,可以是以下值之一:
DESIRED
软配置,最理想的配置。
NORMAL
软配置,不如 DESIRED 理想。 这是典型设置。
如果 log-config-section 在 DDInstall.LogConfigOverride 部分中定义,且无法指定 config-type 值,则应指定 NORMAL。
SUBOPTIMAL
软配置,不如 NORMAL 理想。
HARDRECONFIG
需要更改跳线才能重新配置。
HARDWIRED
无法更改。
RESTART
需要重启才能生效。
REBOOT
这与 RESTART 相同。
POWEROFF
需要重启才能生效。
DISABLED
硬件/设备已禁用。
DMAConfig=[DMAattrs:]DMANum[**,**DMANum]...]
如果设备连接在只有 8 位 DMA 通道的总线上,并且设备使用标准系统 DMA,则 DMAattrs 为可选项。 否则,可以是以下字母之一:
Letter | 含义 |
---|---|
D | 32 位 DMA |
W | 16 位 DMA |
N | 8 位 DMA |
如果设备使用总线主 DMA,则必须使用 M 和下列(互斥)字母之一来表示所使用的 DMA 通道类型:A、B 或 F。如果没有指定 A、B 或 F,则假定使用标准 DMA 通道。
DMANum 会以十进制数指定一个或多个总线相关 DMA 通道,每个通道之间用逗号 (,) 隔开。
IOConfig=io-range[,io-range]...
指定设备的一个或多个 I/O 端口范围,可采用以下任一种形式:
start-end[([decode-mask][:alias-offset][:attr])](类型 1 I/O 范围)
start
以 64 位十六进制地址指定 I/O 端口范围的起始地址。
end
指定 I/O 端口范围的结束地址,也是 64 位十六进制地址。
decode-mask
定义别名类型,可以是以下类型之一:
掩码值 | 含义 | IOR_Alias 值 |
---|---|---|
3ff | 10 位解码 | 0x04 |
fff | 12 位解码 | 0x10 |
ffff | 16 位解码 | 0x00 |
0 | 正解码 | 0xFF |
alias-offset
未使用。
attr
如果给定范围在系统内存中,则指定字母 M。 如果省略,则给定范围为 I/O 端口空间。
size@min-max[%align-mask][([decode-mask][:alias-offset][:attr])](类型 2 I/O 范围)
size
以 32 位十六进制值指定 I/O 端口范围所需的字节数。
min
以 64 位十六进制地址指定 I/O 端口范围的最低起始地址。
max
以 64 位十六进制地址指定 I/O 端口范围的最高终止地址。
align-mask
可选择指定一个 64 位掩码,该掩码用于按位 AND 运算,以便将 I/O 端口范围的起点与整形(通常为 32 位或 64 位)地址边界对齐。
decode-mask
定义别名类型,可以是以下类型之一:
掩码值 | 含义 | IOR_Alias 值 |
---|---|---|
3ff | 10 位解码 | 0x04 |
fff | 12 位解码 | 0x10 |
ffff | 16 位解码 | 0x00 |
0 | 正解码 | 0xFF |
alias-offset
未使用。
attr
如果给定范围在系统内存中,则指定字母 M。 如果省略,则给定范围为 I/O 端口空间。
MemConfig=mem-range[,mem-range]...
以下列形式之一指定设备的一个或多个内存范围:
start-end[(attr)] | size@min-max[%align-mask][(attr)]
start
以 64 位十六进制值指定设备内存范围的起始(总线相关)物理地址。
end
指定内存范围的结束物理地址,也是 64 位十六进制值。
attr
用以下一个或多个字母指定内存范围的属性:
Letter | 含义 |
---|---|
R | 只读 |
W | 只写 |
RW | 读/写 |
C | 允许合并写入 |
H | 可缓存 |
F | 可预提取 |
D | 卡片解码寻址为 32 位,而不是 24 位 |
如果同时指定 R 弧 W 或两者均未指定,则假定为读取/写入。
size
以 32 位十六进制值指定内存范围所需的字节数。
min
以 64 位十六进制值指定设备内存范围的最低起始地址。
max
以 64 位十六进制值指定内存范围的最高终止地址。
align-mask
可选指定一个 64 位掩码,该掩码用于按位 AND 运算,以便将设备内存范围的起始点与整形(通常为 64 位)地址边界对齐。
如果省略 align-mask,则默认内存对齐方式为 4K 边界 (FFFFF000)。
IRQConfig=[IRQattrs:]IRQNum[,IRQNum]...
如果设备使用总线相关、边缘触发的 IRQ,则省略 IRQattrs。 否则,请指定 L 表示电平触发的 IRQ,如果设备可以共享此条目中列出的 IRQ 线路,则指定 LS 表示电平触发的 IRQ。
IRQNum 以十进制数字指定设备可以使用的一个或多个总线相关 IRQ,每个 IRQ 之间用逗号 (,) 隔开。
PcCardConfig=ConfigIndex[:[MemoryCardBase1][:MemoryCardBase2]][(attrs)]
配置 CardBus 寄存器和/或创建最多两个映射到设备属性空间的永久内存窗口。 驱动程序可以使用内存窗口从 ISR 访问属性空间。 以十六进制格式指定所有数值。
PcCardConfig 条目的元素如下:
ConfigIndex
为 PCMCIA 总线上的设备指定 8 位 PCMCIA 配置索引。
MemoryCardBase1
可选择指定第一个内存窗口的 32 位基址。
MemoryCardBase2
可选择指定第二个内存窗口的 32 位基址。
attrs
可选择指定设备的一个或多个属性,以空格分隔。 无效的属性指定符会导致整个 PcCardConfig 条目无效。 如果为特定属性提供了多个指定符,则这些属性将应用于设备的单个 I/O 或内存窗口。 如果只提供了一个指定符,则该属性将应用于所有窗口(请参阅下面的示例)。
具体来说,如果提供了多个指定符,则从左到右读取的第一个指定符将应用于第一个窗口,下一个指定符将被应用于第二个窗口。 单个 PcCardConfig 条目最多可控制两个 I/O 窗口和两个内存窗口。 如果设备有两个以上内存窗口,则必须包含第二个 PcCardConfig 条目。
这些属性包括:
属性 | 说明 |
---|---|
W | 16 位 I/O 数据路径。 如果 INF 指定了 LogConfig 指令,则默认值为 8 位。 如果未指定 LogConfig 指令,则驱动程序将使用 16 位 I/O。 |
Sn | ~IOCS16 源。 如果 n 为 0,则 ~IOCS16 将基于数据大小位的值。 如果 n 为 1,则 ~IOCS16 基于来自设备的 ~IOIS16 信号。 默认值为 S1。 |
Zn | I/O 8 位,零等待状态。 如果 n 为 1,则 8 位 I/O 访问不需要额外的等待状态。 如果 n 为 0,则访问时会出现额外的等待状态。 此标志对 16 位 I/O 没有意义。 默认值为 Z0。 |
Xln | I/O 等待状态。 如果 n 为 1,则 16 位系统访问将多一个等待状态。 默认值为 Xl1。 |
M | 16 位内存数据路径。 默认值为 8 位。 |
M8 | 8 位内存数据路径。 |
XMn | 内存等待状态,其中 n 可以是 0、1、2 或 3。 此值决定内存窗口 16 位访问的额外等待状态数。 默认值为 XM3。 |
A | 要映射为属性内存的内存范围。 |
C | 要映射为普通内存的内存范围(默认值)。 |
例如,attrs 值为 (WB CA M XM1 XI0) 时,转换结果如下:
1st I/O window is 16-bit
2nd I/O window 8-bit
1st memory window is common
2nd memory window is attribute
Memory is 16-bit
One wait state on memory windows
Zero wait states on I/O windows
MfCardConfig=ConfigRegBase:ConfigOptions[:IoResourceIndex][(attrs)]...
为多功能设备的一个函数指定一组配置寄存器的属性内存位置,如下所示:
ConfigRegBase
指定多功能设备此函数配置寄存器的属性偏移量。
ConfigOptions
指定 8 位 PCMCIA 配置选项寄存器。
IoResourceIndex
指定 IOConfig 条目的索引,以供总线驱动器在编程配置 I/O 基本寄存器和限位寄存器时使用。 此索引从 0 开始,即 0 表示此 log-config-section 中的初始 IOConfig 条目。
attrs
如果设置为字母 A,则指示 PCMCIA 总线驱动程序打开配置和状态寄存器中的音频启用功能。
每个 MfCardConfig 条目都会提供有关多功能设备的单个功能的信息。 当一组 LogConfig 指令分别引用 INF 的 DDInstall.LogConfigOverride 部分中的离散 log-config-section 时,每个 log-config-section 都必须以相同顺序列出其条目,包括 MfCardConfig 条目。
注解
LogConfig 指令可在任何按制造商、按模型 INF DDInstall 部分或 INF DDInstall.LogConfigOverride 部分下指定。
非 PnP 设备的 INF 支持多种可选逻辑配置,通常在 DDInstall 部分下定义一组 log-config-sections。 每个 log-config-section 都会指定一组离散的逻辑配置资源。 它还包括一个 ConfigPriority 条目,该条目会根据每个逻辑配置对设备和驱动程序性能的影响、初始化的难易程度等对其进行排序。
对于 PnP 设备,PnP 管理器会为每个 PnP 设备分配一组逻辑硬件资源。 也就是说,PnP 管理器会查询系统总线驱动程序,接收它们关于每个设备正在使用的 I/O 总线配置资源的报告,并为每个设备分配逻辑硬件资源集,以实现所有此类资源的使用在全系统范围内的最佳平衡。
因此,对于 PnP 设备,DDInstall 部分下的 LogConfig 指令将被忽略。 要替代总线报告的 PnP 设备资源,请在 DDInstall.LogConfigOverride 部分下包含 LogConfig 指令。 在这种情况下,将使用 log-config-section 中指定的资源,而不是总线报告的资源。
平台扩展可添加到包含 LogConfig 指令的 DDInstall 部分或 DDInstall.LogConfigOverride 部分中,以指定特定于平台或特定于操作系统的逻辑配置。 有关详细信息,请参阅创建 INF 文件。
给定的 log-config-section 名称在 INF 文件中必须是唯一的,但它可以被同一设备的其他 INF DDInstall 部分中的 LogConfig 指令引用。 每个 INF-writer-created 部分名称在 INF 文件中都必须唯一,并且必须遵循定义部分名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的常规语法规则。
每个 log-config-section 中只能使用一个 ConfigPriority 条目。 根据设备的硬件资源要求,其他每个条目都可能不止一个。
一个或多个 MfCardConfig= 条目只能出现在多功能设备 INF 的 DDInstall.LogConfigOverride 部分中 LogConfig 指令引用的 log-config-section 中。 有关多功能设备 INF 文件的详细信息,请参阅支持多功能设备。
LogConfig 引用部分的条目和值
系统安装程序根据 log-config-section 建立二进制逻辑配置记录,并将其存储在注册表中。
INF 文件可以包含任意数量的每设备 log-config-sections 文件。 但是,每一部分都必须包含安装一个设备的完整信息。 一般来说,INF 应按相同顺序指定其 log-config-sections 中的每个条目。 INF 应按照最适合驱动程序初始化设备的顺序来指定每组条目。
如果给定设备存在多个 log-config-section,则安装时只使用其中一个 INF 部分。 此类 INF 文件通过在每个 log-config-section 中提供的 ConfigPriority 值,部分地控制使用哪个部分。 也就是说,系统安装程序会尝试遵循 INF 文件中的任何配置优先级,但如果发现与已安装的设备冲突,则可能会选择等级较低的逻辑配置。
在安装过程中,会从给定 log-config-section 中的每个条目中选择一个且仅选择一个资源,并将其分配给特定设备。 如果某个设备需要多个相同类型的资源,则必须在其 log-config-sections 中使用一组该类型的条目。
例如,要确保特定设备有两个 I/O 端口范围,必须在该设备的 log-config-section 中指定两个 IOConfig= 条目。 另一方面,如果设备不需要 IRQ,其 INF 可以省略 log-config-sections 中的 IRQConfig 条目。
示例
此示例显示了 PCMCIA 设备的一些有效 PcCardConfig 条目。
PcCardConfig=0:E0000:F0000(W)
PcCardConfig=0:E0000(M)
PcCardConfig=0::(W)
PcCardConfig=0(W)
此示例显示了 IOConfig 条目中的类型 1 I/O 范围规范。 它指定了一个 I/O 端口区域,大小为 8 个字节,可以从 1F8、2F8 或 3F8 开始。
IOConfig=1F8-1FF, 2F8-2FF, 3F8-3FF
相比之下,此示例在 IOConfig 条目中显示了类型 2 I/O 范围规范。 它指定了一个 I/O 端口区域,大小为 8 个字节,可以从 300、308、310、318、320 或 328 开始。
IOConfig=8@300-32F%FF8
此示例显示了一组四端口设备的 IOConfig 条目,每个条目指定了一个 I/O 端口范围,该范围与下一个端口的偏移量为 0x400。
IoConfig=0x200-0x21f
IoConfig=0x600-0x61f
IoConfig=0xA00-0xA1f
IoConfig=0xE00-0xE1f
下面的两个示例展示了典型的 MemConfig 条目。
此示例指定了一个 32K 字节的内存区域,可以从 C0000 或 D0000 开始。
MemConfig=C0000-C7FFF, D0000-D7FFF
此示例指定了一个从 64K 边界开始的 32K 字节的内存区域。
MemConfig=8000@C0000-D7FFF%F0000
此示例显示了系统 HDC 类 INF 文件如何为通用 ESDI 硬盘控制器设置多个 log-config-sections 并为特定 IDE 控制器使用 DDInstall.LogConfigOverride 部分。
[MS_HDC] ; per-manufacturer Models section
%FujitsuIdePccard.DeviceDesc% =
atapi_fujitsu_Inst, PCMCIA\FUJITSU-IDE-PC_CARD-DDF2
%*PNP0600.DeviceDesc% = atapi_Inst, *PNP0600 ; generic ESDI HDCs
; ... other manufacturers' Models sections omitted
[atapi_Inst]
CopyFiles = @atapi.sys
LogConfig = esdilc1, esdilc2, esdilc3, esdilc4
; ... [atapi_Inst.Services] + service/EventLog-install omitted here
[esdilc1]
ConfigPriority=HARDWIRED
IOConfig=1f0-1f7(3ff::)
IoConfig=3f6-3f6(3ff::)
IRQConfig=14
[esdilc2]
ConfigPriority=HARDWIRED
IOConfig=170-177(3ff::)
IoConfig=376-376(3ff::)
IRQConfig=15
[esdilc3]
ConfigPriority=HARDWIRED
IOConfig=1e8-1ef(3ff::)
IoConfig=3ee-3ee(3ff::)
IRQConfig=11
[esdilc4]
; ...
[atapi_fujitsu_Inst.LogConfigOverride]
LogConfig = fujitsu.LogConfig0
[fujitsu.LogConfig0]
ConfigPriority=NORMAL
IOConfig=10@100-400%fff0
IRQConfig=14,15,5,7,9,11,12,3
PcCardConfig=1:0:0(W)
有关如何使用 MfCardConfig 条目的示例,请参阅支持配置寄存器地址不完整的 PC 卡。