Diretiva INF LogConfig
Cuidado
A partir do Windows 11 versão 22H2, um pacote de driver que usa essa diretiva não está mais qualificado para uma assinatura da Central do Desenvolvedor para Hardware.
Os pacotes de driver Universais e os Drivers do Windows não podem usar essa diretiva.
Uma diretiva LogConfig faz referência a uma ou mais seções definidas pelo gravador INF, cada uma das quais especifica uma configuração lógica de recursos de hardware − as linhas de solicitação de interrupção, intervalos de memória, portas de E/S e canais DMA que podem ser usados pelo dispositivo. Cada log-config-section especifica um conjunto alternativo de recursos de hardware relativos ao barramento que podem ser usados pelo dispositivo.
[DDInstall] |
[DDInstall.LogConfigOverride]
LogConfig=log-config-section[,log-config-section]...
Os arquivos INF para dispositivos não PnP usam essa diretiva para criar configurações básicas.
Os arquivos INF para dispositivos PnP usam essa diretiva somente para criar configurações de substituição.
Cada seção nomeada referenciada por uma diretiva LogConfig tem o seguinte formato:
[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)]...]
...
Entradas
ConfigPriority=priority-value
Especifica o valor de prioridade para essa configuração lógica, como um dos seguintes:
DESIRED
Configuração flexível, a mais ideal.
NORMAL
Configuração flexível, menos ideal do que DESIRED. Essa é a configuração típica.
NORMAL deve ser especificada se a log-config-section tiver sido definida em uma seção DDInstall.LogConfigOverride e nenhum valor de config-type puder ser especificado.
SUBOPTIMAL
Configuração flexível, menos ideal do que a NORMAL.
HARDRECONFIG
Requer uma mudança de jumper para reconfigurar.
HARDWIRED
Não pode ser mudado.
RESTART
Requer uma reinicialização para entrar em vigor.
REBOOT
É igual a RESTART.
POWEROFF
Requer ciclo de energia para entrar em vigor.
DISABLED
O hardware/dispositivo está desabilitado.
DMAConfig=[DMAattrs:]DMANum[**,**DMANum]...]
DMAattrs será opcional se o dispositivo estiver conectado em um barramento que tenha apenas canais DMA de 8 bits e o dispositivo usar o DMA padrão do sistema. Caso contrário, pode ser uma das seguintes letras:
Letter | Significado |
---|---|
D | DMA de 32 bits |
W | DMA de 16 bits |
N | DMA de 8 bits |
Se o dispositivo usar DMA de barramento mestre, você deverá usar M com uma das seguintes letras (mutuamente exclusivas) que indicam o tipo de canal DMA usado: A, B ou F. Se nem A, B ou F forem especificados, um canal DMA padrão será assumido.
DMANum especifica um ou mais canais DMA relativos ao barramento como números decimais, cada um separado do próximo por uma vírgula (,).
IOConfig=io-range[,io-range]...
Especifica um ou mais intervalos de portas de E/S para o dispositivo, em uma das seguintes formas:
start-end[([decode-mask][:alias-offset][:attr])] (Intervalo de E/S Tipo 1)
start
Especifica o endereço inicial do intervalo de portas de E/S como um endereço hexadecimal de 64 bits.
end
Especifica o endereço final do intervalo de portas de E/S, também como um endereço hexadecimal de 64 bits.
decode-mask
Define o tipo de alias e pode ser qualquer um dos seguintes:
Valor da máscara | Significado | Valor de IOR_Alias |
---|---|---|
3ff | Decodificação de 10 bits | 0x04 |
fff | Decodificação de 12 bits | 0x10 |
ffff | Decodificação de 16 bits | 0x00 |
0 | Decodificação positiva | 0xFF |
alias-offset
Não usado.
attr
Especifica a letra M se o intervalo fornecido estiver na memória do sistema. Se omitido, o intervalo fornecido estará no espaço da porta de E/S.
size@min-max[%align-mask][([decode-mask][:alias-offset][:attr])] (Intervalo de E/S Tipo 2)
size
Especifica o número de bytes necessários para o intervalo de portas de E/S como um valor hexadecimal de 32 bits.
min
Especifica o menor endereço inicial possível do intervalo de portas de E/S como um endereço hexadecimal de 64 bits.
max
Especifica o maior endereço final possível do intervalo de portas de E/S como um endereço hexadecimal de 64 bits.
align-mask
Opcionalmente, especifica uma máscara de 64 bits que é usada em uma operação AND bit a bit para alinhar o início do intervalo de portas de E/S em um limite de endereço integral (geralmente de 32 bits ou 64 bits).
decode-mask
Define o tipo de alias e pode ser qualquer um dos seguintes:
Valor da máscara | Significado | Valor de IOR_Alias |
---|---|---|
3ff | Decodificação de 10 bits | 0x04 |
fff | Decodificação de 12 bits | 0x10 |
ffff | Decodificação de 16 bits | 0x00 |
0 | Decodificação positiva | 0xFF |
alias-offset
Não usado.
attr
Especifica a letra M se o intervalo fornecido estiver na memória do sistema. Se omitido, o intervalo fornecido estará no espaço da porta de E/S.
MemConfig=mem-range[,mem-range]...
Especifica um ou mais intervalos de memória para o dispositivo em uma das seguintes formas:
start-end[(attr)] | size@min-max[%align-mask][(attr)]
start
Especifica o endereço físico inicial (relativo ao barramento) do intervalo de memória do dispositivo como um valor hexadecimal de 64 bits.
end
Especifica o endereço físico final do intervalo de memória, também como um valor hexadecimal de 64 bits.
attr
Especifica os atributos do intervalo de memória como uma ou mais das seguintes letras:
Letter | Significado |
---|---|
R | Somente leitura |
W | Somente gravação |
RW | Leitura/gravação |
C | Gravação combinada permitida |
H | Cacheable |
F | Pré-buscável |
D | O endereçamento de decodificação do cartão é de 32 bits, em vez de 24 bits |
Se R e W forem especificados ou se nenhum for especificado, a leitura/gravação será assumida.
size
Especifica o número de bytes necessários no intervalo de memória como um valor hexadecimal de 32 bits.
min
Especifica o endereço inicial mais baixo possível do intervalo de memória do dispositivo como um valor hexadecimal de 64 bits.
max
Especifica o endereço final mais alto possível do intervalo de memória como um valor hexadecimal de 64 bits.
align-mask
Opcionalmente, especifica uma máscara de 64 bits que é usada em uma operação AND bit a bit para alinhar o início do intervalo de memória do dispositivo em um limite de endereço integral (geralmente de 64 bits).
Se align-mask for omitido, o alinhamento de memória padrão estará em um limite de 4K (FFFFF000).
IRQConfig=[IRQattrs:]IRQNum[,IRQNum]...
IRQattrs será omitido se o dispositivo usar um IRQ relativo ao barramento disparado por borda. Caso contrário, especifique L para indicar um IRQ disparado por nível e LS se o dispositivo puder compartilhar a linha IRQ listada nesta entrada.
IRQNum especifica um ou mais IRQs relativos ao barramento que o dispositivo pode usar como números decimais, cada um separado do próximo por uma vírgula (,).
PcCardConfig=ConfigIndex[:[MemoryCardBase1][:MemoryCardBase2]][(attrs)]
Configura registros CardBus e/ou cria até duas janelas de memória permanentes que mapeiam para o espaço de atributos do dispositivo. Um driver pode usar as janelas de memória para acessar o espaço de atributo de um ISR. Especifique todos os valores numéricos no formato hexadecimal.
Os elementos de uma entrada PcCardConfig são os seguintes:
ConfigIndex
Especifica o índice de configuração PCMCIA de 8 bits para um dispositivo em um barramento PCMCIA.
MemoryCardBase1
Opcionalmente, especifica um endereço base de 32 bits para uma primeira janela de memória.
MemoryCardBase2
Opcionalmente, especifica um endereço base de 32 bits para uma segunda janela de memória.
attrs
Opcionalmente, especifica um ou mais atributos para o dispositivo, separados por espaços. Um especificador de atributo inválido invalida toda a entrada PcCardConfig. Se mais de um especificador para um atributo específico for fornecido, os atributos serão aplicados a janelas de E/S ou memória individuais para o dispositivo. Se apenas um especificador for fornecido, esse atributo será aplicado a todas as janelas (consulte o exemplo a seguir).
Especificamente, se vários especificadores forem fornecidos, o primeiro especificador encontrado lendo da esquerda para a direita será aplicado à primeira janela e o próximo especificador será aplicado à segunda janela. Um máximo de duas janelas de E/S e duas janelas de memória podem ser controladas por uma única entrada PcCardConfig. Se o dispositivo tiver mais de duas janelas de memória, uma segunda entrada PcCardConfig deverá ser incluída.
Os atributos incluem:
Atributo | Descrição |
---|---|
W | Caminho de dados de E/S de 16 bits. O padrão será 8 bits se o INF especificar uma diretiva LogConfig. Se nenhuma diretiva LogConfig for especificada, o driver usará E/S de 16 bits. |
Sn | ~IOCS16 source. Se n for 0, ~IOCS16 será baseado no valor do bit de tamanho de dados. Se n for 1, ~IOCS16 será baseado no sinal ~IOIS16 do dispositivo. O padrão é S1. |
Zn | E/S de 8 bits, estado de espera zero. Se n for 1, os acessos de E/S de 8 bits ocorrerão com nenhum estado de espera adicional. Se n for 0, o acesso ocorrerá com estados de espera adicionais. Esse sinalizador não tem significado para E/S de 16 bits. O padrão é Z0. |
Xln | Estados de espera de E/S. Se n for 1, os acessos ao sistema de 16 bits ocorrerão com um estado de espera adicional. O padrão é Xl1. |
M | Caminho de dados de memória de 16 bits. O padrão é 8 bits. |
M8 | Caminho de dados de memória de 8 bits. |
XMn | Estados de espera de memória, onde n pode ser 0, 1, 2 ou 3. Esse valor determina o número de estados de espera adicionais para acessos de 16 bits a uma janela de memória. O padrão é XM3. |
A | Intervalo de memória a ser mapeado como Memória de atributo. |
C | Intervalo de memória a ser mapeado como Memória Comum (padrão). |
Por exemplo, um valor attrs de (WB CA M XM1 XI0) se traduz no seguinte:
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)]...
Especifica o local da memória de atributo do conjunto de registros de configuração para uma função de um dispositivo multifuncional, da seguinte maneira:
ConfigRegBase
Especifica o deslocamento de atributo dos registros de configuração para esta função do dispositivo multifuncional.
ConfigOptions
Especifica o registro de opção de configuração PCMCIA de 8 bits.
IoResourceIndex
Especifica o índice para a entrada IOConfig para o driver de barramento usar na programação da base de E/S de configuração e registros de limite. Esse índice é baseado em zero, ou seja, zero designa a entrada IOConfig inicial nesta log-config-section.
attrs
Se definido como a letra A, direciona o driver de barramento PCMCIA para ativar a habilitação de áudio nos registros de configuração e status.
Cada entrada MfCardConfig fornece informações sobre uma única função do dispositivo multifuncional. Quando um conjunto de diretivas LogConfig faz referência a uma log-config-section discreta na seção DDInstall.LogConfigOverride do INF, cada log-config-section deverá ter suas entradas, incluindo as entradas de MfCardConfig, listadas na mesma ordem.
Comentários
Uma diretiva LogConfig pode ser especificada em qualquer seção INF DDInstall por fabricante, por modelos ou seção INF DDInstall.LogConfigOverride.
Um INF para um dispositivo não PnP que dá suporte a várias configurações lógicas alternativas normalmente define um conjunto de log-config-sections em uma seção DDInstall. Cada log-config-section especifica um conjunto discreto de recursos de configuração lógica. Ele também inclui uma entrada ConfigPriority, que classifica cada configuração lógica de acordo com seus efeitos no desempenho do dispositivo e do driver, facilidade de inicialização e assim por diante.
Para dispositivos PnP, o gerenciador PnP atribui um conjunto de recursos lógicos de hardware a cada dispositivo PnP. Ou seja, o gerenciador PnP consulta os drivers de barramento do sistema, recebe seus relatórios de recursos de configuração de barramento de E/S por dispositivo em uso e atribui conjuntos de recursos lógicos de hardware por dispositivo para obter o melhor equilíbrio em todo o sistema no uso de todos esses recursos.
Como resultado, a diretiva LogConfig em uma seção DDInstall é ignorada para dispositivos PnP. Para substituir os recursos relatados pelo barramento para um dispositivo PnP, inclua a diretiva LogConfig em uma seção DDInstall.LogConfigOverride. Nesse caso, os recursos especificados na seção log-config-section são usados em vez daqueles relatados pelo barramento.
As extensões de plataforma podem ser adicionadas a uma seção DDInstall, que contém uma diretiva LogConfig ou a uma seção DDInstall.LogConfigOverride, para especificar configurações lógicas específicas da plataforma ou do sistema operacional. Para obter mais informações, consulte Criar um arquivo INF.
Um determinado nome de log-config-section deve ser exclusivo no arquivo INF, mas pode ser referenciado por diretivas LogConfig em outras seções INF DDInstall para os mesmos dispositivos. Cada nome de seção INF-writer-created deve ser exclusivo dentro do arquivo INF e deve seguir as regras gerais para definir nomes de seção. Para mais informações sobre essas regras, consulte Regras gerais de sintaxe para arquivos INF.
Apenas uma entrada ConfigPriority pode ser usada em cada log-config-section. Pode haver mais de uma de cada uma das outras entradas, dependendo dos requisitos de recursos de hardware do dispositivo.
Uma ou mais entradas MfCardConfig= podem aparecer apenas em uma log-config-section referenciada por uma diretiva LogConfig na seção DDInstall.LogConfigOverride de um INF para um dispositivo multifuncional. Para obter mais informações sobre arquivos INF para dispositivos multifuncionais, consulte Suporte a dispositivos multifuncionais.
Entradas e valores de seção referenciados por LogConfig
A partir de uma log-config-section, o instalador do sistema cria registros de configuração lógica binária e os armazena no registro.
Um arquivo INF pode conter qualquer número de log-config-sections por dispositivo. No entanto, cada seção deve conter informações completas para a instalação de um dispositivo. Em geral, o INF deve especificar as entradas em cada uma de suas log-config-sections. O INF deve especificar cada conjunto de entradas na ordem mais adequada à forma como o driver inicializa seu dispositivo.
Se mais de uma log-config-section estiver presente para um determinado dispositivo, apenas uma dessas seções INF será usada durante a instalação. Esse arquivo INF controla parcialmente qual seção é usada com o valor ConfigPriority que ele fornece em cada log-config-section. Ou seja, os instaladores do sistema tentam honrar todas as prioridades de configuração em um arquivo INF, mas podem selecionar uma configuração lógica de classificação inferior se um conflito com um dispositivo já instalado for encontrado.
Durante a instalação, um e apenas um recurso de cada entrada em uma determinada log-config-section é selecionado e atribuído a um dispositivo específico. Se um dispositivo específico precisar de mais de um recurso do mesmo tipo, um conjunto de entradas desse tipo deverá ser usado em suas log-config-sections.
Por exemplo, para garantir dois intervalos de portas de E/S para um dispositivo específico, duas entradas IOConfig= devem ser especificadas na log-config-section desse dispositivo. Por outro lado, se um dispositivo não exigir IRQ, seu INF poderá omitir a entrada IRQConfig das log-config-sections.
Exemplos
Este exemplo mostra algumas entradas PcCardConfig válidas para um dispositivo PCMCIA.
PcCardConfig=0:E0000:F0000(W)
PcCardConfig=0:E0000(M)
PcCardConfig=0::(W)
PcCardConfig=0(W)
Este exemplo mostra uma especificação de intervalo de E/S Tipo 1 em uma entrada IOConfig. Ele especifica uma região de porta de E/S, com oito bytes de tamanho, que pode começar em 1F8, 2F8 ou 3F8.
IOConfig=1F8-1FF, 2F8-2FF, 3F8-3FF
Por outro lado, este exemplo mostra uma especificação de intervalo de E/S Tipo 2 em uma entrada IOConfig. Ele especifica uma região de porta de E/S, com oito bytes de tamanho, que pode começar em 300, 308, 310, 318, 320 ou 328.
IOConfig=8@300-32F%FF8
Este exemplo mostra um conjunto de entradas IOConfig para um dispositivo de quatro portas, cada uma especificando um intervalo de portas de E/S que é deslocado por 0x400 bytes do próximo.
IoConfig=0x200-0x21f
IoConfig=0x600-0x61f
IoConfig=0xA00-0xA1f
IoConfig=0xE00-0xE1f
Os próximos dois exemplos mostram entradas MemConfig típicas.
Este exemplo especifica uma região de memória de 32K bytes que pode começar em C0000 ou D0000.
MemConfig=C0000-C7FFF, D0000-D7FFF
Este exemplo especifica uma região de memória de 32 mil bytes começando em limites de 64 K.
MemConfig=8000@C0000-D7FFF%F0000
Este exemplo mostra como o arquivo INF da classe HDC do sistema configura várias log-config-sections para controladores de disco rígido ESDI genéricos e usa uma seção DDInstall.LogConfigOverride para um controlador IDE específico.
[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)
Para obter alguns exemplos de como as entradas MfCardConfig são usadas, consulte Suporte a placas de PC com endereços de registro de configuração incompletos.