Accesso a spazio di configurazione del dispositivo PCI

Alcune operazioni su un dispositivo di interconnessione dei componenti periferici (PCI) sono riservate per il driver di funzione del dispositivo. Queste operazioni includono, ad esempio, l'accesso allo spazio di configurazione specifico del dispositivo di un bus e la programmazione di un controller DMA (Direct Memory Access). Microsoft offre il supporto di sistema per accedere allo spazio di configurazione dei dispositivi PCI in base a due metodi:

Nota

A partire da Windows 10 versione 2004, se un dispositivo ha una tabella ACPI (SDEV) secure devices (SDEV) e la sicurezza basata su virtualizzazione vengono inserite su metodi non supportati per accedere allo spazio di configurazione del dispositivo PCI. Se un driver o un processo tenta di leggere o modificare lo spazio di configurazione del dispositivo PCI usando un metodo non elencato sopra, l'accesso verrà bloccato e genererà un controllo di bug di sistema.

I sistemi operativi Windows XP e Windows Server 2003 e versioni successive hanno il controllo esclusivo sull'intestazione dello spazio di configurazione, come definito dalla specifica del bus locale PCI , nonché tutte le funzionalità nell'elenco di funzionalità collegate. I driver non devono tentare di modificare questi registri.

Tuttavia, i driver possono scrivere nello spazio di configurazione che non appartiene all'intestazione o all'elenco delle funzionalità definite dal fornitore, usando la richiesta IRP_MN_WRITE_CONFIG o il metodo SetBusData di BUS_INTERFACE_STANDARD. I driver possono anche leggere le funzionalità di un dispositivo usando la richiesta di IRP_MN_READ_CONFIG o il metodo GetBusData di BUS_INTERFACE_STANDARD. Per usare IRP_MN_READ_CONFIG o IRP_MN_WRITE_CONFIG, i driver devono essere in esecuzione in PASSIVE_LEVEL. Per un elenco di funzionalità e delle strutture corrispondenti che possono eseguire query sui driver, vedere la sezione Strutture PCI .

I driver possono leggere dallo spazio di configurazione del dispositivo PCI esteso, ovvero più di 256 byte di dati di configurazione, usando la richiesta di IRP_MN_READ_CONFIG o il metodo GetBusData di BUS_INTERFACE_STANDARD. Analogamente, i driver possono scrivere nello spazio di configurazione del dispositivo PCI esteso usando la richiesta IRP_MN_WRITE_CONFIG o il metodo SetBusData di BUS_INTERFACE_STANDARD. Se un dispositivo non ha uno spazio di configurazione esteso o la piattaforma non definisce un percorso per uno spazio di configurazione esteso in un dispositivo, le richieste di lettura restituiranno 0xFFFF e le richieste di scrittura non avranno alcun effetto. Per determinare se l'operazione ha esito positivo, i driver possono esaminare il numero di byte letti o scritti.

PCI Express e PCI-X mode 2 supportano uno spazio esteso di configurazione del dispositivo PCI superiore a 256 byte. I driver possono leggere e scrivere in questo spazio di configurazione, ma solo con il supporto hardware e BIOS appropriato. Nel BIOS ACPI il bus radice deve avere un ID PNP di PNP0A08 o PNP0A03. Per gli autobus radice con ID PNP di PNP0A03, il metodo _DSM con la funzione 4 deve indicare che la modalità corrente è PCI-X mode 2. Tutti i ponti e i dispositivi devono essere pci express o operare in modalità PCI-X 2.

Inoltre, il sistema deve supportare gli accessi allo spazio di configurazione mappati alla memoria. Si tratta di definire una tabella MCFG nel BIOS/firmware di sistema. Windows Vista e Windows Server 2008 e versioni successive supportano automaticamente gli accessi dello spazio di configurazione mappati alla memoria.

Avviso

HalGetBusDataByOffset e HalSetBusDataByOffset sono disponibili per la compatibilità con le versioni precedenti, ma devono essere usati solo se l'uso dei due metodi precedenti non è possibile.

Vedi anche

Accesso al spazio di configurazione del dispositivo