Partager via


Accès à l’espace de configuration des appareils PCI

Certaines opérations sur un périphérique d’interconnexion de composant périphérique (PCI) sont réservées au pilote de fonction de l’appareil. Ces opérations incluent, par exemple, l’accès à l’espace de configuration spécifique à l’appareil d’un bus et la programmation d’un contrôleur DMA (Direct Memory Access). Microsoft fournit la prise en charge du système pour accéder à l’espace de configuration des appareils PCI par deux méthodes :

Remarque

À compter de Windows 10, version 2004, si un appareil dispose d’une table ACPI sécurisée et d’une sécurité basée sur la virtualisation activées, les restrictions sont placées sur des méthodes non prises en charge pour accéder à l’espace de configuration des appareils PCI. Si un pilote ou un processus tente de lire ou de manipuler l’espace de configuration de périphérique PCI à l’aide d’une méthode qui n’est pas répertoriée ci-dessus, l’accès est bloqué et entraîne une vérification des bogues système.

Les systèmes d’exploitation Windows XP et Windows Server 2003 et ultérieurs ont un contrôle exclusif sur l’en-tête de l’espace de configuration, tel que défini par la spécification PCI Local Bus, ainsi que sur toutes les capacités de la liste des capacités liées. Les pilotes ne doivent pas tenter de modifier ces registres.

Toutefois, les pilotes peuvent écrire dans l’espace de configuration qui n’appartient pas à l’en-tête ou à la liste des fonctionnalités définies par le fournisseur, à l’aide de la requête IRP_MN_WRITE_CONFIG ou de la méthode SetBusData de BUS_INTERFACE_STANDARD. Les pilotes peuvent également lire les fonctionnalités d’un appareil, à l’aide de la requête IRP_MN_READ_CONFIG ou de la méthode GetBusData de BUS_INTERFACE_STANDARD. Pour utiliser IRP_MN_READ_CONFIG ou IRP_MN_WRITE_CONFIG, les pilotes doivent fonctionner au niveau PASSIVE_LEVEL. Pour obtenir la liste des fonctionnalités et des structures correspondantes que les pilotes peuvent interroger, consultez la section structures PCI.

Les pilotes peuvent lire à partir de l’espace de configuration de périphérique PCI étendu (autrement dit, plus de 256 octets de données de configuration) à l’aide de la requête IRP_MN_READ_CONFIG ou de la méthode GetBusData de BUS_INTERFACE_STANDARD. De même, les pilotes peuvent écrire dans l’espace de configuration de périphérique PCI étendu à l’aide de la requête IRP_MN_WRITE_CONFIG ou de la méthode SetBusData de BUS_INTERFACE_STANDARD. Si un appareil n’a pas d’espace de configuration étendu ou si la plateforme ne définit pas de chemin d’accès pour un espace de configuration étendu sur un appareil, les demandes de lecture retournent 0xFFFF et les demandes d’écriture n’ont aucun effet. Pour déterminer si l’opération a réussi, les pilotes peuvent examiner le nombre d’octets lus ou écrits.

PCI Express et PCI-X mode 2 prennent en charge un espace de configuration d’appareil PCI étendu de plus de 256 octets. Les pilotes peuvent lire et écrire dans cet espace de configuration, mais uniquement avec le matériel approprié et la prise en charge du BIOS. Dans le BIOS ACPI, le bus racine doit avoir un ID PNP de PNP0A08 ou de PNP0A03. Pour les bus racines avec l’ID PNP de PNP0A03, la méthode _DSM avec la fonction 4 doit indiquer que le mode actuel est PCI-X mode 2. Tous les ponts et tous les appareils doivent être pci express ou fonctionner en mode PCI-X 2.

En outre, le système doit prendre en charge les accès à l’espace de configuration mappé en mémoire. Il s’agit de définir une table MCFG dans le BIOS/microprogramme système.

Avertissement

HalGetBusDataByOffset et halSetBusDataByOffset sont fournis pour la compatibilité descendante, mais ne doivent être utilisés que si l’utilisation des deux méthodes ci-dessus n’est pas possible.

Voir aussi

Accéder à l’espace de configuration du dispositif