Acessando o espaço de configuração do dispositivo PCI
Algumas operações em um dispositivo PCI (interconexão de componentes periféricos) são reservadas para o driver de função do dispositivo. Essas operações incluem, por exemplo, acessar o espaço de configuração específico do dispositivo de um barramento e programar um controlador de DMA (acesso direto à memória). A Microsoft dá suporte ao sistema para acessar o espaço de configuração de dispositivos PCI por dois métodos:
Os IRPs (pacotes de solicitação de E/S) de configuração, IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG
Observação
A partir do Windows 10, versão 2004, se um dispositivo tiver uma tabela ACPI SDEV (Dispositivos Seguros) e a segurança baseada em virtualização habilitada, as restrições serão colocadas em métodos sem suporte para acessar o espaço de configuração do dispositivo PCI. Se um driver ou processo tentar ler ou manipular o espaço de configuração do dispositivo PCI usando um método que não está listado acima, o acesso será bloqueado e resultará em um bug do sistema marcar.
Os sistemas operacionais Windows XP e Windows Server 2003 e posterior têm controle exclusivo sobre o cabeçalho de espaço de configuração, conforme definido pela especificação do Barramento Local PCI , bem como todos os recursos na lista vinculada de recursos. Os drivers não devem tentar modificar esses registros.
No entanto, os drivers podem gravar no espaço de configuração que não pertence ao cabeçalho ou à lista de funcionalidades definida pelo fornecedor, usando a solicitação IRP_MN_WRITE_CONFIG ou o método SetBusData de BUS_INTERFACE_STANDARD. Os drivers também podem ler os recursos de um dispositivo, usando a solicitação IRP_MN_READ_CONFIG ou o método GetBusData de BUS_INTERFACE_STANDARD. Para usar IRP_MN_READ_CONFIG ou IRP_MN_WRITE_CONFIG, os drivers devem estar em execução no PASSIVE_LEVEL. Para obter uma lista de recursos e as estruturas correspondentes que os drivers podem consultar, consulte a seção Estruturas PCI .
Os drivers podem ler do espaço de configuração de dispositivo PCI estendido (ou seja, mais de 256 bytes de dados de configuração) usando a solicitação IRP_MN_READ_CONFIG ou o método GetBusData de BUS_INTERFACE_STANDARD. Da mesma forma, os drivers podem gravar no espaço de configuração de dispositivo PCI estendido usando a solicitação IRP_MN_WRITE_CONFIG ou o método SetBusData de BUS_INTERFACE_STANDARD. Se um dispositivo não tiver um espaço de configuração estendido ou a plataforma não definir um caminho para um espaço de configuração estendido em um dispositivo, as solicitações de leitura retornarão 0xFFFF e as solicitações de gravação não terão efeito. Para determinar se a operação foi bem-sucedida, os drivers podem examinar o número de bytes lidos ou gravados.
O PCI Express e o modo PCI-X 2 dão suporte a um espaço de configuração de dispositivo PCI estendido de mais de 256 bytes. Os drivers podem ler e gravar nesse espaço de configuração, mas somente com o suporte apropriado para hardware e BIOS. No BIOS da ACPI, o barramento raiz deve ter uma ID PNP de PNP0A08 ou PNP0A03. Para barramentos raiz com ID PNP de PNP0A03, o método _DSM com a função 4 deve indicar que o modo atual é o modo PCI-X 2. Todas as pontes e dispositivos devem ser PCI express ou operar no modo PCI-X 2.
Além disso, o sistema deve dar suporte a acessos de espaço de configuração mapeados na memória. Isso é definindo uma tabela MCFG no BIOS/firmware do sistema. Os sistemas operacionais Windows Vista e Windows Server 2008 e posteriores dão suporte automaticamente a acessos de espaço de configuração mapeados em memória.
Aviso
HalGetBusDataByOffset e HalSetBusDataByOffset são fornecidos para compatibilidade com versões anteriores, mas devem ser usados somente se não for possível usar os dois métodos acima.