VIDEO_ACCESS_RANGE struttura (video.h)
La struttura VIDEO_ACCESS_RANGE definisce una porta di I/O del dispositivo o un intervallo di memoria per la scheda video. Ogni funzione HwVidFindAdapter di ogni driver miniport deve configurare una matrice di elementi di tipo VIDEO_ACCESS_RANGE, denominata matrice di intervalli di accesso, per ogni scheda video supportata dal driver miniport.
Per i driver miniport compatibili con VGA, VIDEO_ACCESS_RANGE definisce anche un elemento in una matrice passata a VideoPortSetTrappedEmulatorPorts per abilitare o disabilitare l'accesso diretto alle porte di I/O da applicazioni MS-DOS a schermo intero.
Sintassi
typedef struct _VIDEO_ACCESS_RANGE {
PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
UCHAR RangeInIoSpace;
UCHAR RangeVisible;
UCHAR RangeShareable;
UCHAR RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
Members
RangeStart
Specifica l'indirizzo di base relativo al bus di un intervallo di porte di memoria o I/O per un elemento nella matrice di intervalli di accesso passati a VideoPortVerifyAccessRanges o restituito da VideoPortGetAccessRanges.
Specifica l'indirizzo di base relativo al bus di un intervallo di porte di I/O per passare una matrice a VideoPortSetTrappedEmulatorPorts.
RangeLength
Specifica il numero di porte di I/O o o in byte per l'intervallo.
RangeInIoSpace
Specifica se l'intervallo è nello spazio di I/O o nello spazio di memoria. Un valore true (1) indica che l'intervallo si trova nello spazio di I/O; un valore FALSE (0) indica che l'intervallo è nello spazio di memoria.
RangeVisible
Viene ignorato se la funzione HwVidFindAdapter del driver miniport configura la matrice degli intervalli di accesso.
È impostato su TRUE per i driver miniport compatibili con VGA e passati a VideoPortSetTrappedEmulatorPorts per abilitare l'accesso diretto all'intervallo di porte di I/O da un'applicazione MS-DOS a schermo intero. Se impostato su FALSE, le istruzioni rilasciate dall'applicazione continuano a essere intrappolate e inoltrate alla funzione SvgaHwIoXxx del driver miniport per la convalida.
RangeShareable
È impostato su TRUE se l'intervallo di accesso descritto da questo elemento può essere condiviso con un altro driver e/o dispositivo o su FALSE se l'intervallo non può essere condiviso.
Viene ignorato da VideoPortSetTrappedEmulatorPorts.
RangePassive
Indica se il dispositivo usa effettivamente la porta. I valori per questo membro vengono visualizzati nella tabella seguente.
Valore | Significato |
---|---|
VIDEO_RANGE_PASSIVE_DECODE | Il dispositivo decodifica la porta, ma il driver non lo usa. |
VIDEO_RANGE_10_BIT_DECODE | Il dispositivo decodifica dieci bit dell'indirizzo della porta. |
Commenti
Il driver miniport deve richiedere risorse legacy nella funzione DriverEntry o HwVidLegacyResources .
In caso contrario, la funzione HwVidFindAdapter di un driver miniport configura la matrice di intervalli di accesso per le risorse PCI di un adattatore. Può usare le informazioni restituite da VideoPortGetAccessRanges. In alternativa, può usare informazioni recuperate dal Registro di sistema chiamando VideoPortGetDeviceData con una funzione HwVidQueryDeviceCallback fornita da miniport o VideoPortGetRegistryParameters con una funzione HwVidQueryNamedValueCallback fornita da un driver miniport. Se si chiamano questi VideoPortXxx non fornisce i valori di intervallo di accesso relativi al bus, HwVidFindAdapter può configurare gli elementi degli intervalli di accesso usando i valori predefiniti relativi al bus forniti dal driver.
Attestazione degli intervalli di accesso nel Registro di sistema
Il driver miniport deve chiamare VideoPortVerifyAccessRanges con qualsiasi intervallo di accesso ottenuto da VideoPortGetDeviceData, VideoPortGetAccessRanges o fornito come impostazione predefinita dal driver miniport. Se VideoPortVerifyAccessRanges restituisce NO_ERROR per tale matrice di intervalli di accesso, la funzione HwVidFindAdapter o HwVidQueryDeviceCallback può quindi eseguire il mapping degli intervalli con VideoPortGetDeviceBase e usare gli indirizzi logici mappati restituiti per accedere alla scheda.Una chiamata riuscita a VideoPortGetAccessRanges richiede anche gli intervalli di accesso relativi al bus restituiti nel Registro di sistema per il chiamante. Se il driver miniport modifica uno dei valori restituiti, deve chiamare VideoPortVerifyAccessRanges con l'intervallo di accesso completo, inclusi gli elementi non modificati. Ogni chiamata a VideoPortGetAccessRanges o VideoPortVerifyAccessRanges per una determinata scheda video sovrascrive le risorse hardware richieste dal chiamante nel Registro di sistema.
Un driver miniport non deve tentare di usare un intervallo per il quale VideoPortVerifyAccessRanges o VideoPortGetAccessRanges non restituisce NO_ERROR.
Mapping degli intervalli di accesso per comunicare con l'adapter
Dopo che un driver miniport ha richiesto risorse nel Registro di sistema per un adattatore, non può usare indirizzi relativi al bus per accedere o configurare l'adattatore, perché HAL può eseguire nuovamente il mapping di tutti gli indirizzi del dispositivo relativi al bus allo spazio di sistema.La funzione HwVidFindAdapter del driver miniport deve chiamare VideoPortGetDeviceBase per ottenere indirizzi logici mappati per gli intervalli di accesso. Solo il driver miniport può comunicare con la scheda video passando gli indirizzi dell'intervallo logico mappato restituito a VideoPortRead/WritePortXxx per accedere alla memoria del dispositivo nello spazio di I/O e /o VideoPortRead/WriteRegisterXxx per accedere alla memoria del dispositivo nello spazio di memoria.
Determinare se un intervallo di accesso è condivisibile
Seguire queste linee guida per determinare se è possibile condividere un intervallo di accesso:- Se l'intervallo di memoria o porte di I/O deve essere "di proprietà" da questo driver e/o l'accesso a questo intervallo da qualsiasi altro driver può causare un problema, impostare RangeSharable su FALSE.
- Se l'intervallo può essere condiviso con un driver di dispositivo cooperante, impostare RangeSharable su TRUE.
Tuttavia, i driver miniport per le schede che funzionano con un IOCTL pass-through e che possono essere connessi a qualsiasi scheda VGA o SVGA non devono usare porte VGA di sistema o intervalli di memoria. In tal caso, tale driver non deve tentare di richiedere uno degli intervalli di accesso VGA nel Registro di sistema. I tentativi di attestazione delle risorse VGA da un driver miniport potrebbero causare un conflitto di risorse perché il driver di qualsiasi scheda SVGA nel computer avrà richiesto questi intervalli di accesso come non condivisibili.
Passaggio degli elementi dell'intervallo di porte I/O a VideoPortSetTrappedEmulatorPorts
Tutti gli elementi della matrice di tipo VIDEO_ACCESS_RANGE che descrivono gli intervalli di porte di I/O vengono considerati invisibili, a meno che un driver miniport compatibile con VGA in un computer basato su x86 reimposta esplicitamente i membri RangeVisible su TRUE e chiama VideoPortSetTrappedEmulatorPorts per abilitare uno o più intervalli di porte I/O. VideoPortSetTrappedEmulatorPorts ignora i membri RangeSharable della matrice di input.In una matrice di elementi di tipo VIDEO_ACCESS_RANGE passati a VideoPortSetTrappedEmulatorPorts, il valore del membro RangeVisible di ogni elemento determina se le porte di I/O specificate possono essere accessibili direttamente dall'applicazione VDM (applicazione MS-DOS in esecuzione in un computer basato su x86) o se tale flusso I/O rilasciato dall'applicazione è intrappolato e inoltrato a una funzione SvgaHwIoPortXxx fornita da miniport per la convalida.
Requisiti
Requisito | Valore |
---|---|
Intestazione | video.h (includere Video.h) |
Vedi anche
DriverEntry del driver Video Miniport
VideoPortGetRegistryParameters